X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=klibc%2Fklibc%2Fstrncat.c;h=0dd9deb984f1323874d64ef8fb5f0d11e8273387;hb=a0622777688ad84ef3d789e0171cfb0ca3dc21d2;hp=99d957594cfd07507d800edd867d06dc7625a285;hpb=a41a0e28c2ba0abf99b5e7ea17645ae0e4f05758;p=elogind.git diff --git a/klibc/klibc/strncat.c b/klibc/klibc/strncat.c index 99d957594..0dd9deb98 100644 --- a/klibc/klibc/strncat.c +++ b/klibc/klibc/strncat.c @@ -3,9 +3,23 @@ */ #include +#include char *strncat(char *dst, const char *src, size_t n) { - strncpy(strchr(dst, '\0'), src, n); + char *q = strchr(dst, '\0'); + const char *p = src; + char ch; + size_t nn = q-dst; + + if ( __likely(nn <= n) ) + n -= nn; + + while (n--) { + *q++ = ch = *p++; + if ( !ch ) + break; + } + return dst; }