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