From 3e6466c9f9c86cb7fa637afab388b1f8c7bf0bd7 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 17 Nov 2004 01:53:27 +0000 Subject: [PATCH] (__getopt_argv_const): Bring it back. (getopt_long, getopt_long_only): Use it. --- lib/getopt_.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/getopt_.h b/lib/getopt_.h index c5c836e648..6eaa7eb91a 100644 --- a/lib/getopt_.h +++ b/lib/getopt_.h @@ -53,6 +53,17 @@ # define optopt __GETOPT_PREFIX##optopt #endif +/* Standalone applications get correct prototypes for getopt_long and + 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 +#endif + /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include , but @@ -178,11 +189,11 @@ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW; #ifndef __need_getopt -extern int getopt_long (int ___argc, char **___argv, +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW; -extern int getopt_long_only (int ___argc, char **___argv, +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW; -- 2.30.2