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