| /** |
| * 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> |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| void __cdecl __chk_fail(void) __attribute__((__noreturn__)); |
| |
| char *__cdecl __gets_chk(char *dst, size_t bufsize); |
| |
| char *__cdecl __gets_chk(char *dst, size_t bufsize) |
| { |
| char *buf; |
| size_t n; |
| if (bufsize >= (size_t) INT_MAX) |
| return gets(dst); |
| |
| buf = malloc(bufsize + 1); |
| if (!buf) |
| return gets(dst); |
| |
| if (!fgets(buf, (int)(bufsize + 1), stdin)) { |
| free(buf); |
| return NULL; |
| } |
| |
| n = strlen(buf); |
| if (n > 0 && buf[n - 1] == '\n') |
| n--; |
| |
| if (n >= bufsize) |
| __chk_fail(); |
| |
| memcpy(dst, buf, n); |
| dst[n] = '\0'; |
| free(buf); |
| return dst; |
| } |