Fix gets problems
authorUlrich Drepper <drepper@gmail.com>
Tue, 24 Jan 2012 22:40:44 +0000 (17:40 -0500)
committerUlrich Drepper <drepper@gmail.com>
Tue, 24 Jan 2012 22:40:44 +0000 (17:40 -0500)
ChangeLog
debug/tst-chk1.c
include/stdio.h
stdio-common/tst-gets.c

index f0f3017..1887ec2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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__.
index 2593ab9..21419ee 100644 (file)
 #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
index 5f4495d..48aa765 100644 (file)
@@ -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
index 463f345..7975893 100644 (file)
@@ -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.
 
 #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)