diff options
Diffstat (limited to 'gnu/usr.bin/cvs/lib/getopt1.c')
-rw-r--r-- | gnu/usr.bin/cvs/lib/getopt1.c | 101 |
1 files changed, 61 insertions, 40 deletions
diff --git a/gnu/usr.bin/cvs/lib/getopt1.c b/gnu/usr.bin/cvs/lib/getopt1.c index 8606462..f784b57 100644 --- a/gnu/usr.bin/cvs/lib/getopt1.c +++ b/gnu/usr.bin/cvs/lib/getopt1.c @@ -1,10 +1,11 @@ -/* Getopt for GNU. - Copyright (C) 1987-1992 Free Software Foundation, Inc. +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 + Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -13,67 +14,84 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifdef HAVE_CONFIG_H +#if defined (emacs) || defined (CONFIG_BROKETS) +/* We use <config.h> instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because it found this file in $srcdir). */ +#include <config.h> +#else +#include "config.h" +#endif +#endif + #include "getopt.h" -#if !__STDC__ +#ifndef __STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const #define const #endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + -#if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ #include <stdlib.h> -#else /* STDC_HEADERS or __GNU_LIBRARY__ */ +#else char *getenv (); -#endif /* STDC_HEADERS or __GNU_LIBRARY__ */ +#endif -#if !defined (NULL) +#ifndef NULL #define NULL 0 #endif int -gnu_getopt_long (argc, argv, options, long_options, opt_index) +getopt_long (argc, argv, options, long_options, opt_index) int argc; - char **argv; + char *const *argv; const char *options; const struct option *long_options; int *opt_index; { - int val; - - /* For strict POSIX compatibility, we must turn off long options. */ - if (getenv ("POSIX_ME_HARDER") == 0) - _getopt_long_options = long_options; - val = gnu_getopt (argc, argv, options); - if (val == 0 && opt_index != NULL) - *opt_index = option_index; - return val; + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } -/* Like getopt_long, but '-' as well as '+' can indicate a long option. - If an option that starts with '-' doesn't match a long option, +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option - instead. */ + instead. */ -int -gnu_getopt_long_only (argc, argv, options, long_options, opt_index) +int +getopt_long_only (argc, argv, options, long_options, opt_index) int argc; - char **argv; + char *const *argv; const char *options; const struct option *long_options; int *opt_index; { - int val; - - _getopt_long_options = long_options; - _getopt_long_only = 1; - val = gnu_getopt (argc, argv, options); - if (val == 0 && opt_index != NULL) - *opt_index = option_index; - return val; + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } - + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + #ifdef TEST #include <stdio.h> @@ -89,7 +107,6 @@ main (argc, argv) while (1) { int this_option_optind = optind ? optind : 1; - char *name = '\0'; int option_index = 0; static struct option long_options[] = { @@ -110,7 +127,7 @@ main (argc, argv) switch (c) { case 0: - printf ("option %s", (long_options[option_index]).name); + printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); @@ -144,6 +161,10 @@ main (argc, argv) printf ("option c with value `%s'\n", optarg); break; + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + case '?': break; |