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