diff --git a/libc/minilibc/string.c b/libc/minilibc/string.c index 0b1d893f2ad82ac2134045643d55b66e2bea07dc..3eac377c7ae42e1b140de6f9901e7a348e1fe169 100644 --- a/libc/minilibc/string.c +++ b/libc/minilibc/string.c @@ -60,38 +60,34 @@ int strncmp(const char * cs,const char * ct,rt_ubase_t count) return __res; } -char* strcat(register char* s,register const char* t) +char *strcat(char * dest, const char * src) { - char *dest = s; - - s += strlen(s); - for (;;) - { - if (!(*s = *t)) break; - ++s; - ++t; - } - - return dest; + char *tmp = dest; + + while (*dest) + dest++; + while ((*dest++ = *src++) != '\0') + ; + + return tmp; } -char *strncat(char *s, const char *t, size_t n) +char *strncat(char *dest, const char *src, size_t count) { - char *dest = s; - register char *max; - - s += rt_strlen(s); - if ((max=s+n)==s) - goto fini; - for (;;) - { - if (!(*s = *t)) break; - if (++s==max) break; - ++t; + char *tmp = dest; + + if (count) { + while (*dest) + dest++; + while ((*dest++ = *src++)) { + if (--count == 0) { + *dest = '\0'; + break; + } + } } - *s=0; -fini: - return dest; + + return tmp; } char *strrchr(const char *t, int c) diff --git a/libc/minilibc/string.h b/libc/minilibc/string.h index 2435334170a7d5d379a5c5845d5d9ea1c80c09a5..93594dc64ffec5be94f3b28b68cc4297b34c16e4 100644 --- a/libc/minilibc/string.h +++ b/libc/minilibc/string.h @@ -57,11 +57,11 @@ int strcasecmp(const char *a, const char *b); int strncasecmp(const char *cs, const char *ct, size_t count); int sscanf(const char * buf, const char * fmt, ...); size_t strlen(const char *s); -char * strstr(const char * s1,const char * s2); +char *strstr(const char * s1,const char * s2); char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); -char *strncat(char *s, const char *t, size_t n) ; -char* strcat(register char* s,register const char* t); +char *strncat(char *dest, const char *src, size_t count); +char *strcat(char * dest, const char * src); char *strrchr(const char *t, int c); char *strdup(const char *s);