1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License. 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License. 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/memory.h> 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 19bb12ac9b85adae96cbd38b2220c5da9a9d80bc54Lu, Hongjiu#if !HAVE_MEMSET16 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid android_memset16(uint16_t* dst, uint16_t value, size_t size) 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project size >>= 1; 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (size--) { 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *dst++ = value; 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 27bb12ac9b85adae96cbd38b2220c5da9a9d80bc54Lu, Hongjiu#endif 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 29bb12ac9b85adae96cbd38b2220c5da9a9d80bc54Lu, Hongjiu#if !HAVE_MEMSET32 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid android_memset32(uint32_t* dst, uint32_t value, size_t size) 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project size >>= 2; 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (size--) { 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *dst++ = value; 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 37bb12ac9b85adae96cbd38b2220c5da9a9d80bc54Lu, Hongjiu#endif 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if !HAVE_STRLCPY 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Permission to use, copy, modify, and distribute this software for any 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * purpose with or without fee is hereby granted, provided that the above 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * copyright notice and this permission notice appear in all copies. 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h> 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h> 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Implementation of strlcpy() for platforms that don't already have it. */ 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copy src to string dst of size siz. At most siz-1 characters 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * will be copied. Always NUL terminates (unless siz == 0). 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Returns strlen(src); if retval >= siz, truncation occurred. 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectsize_t 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstrlcpy(char *dst, const char *src, size_t siz) 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *d = dst; 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const char *s = src; 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project size_t n = siz; 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* Copy as many bytes as will fit */ 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n != 0) { 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (--n != 0) { 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if ((*d++ = *s++) == '\0') 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project /* Not enough room in dst, add NUL and traverse rest of src */ 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n == 0) { 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (siz != 0) 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *d = '\0'; /* NUL-terminate dst */ 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (*s++) 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ; 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return(s - src - 1); /* count does not include NUL */ 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 92