diff options
author | Zack Weinberg <zackw@panix.com> | 2016-11-21 08:16:27 -0500 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2017-02-25 09:47:51 -0500 |
commit | 7caa5054afc1754a871333b1539e08a4af79444e (patch) | |
tree | a88f80370a89a6a7a2b2e26d3e3f0f51131fef32 /include/stdio.h | |
parent | 4f5a9afffb7f1fdb330b0f8dcca196a439ac07a8 (diff) | |
download | glibc-7caa5054afc1754a871333b1539e08a4af79444e.tar.gz glibc-7caa5054afc1754a871333b1539e08a4af79444e.tar.xz glibc-7caa5054afc1754a871333b1539e08a4af79444e.zip |
Clean up conditionals for declaration of gets.
gets has the dubious honor of being the only C89 library feature that has been completely removed from the current C and C++ standards. glibc follows suit by not declaring it in _GNU_SOURCE mode either, but it remains present in older compatibility modes. Internally, two test cases need to see stdio.h make the declaration, but all our internal code is of course compiled under _GNU_SOURCE. This is currently kludged by duplicating the gets declaration, fortify wrapper and all, in include/stdio.h. Also, the conditional in the public headers for deciding when to declare gets is complicated and repeated in two places. This patch adds a new macro to features.h that encapsulates the complicated rule for when to declare gets. stdio.h and bits/stdio2.h then simply test __GLIBC_USE (DEPRECATED_GETS), and instead of having a duplicate gets declaration in include/stdio.h, debug/tst-chk1.c and stdio-common/tst-gets.c can force gets to be declared. * include/features.h (__GLIBC_USE_DEPRECATED_GETS): New macro. * libio/stdio.h, libio/bits/stdio2.h: Condition gets on __GLIBC_USE (DEPRECATED_GETS). Update comments to indicate gets was removed from C++ in C++14. * include/stdio.h: Remove redundant declaration of gets. * debug/tst-chk1.c, stdio-common/tst-gets.c: Force gets to be declared, since we are testing it. * stdio-common/Makefile (tst-gets.c): Compile with -Wno-deprecated-declarations. * debug/Makefile (tst-chk1.c, tst-chk2.c, tst-chk3.c, tst-chk4.cc) (tst-chk5.cc, tst-chk6.cc, tst-lfschk1.c, tst-lfschk2.c) (tst-lfschk3.c, tst-lfschk4.cc, tst-lfschk5.cc, tst-lfschk6.cc): Compile with -Wno-deprecated-declarations.
Diffstat (limited to 'include/stdio.h')
-rw-r--r-- | include/stdio.h | 18 |
1 files changed, 0 insertions, 18 deletions
diff --git a/include/stdio.h b/include/stdio.h index 30e737efc2..17b5a05076 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -181,24 +181,6 @@ libc_hidden_proto (__vasprintf_chk) libc_hidden_proto (__vdprintf_chk) libc_hidden_proto (__obstack_vprintf_chk) -/* The <stdio.h> header does not include the declaration for gets - anymore when compiling with _GNU_SOURCE. Provide a copy here. */ -extern char *gets (char *__s); -# if __USE_FORTIFY_LEVEL > 0 -extern char *__gets_chk (char *__str, size_t) __wur; -extern char *__REDIRECT (__gets_warn, (char *__str), gets) - __wur __warnattr ("please use fgets or getline instead, gets can't " - "specify buffer size"); - -__fortify_function __wur char * -gets (char *__str) -{ - if (__bos (__str) != (size_t) -1) - return __gets_chk (__str, __bos (__str)); - return __gets_warn (__str); -} -# endif - extern FILE * __fmemopen (void *buf, size_t len, const char *mode); libc_hidden_proto (__fmemopen) |