/** | |
* 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; | |
} |