4f7f7f286d
Change-Id: Ia9c0b09ffb57dccbc7d13fce3b3a8a7d46b84857
37 lines
800 B
C
37 lines
800 B
C
#include "rocklibc.h"
|
|
|
|
/* gcc is broken and has a non-SUSv2 compliant internal prototype.
|
|
* This causes it to warn about a type mismatch here. Ignore it. */
|
|
char *strncat(char *s, const char *t, size_t n) {
|
|
char *dest=s;
|
|
register char *max;
|
|
s+=strlen(s);
|
|
if (__unlikely((max=s+n)==s)) goto fini;
|
|
for (;;) {
|
|
if (__unlikely(!(*s = *t)))
|
|
break;
|
|
if (__unlikely(++s==max))
|
|
break;
|
|
++t;
|
|
#ifndef WANT_SMALL_STRING_ROUTINES
|
|
if (__unlikely(!(*s = *t)))
|
|
break;
|
|
if (__unlikely(++s==max))
|
|
break;
|
|
++t;
|
|
if (__unlikely(!(*s = *t)))
|
|
break;
|
|
if (__unlikely(++s==max))
|
|
break;
|
|
++t;
|
|
if (__unlikely(!(*s = *t)))
|
|
break;
|
|
if (__unlikely(++s==max))
|
|
break;
|
|
++t;
|
|
#endif
|
|
}
|
|
*s=0;
|
|
fini:
|
|
return dest;
|
|
}
|