changeset 5476:bd24d57774ac

Re-addition of __getopt_argv_const caused redefinition warnings. To avoid them, include the defines in `#if !defined __need_getopt ... #endif'. The only place where __getopt_argv_const is used is in definitions of getopt_long and getopt_long_only below, which are as well protected by `#ifndef __need_getopt'. [defined __GETOPT_PREFIX && !defined __need_getopt]: Undef __need_getopt after including <stdio.h> and <unistd.h> These headers might have defined it.
author Sergey Poznyakoff <gray@gnu.org.ua>
date Tue, 23 Nov 2004 02:50:54 +0000
parents 4900a3dc31b5
children 65231c66005d
files lib/getopt_.h
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lib/getopt_.h
+++ b/lib/getopt_.h
@@ -37,6 +37,7 @@
 # if HAVE_UNISTD_H
 #  include <unistd.h>
 # endif
+# undef __need_getopt
 # undef getopt
 # undef getopt_long
 # undef getopt_long_only
@@ -60,11 +61,24 @@
    getopt_long_only; they declare "char **argv".  libc uses prototypes
    with "char *const *argv" that are incorrect because getopt_long and
    getopt_long_only can permute argv; this is required for backward
-   compatibility (e.g., for LSB 2.0.1).  */
-#if defined __GETOPT_PREFIX && !defined __need_getopt
-# define __getopt_argv_const /* empty */
-#else
-# define __getopt_argv_const const
+   compatibility (e.g., for LSB 2.0.1).
+
+   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   but it caused redefinition warnings if both unistd.h and getopt.h were
+   included, since unistd.h includes getopt.h having previously defined
+   __need_getopt.
+   
+   The only place where __getopt_argv_const is used is in definitions
+   of getopt_long and getopt_long_only below, but these are visible
+   only if __need_getopt is not defined, so it is quite safe to rewrite
+   the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX 
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
 #endif
 
 /* If __GNU_LIBRARY__ is not already defined, either we are being used