From: Jonathan Perkin Date: Thu, 4 Jun 2015 11:10:34 +0000 (+0100) Subject: stdio: Don't redefine gets when using C++ X-Git-Tag: v1.0~7050 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=d6176702c3ffb6c56e6620397470e1b3bd540b10;p=gnulib.git stdio: Don't redefine gets when using C++ We've hit this failure a few times in pkgsrc with packages which embed gnulib, an example being the latest gnutls: ../../src/gl/stdio.h:1034:1: error: 'char* gets(char*)' conflicts with a previous declaration _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ^ /opt/tools/gcc49/lib/gcc/x86_64-sun-solaris2.11/4.9.2/include-fixed/iso/stdio_iso.h:259:14: note: previous declaration 'char* std::gets(char*)' extern char *gets(char *); ^ Full build log is here: http://us-east.manta.joyent.com/pkgsrc/public/reports/upstream-trunk32/20150602.2233/gnutls-3.3.15/build.log We've fixed it a few different ways over time: https://github.com/joyent/pkgsrc/blob/joyent/release/2015Q1/devel/m4/patches/patch-lib_stdio.in.h https://github.com/joyent/pkgsrc/blob/joyent/release/2015Q1/math/octave/patches/patch-libgnu_stdio.in.h https://github.com/joyent/pkgsrc/blob/joyent/release/2015Q1/security/gnutls/patches/patch-gl_stdio.in.h but the cleanest fix appears to be the last, so I am proposing it here for inclusion upstream. Message-Id: <20150604111034.GG66573@joyent.com> Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index ed6803264b..296ccaf141 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-06-05 Jonathan Perkin (tiny change) + + stdio: Don't redefine gets when using C++ + * lib/stdio.in.h (gets): Disable warning on C++. + 2015-06-05 Paul Eggert acl-permissions: port to older AIX, C89 HP-UX diff --git a/lib/stdio.in.h b/lib/stdio.in.h index fa6b595369..476dee1c58 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -723,11 +723,10 @@ _GL_WARN_ON_USE (getline, "getline is unportable - " so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets -#if HAVE_RAW_DECL_GETS +#if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif - #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of