diff options
author | Guido Guenther <agx@sigxcpu.org> | 2006-11-18 23:48:07 +0100 |
---|---|---|
committer | Guido Guenther <agx@bogon.sigxcpu.org> | 2006-11-18 23:48:07 +0100 |
commit | d1e063beb43e595680c65e3804d1f8ddff53373b (patch) | |
tree | f7256dfe1b807920270ec5113df6f6e4abf1ed0f /arclib/string.c |
Imported Debian version 0.3.8.80.3.8.8
Diffstat (limited to 'arclib/string.c')
-rw-r--r-- | arclib/string.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/arclib/string.c b/arclib/string.c new file mode 100644 index 0000000..6ff3cfb --- /dev/null +++ b/arclib/string.c @@ -0,0 +1,126 @@ +/* + * Copyright 1999, 2001 Silicon Graphics, Inc. + * Copyright 2001 Ralf Baechle + * 2001 Guido Guenther <agx@sgixcpu.org> + */ +#include "string.h" + +#include "stdlib.h" + +size_t strlen(const char *s) +{ + size_t len = 0; + + while (*(s++) != '\0') + len += 1; + + return len; +} + + +int strncmp(const char *s1, const char *s2, size_t n) +{ + while (n-- > 0) { + if (*s1 < *s2) + return -1; + else if (*s1 > *s2) + return 1; + else if (*s1 == '\0') + return 0; + s1 += 1; + s2 += 1; + } + + return 0; +} + +/* from lib/string.c in the kernel sources */ +int strcmp(const char * cs,const char * ct) +{ + register signed char __res; + + while (1) { + if ((__res = *cs - *ct++) != 0 || !*cs++) + break; + } + + return __res; +} + +char *strchr(const char *s, int c) +{ + while ((*s != (char) c) && (*s != '\0')) + s += 1; + return (char *) ((*s == '\0') ? NULL : s); +} + + +char *strcpy(char *s1, const char *s2) +{ + char *s = s1; + + do { + *(s1++) = *(s2); + } while(*s2++ != 0x0); + + return s; +} + + +char *strncpy(char *s1, const char *s2, size_t n) +{ + char *s = s1; + + while (n-- > 0) { + if ((*(s1++) = *(s2++)) == '\0') + break; + } + + return s; +} + + +char *strdup(const char *s1) +{ + char *str = malloc(strlen(s1) + 1); + + if (str != NULL) + strcpy(str, s1); + return str; +} + +int memcmp(const void * cs,const void * ct,size_t count) +{ + const unsigned char *su1, *su2; + signed char res = 0; + + for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) + if ((res = *su1 - *su2) != 0) + break; + return res; +} + +void *memcpy(void *s1, const void *s2, size_t n) +{ + char *c1 = (char *) s1; + const char *c2 = (const char *) s2; + + while (n-- > 0) + *(c1++) = *(c2++); + return s1; +} + + +void *memset(void *s, int c, size_t n) +{ + char *mem = (char *) s; + + while (n-- > 0) + *(mem++) = (char) c; + return s; +} + +void __bzero(char *p, int len) +{ + memset(p, 0, len); +} |