Annotation of embedaddon/quagga/lib/getopt1.c, revision 1.1
1.1 ! misho 1: /* getopt_long and getopt_long_only entry points for GNU getopt.
! 2: Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
! 3: Free Software Foundation, Inc.
! 4:
! 5: NOTE: The canonical source of this file is maintained with the GNU C Library.
! 6: Bugs can be reported to bug-glibc@gnu.org.
! 7:
! 8: This program is free software; you can redistribute it and/or modify it
! 9: under the terms of the GNU General Public License as published by the
! 10: Free Software Foundation; either version 2, or (at your option) any
! 11: later version.
! 12:
! 13: This program is distributed in the hope that it will be useful,
! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 16: GNU General Public License for more details.
! 17:
! 18: You should have received a copy of the GNU General Public License
! 19: along with this program; if not, write to the Free Software
! 20: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
! 21: USA. */
! 22:
! 23: #ifdef HAVE_CONFIG_H
! 24: #include <config.h>
! 25: #endif
! 26:
! 27: #include <zebra.h>
! 28: #include "getopt.h"
! 29:
! 30: #if !defined __STDC__ || !__STDC__
! 31: /* This is a separate conditional since some stdc systems
! 32: reject `defined (const)'. */
! 33: #ifndef const
! 34: #define const
! 35: #endif
! 36: #endif
! 37:
! 38: #include <stdio.h>
! 39:
! 40: /* Comment out all this code if we are using the GNU C Library, and are not
! 41: actually compiling the library itself. This code is part of the GNU C
! 42: Library, but also included in many other GNU distributions. Compiling
! 43: and linking in this code is a waste when using the GNU C library
! 44: (especially if it is a shared library). Rather than having every GNU
! 45: program understand `configure --with-gnu-libc' and omit the object files,
! 46: it is simpler to just do this in the source for each such file. */
! 47:
! 48: #define GETOPT_INTERFACE_VERSION 2
! 49: #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
! 50: #include <gnu-versions.h>
! 51: #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
! 52: #define ELIDE_CODE
! 53: #endif
! 54: #endif
! 55:
! 56: #ifndef ELIDE_CODE
! 57:
! 58:
! 59: /* This needs to come after some library #include
! 60: to get __GNU_LIBRARY__ defined. */
! 61: #ifdef __GNU_LIBRARY__
! 62: #include <stdlib.h>
! 63: #endif
! 64:
! 65: #ifndef NULL
! 66: #define NULL 0
! 67: #endif
! 68:
! 69: int
! 70: getopt_long (argc, argv, options, long_options, opt_index)
! 71: int argc;
! 72: char *const *argv;
! 73: const char *options;
! 74: const struct option *long_options;
! 75: int *opt_index;
! 76: {
! 77: return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
! 78: }
! 79:
! 80: /* Like getopt_long, but '-' as well as '--' can indicate a long option.
! 81: If an option that starts with '-' (not '--') doesn't match a long option,
! 82: but does match a short option, it is parsed as a short option
! 83: instead. */
! 84:
! 85: int
! 86: getopt_long_only (argc, argv, options, long_options, opt_index)
! 87: int argc;
! 88: char *const *argv;
! 89: const char *options;
! 90: const struct option *long_options;
! 91: int *opt_index;
! 92: {
! 93: return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
! 94: }
! 95:
! 96:
! 97: #endif /* Not ELIDE_CODE. */
! 98:
! 99: #ifdef TEST
! 100:
! 101: #include <stdio.h>
! 102:
! 103: int
! 104: main (argc, argv)
! 105: int argc;
! 106: char **argv;
! 107: {
! 108: int c;
! 109: int digit_optind = 0;
! 110:
! 111: while (1)
! 112: {
! 113: int this_option_optind = optind ? optind : 1;
! 114: int option_index = 0;
! 115: static struct option long_options[] =
! 116: {
! 117: {"add", 1, 0, 0},
! 118: {"append", 0, 0, 0},
! 119: {"delete", 1, 0, 0},
! 120: {"verbose", 0, 0, 0},
! 121: {"create", 0, 0, 0},
! 122: {"file", 1, 0, 0},
! 123: {0, 0, 0, 0}
! 124: };
! 125:
! 126: c = getopt_long (argc, argv, "abc:d:0123456789",
! 127: long_options, &option_index);
! 128: if (c == -1)
! 129: break;
! 130:
! 131: switch (c)
! 132: {
! 133: case 0:
! 134: printf ("option %s", long_options[option_index].name);
! 135: if (optarg)
! 136: printf (" with arg %s", optarg);
! 137: printf ("\n");
! 138: break;
! 139:
! 140: case '0':
! 141: case '1':
! 142: case '2':
! 143: case '3':
! 144: case '4':
! 145: case '5':
! 146: case '6':
! 147: case '7':
! 148: case '8':
! 149: case '9':
! 150: if (digit_optind != 0 && digit_optind != this_option_optind)
! 151: printf ("digits occur in two different argv-elements.\n");
! 152: digit_optind = this_option_optind;
! 153: printf ("option %c\n", c);
! 154: break;
! 155:
! 156: case 'a':
! 157: printf ("option a\n");
! 158: break;
! 159:
! 160: case 'b':
! 161: printf ("option b\n");
! 162: break;
! 163:
! 164: case 'c':
! 165: printf ("option c with value `%s'\n", optarg);
! 166: break;
! 167:
! 168: case 'd':
! 169: printf ("option d with value `%s'\n", optarg);
! 170: break;
! 171:
! 172: case '?':
! 173: break;
! 174:
! 175: default:
! 176: printf ("?? getopt returned character code 0%o ??\n", c);
! 177: }
! 178: }
! 179:
! 180: if (optind < argc)
! 181: {
! 182: printf ("non-option ARGV-elements: ");
! 183: while (optind < argc)
! 184: printf ("%s ", argv[optind++]);
! 185: printf ("\n");
! 186: }
! 187:
! 188: exit (0);
! 189: }
! 190:
! 191: #endif /* TEST */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>