diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 |
commit | 1cd785fe106389b7cc708d1c413eb8bfbc95ff43 (patch) | |
tree | 01a20f24c6cac36568a0c96ce76578fe8b8f47f8 /libc/string/cris/strncpy.c | |
parent | b892d0f9caca5d891d7ce615e3df518b3870b36b (diff) | |
download | uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.bz2 uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.xz |
Merge nptl branch tree with trunk.
Step 8: add xtensa, cris and avr32 architecture dependent
files, as is.
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libc/string/cris/strncpy.c')
-rw-r--r-- | libc/string/cris/strncpy.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libc/string/cris/strncpy.c b/libc/string/cris/strncpy.c new file mode 100644 index 000000000..93a6608bc --- /dev/null +++ b/libc/string/cris/strncpy.c @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2006-2007 Axis Communications AB + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#include <string.h> + +libc_hidden_proto(memset) + +libc_hidden_proto(strncpy) +char *strncpy(char *dest, const char *src, size_t count) +{ + char *ret = dest; + unsigned long himagic = 0x80808080L; + unsigned long lomagic = 0x01010101L; + + while (count && (unsigned long)src & (sizeof src - 1)) + { + count--; + if (!(*dest++ = *src++)) + { + goto finalize; + } + } + + while (count >= sizeof (unsigned long)) + { + unsigned long value = *(unsigned long*)src; + unsigned long magic; + + if ((magic = (value - lomagic) & himagic)) + { + if (magic & ~value) + { + break; + } + } + + *(unsigned long*)dest = value; + dest += sizeof (unsigned long); + src += sizeof (unsigned long); + count -= sizeof (unsigned long); + } + + while (count) + { + count--; + if (!(*dest++ = *src++)) + break; + } + +finalize: + if (count) + { + memset(dest, '\0', count); + } + + return ret; +} +libc_hidden_def(strncpy) |