diff options
author | Ulrich Drepper <drepper@gmail.com> | 2012-01-24 17:40:44 -0500 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2012-01-24 17:40:44 -0500 |
commit | b15549e6f8d5936c4312b022ac8910823f2c2280 (patch) | |
tree | 9e0a26dfb17b4e9c3cb89a38d5ec9a7f460236de | |
parent | d220b1177777a2cd00d1b1eae62e1071a17ab46b (diff) | |
download | glibc-b15549e6f8d5936c4312b022ac8910823f2c2280.zip glibc-b15549e6f8d5936c4312b022ac8910823f2c2280.tar.gz glibc-b15549e6f8d5936c4312b022ac8910823f2c2280.tar.bz2 |
Fix gets problems
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | debug/tst-chk1.c | 5 | ||||
-rw-r--r-- | include/stdio.h | 22 | ||||
-rw-r--r-- | stdio-common/tst-gets.c | 6 |
4 files changed, 30 insertions, 10 deletions
@@ -1,3 +1,10 @@ +2012-01-24 Ulrich Drepper <drepper@gmail.com> + + * include/stdio.h: Add C++ protection. Add gets declarations and + definitions. + * debug/tst-chk1.c: Don't declare gets here. + * stdio-common/tst-gets.c: Likewise. + 2012-01-21 Ulrich Drepper <drepper@gmail.com> * wcsmbs/uchar.h: Test __STDC_VERSION__. diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c index 2593ab9..21419ee 100644 --- a/debug/tst-chk1.c +++ b/debug/tst-chk1.c @@ -34,11 +34,6 @@ #include <sys/socket.h> #include <sys/un.h> -__BEGIN_DECLS -/* 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); -__END_DECLS #define obstack_chunk_alloc malloc #define obstack_chunk_free free diff --git a/include/stdio.h b/include/stdio.h index 5f4495d..48aa765 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -5,6 +5,8 @@ # include <libio/stdio.h> /* Now define the internal interfaces. */ +__BEGIN_DECLS + extern int __fcloseall (void); extern int __snprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, ...) @@ -164,6 +166,26 @@ libc_hidden_proto (__vfprintf_chk) 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"); + +__extern_always_inline __wur char * +gets (char *__str) +{ + if (__bos (__str) != (size_t) -1) + return __gets_chk (__str, __bos (__str)); + return __gets_warn (__str); +} +# endif + +__END_DECLS # endif #endif diff --git a/stdio-common/tst-gets.c b/stdio-common/tst-gets.c index 463f345..7975893 100644 --- a/stdio-common/tst-gets.c +++ b/stdio-common/tst-gets.c @@ -1,5 +1,5 @@ /* Tests for gets. - Copyright (C) 2001, 2011 Free Software Foundation, Inc. + Copyright (C) 2001, 2011, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. @@ -21,10 +21,6 @@ #include <stdio.h> #include <string.h> -/* 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); - int main (void) |