blob: 2b2bfc1a5643656f53e255a38d06cf0007f028d2 [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#include <string.h>
void __cdecl __chk_fail(void) __attribute__((__noreturn__));
char *__cdecl __strncat_chk(char *dst, const char *src, size_t n, size_t bufsize);
char *__cdecl __strncat_chk(char *dst, const char *src, size_t n, size_t bufsize)
{
size_t cur_len = strlen(dst);
char *orig_dst = dst;
char c;
if (cur_len > bufsize)
__chk_fail();
dst += cur_len;
bufsize -= cur_len;
while (n > 0) {
if (bufsize == 0)
__chk_fail();
c = *src++;
*dst++ = c;
n--;
bufsize--;
if (c == '\0')
return orig_dst;
}
if (bufsize == 0)
__chk_fail();
*dst++ = '\0';
return orig_dst;
}