diff --git a/software/include/base/string.h b/software/include/base/string.h index e0a044002..f997a007a 100644 --- a/software/include/base/string.h +++ b/software/include/base/string.h @@ -29,6 +29,8 @@ char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t count); int strcmp(const char *cs, const char *ct); int strncmp(const char *cs, const char *ct, size_t count); +char *strcat(char *dest, const char *src); +char *strncat(char *dest, const char *src, size_t n); size_t strlen(const char *s); size_t strnlen(const char *s, size_t count); size_t strspn(const char *s, const char *accept); diff --git a/software/libbase/libc.c b/software/libbase/libc.c index 69b08f54f..876e195dc 100644 --- a/software/libbase/libc.c +++ b/software/libbase/libc.c @@ -160,6 +160,48 @@ int strncmp(const char *cs, const char *ct, size_t count) return __res; } +/** + * strcat - Append one %NUL-terminated string to another + * @dest: The string to be appended to + * @src: The string to append to it + */ +char *strcat(char *dest, const char *src) +{ + char *tmp = dest; + + while (*dest) + dest++; + while ((*dest++ = *src++) != '\0') + ; + return tmp; +} + +/** + * strncat - Append a length-limited, %NUL-terminated string to another + * @dest: The string to be appended to + * @src: The string to append to it + * @count: The maximum numbers of bytes to copy + * + * Note that in contrast to strncpy(), strncat() ensures the result is + * terminated. + */ +char *strncat(char *dest, const char *src, size_t count) +{ + char *tmp = dest; + + if (count) { + while (*dest) + dest++; + while ((*dest++ = *src++) != 0) { + if (--count == 0) { + *dest = '\0'; + break; + } + } + } + return tmp; +} + /** * strlen - Find the length of a string * @s: The string to be sized