From 3792bbd9d1ee5496f41f55f6e525283091c41835 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Sun, 23 May 2021 17:26:01 +0200 Subject: [PATCH] string: split strcat and strncat (DONE) --- CMakeLists.txt | 1 + src/libc/string/strcat.c | 33 --------------------------------- src/libc/string/strncat.c | 12 ++++++++++++ 3 files changed, 13 insertions(+), 33 deletions(-) create mode 100644 src/libc/string/strncat.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 9968b5c..3ffd8e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,6 +142,7 @@ set(SOURCES src/libc/string/strcpy.c src/libc/string/strdup.c src/libc/string/strlen.c + src/libc/string/strncat.c src/libc/string/strncmp.c src/libc/string/strncpy.c src/libc/string/strnlen.c diff --git a/src/libc/string/strcat.c b/src/libc/string/strcat.c index 8bf00c8..84cae11 100644 --- a/src/libc/string/strcat.c +++ b/src/libc/string/strcat.c @@ -1,16 +1,5 @@ #include -/* -** The strcat() function appends the src string to the dest string, -** overwriting the terminating null byte ('\0') at the end of dest, and then -** adds a terminating null byte. The strings may not overlap, and the dest -** string must have enough space for the result. If dest is not large enough, -** program behavior is unpredictable; buffer overruns are a favorite avenue for -** attacking secure programs. -** -** TODO: use the DMA ! -** TODO: look at the DSP ? -*/ char *strcat(char *dest, char const *src) { size_t i; @@ -26,25 +15,3 @@ char *strcat(char *dest, char const *src) dest[i + start] = '\0'; return (dest); } - -/* -** The strncat() function is similar, except that: -** * it will use at most n bytes from src; and -** * src does not need to be null-terminated if it contains n or more bytes. -** -** As with strcat(), the resulting string in dest is always null-terminated. -** -** If src contains n or more bytes, strncat() writes n+1 bytes to dest (n from -** src plus the terminating null byte). Therefore, the size of dest must be at -** least strlen(dest)+n+1. -*/ -char *strncat(char *dest, const char *src, size_t n) -{ - size_t dest_len = strlen(dest); - size_t i; - - for (i = 0; i < n && src[i] != '\0'; i++) - dest[dest_len + i] = src[i]; - dest[dest_len + i] = '\0'; - return (dest); -} diff --git a/src/libc/string/strncat.c b/src/libc/string/strncat.c new file mode 100644 index 0000000..6e6efd2 --- /dev/null +++ b/src/libc/string/strncat.c @@ -0,0 +1,12 @@ +#include + +char *strncat(char *dest, const char *src, size_t n) +{ + size_t dest_len = strlen(dest); + size_t i; + + for (i = 0; i < n && src[i] != '\0'; i++) + dest[dest_len + i] = src[i]; + dest[dest_len + i] = '\0'; + return (dest); +}