X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ea77b9c3fc7fb9bf9d7f9604fc187c8049212a2a..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/libs/klibc/string/strcpy.c diff --git a/lunaix-os/libs/klibc/string/strcpy.c b/lunaix-os/libs/klibc/string/strcpy.c index 1f7a06d..4002d5b 100644 --- a/lunaix-os/libs/klibc/string/strcpy.c +++ b/lunaix-os/libs/klibc/string/strcpy.c @@ -1,6 +1,7 @@ #include +#include -char* +char* weak strcpy(char* dest, const char* src) { char c; @@ -9,18 +10,35 @@ strcpy(char* dest, const char* src) dest[i] = c; i++; } - dest[i] = '\0'; - return dest; + dest[i++] = '\0'; + return &dest[i]; } -char* -strncpy(char* dest, const char* src, size_t n) +/** + * @brief strcpy with constrain on numbers of character. + * this version is smarter than stdc, it will automatically + * handle the null-terminator. + * + * @param dest + * @param src + * @param n + * @return char* + */ +char* weak +strncpy(char* dest, const char* src, unsigned long n) { char c; unsigned int i = 0; - while ((c = src[i]) && i <= n) + while (i <= n && (c = src[i])) dest[i++] = c; - while (i <= n) - dest[i++] = 0; + + if (!(n < i && src[i - 1])) { + while (i <= n) + dest[i++] = 0; + } + else { + dest[i - 1] = 0; + } + return dest; } \ No newline at end of file