(linenum→info "unix/slp.c:2238")

glibc/2.7/posix/getopt.c

    1: /* Getopt for GNU.
    2:    NOTE: getopt is now part of the C library, so if you don't know what
    3:    "Keep this file name-space clean" means, talk to drepper@gnu.org
    4:    before changing it!
    5:    Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004
    6:         Free Software Foundation, Inc.
    7:    This file is part of the GNU C Library.
    8: 
    9:    The GNU C Library is free software; you can redistribute it and/or
   10:    modify it under the terms of the GNU Lesser General Public
   11:    License as published by the Free Software Foundation; either
   12:    version 2.1 of the License, or (at your option) any later version.
   13: 
   14:    The GNU C Library is distributed in the hope that it will be useful,
   15:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   16:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   17:    Lesser General Public License for more details.
   18: 
   19:    You should have received a copy of the GNU Lesser General Public
   20:    License along with the GNU C Library; if not, write to the Free
   21:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   22:    02111-1307 USA.  */
   23: ^L
   24: /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
   25:    Ditto for AIX 3.2 and <stdlib.h>.  */
   26: #ifndef _NO_PROTO
   27: # define _NO_PROTO
   28: #endif
   29: 
   30: #ifdef HAVE_CONFIG_H
   31: # include <config.h>
   32: #endif
   33: 
   34: #include <stdio.h>
   35: 
   36: /* Comment out all this code if we are using the GNU C Library, and are not
   37:    actually compiling the library itself.  This code is part of the GNU C
   38:    Library, but also included in many other GNU distributions.  Compiling
   39:    and linking in this code is a waste when using the GNU C library
   40:    (especially if it is a shared library).  Rather than having every GNU
   41:    program understand `configure --with-gnu-libc' and omit the object files,
   42:    it is simpler to just do this in the source for each such file.  */
   43: 
   44: #define GETOPT_INTERFACE_VERSION 2
   45: #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
   46: # include <gnu-versions.h>
   47: # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
   48: #  define ELIDE_CODE
   49: # endif
   50: #endif
   51: 
   52: #ifndef ELIDE_CODE
   53: 
   54: 
   55: /* This needs to come after some library #include
   56:    to get __GNU_LIBRARY__ defined.  */
   57: #ifdef  __GNU_LIBRARY__
   58: /* Don't include stdlib.h for non-GNU C libraries because some of them
   59:    contain conflicting prototypes for getopt.  */
   60: # include <stdlib.h>
   61: # include <unistd.h>
   62: #endif  /* GNU C library.  */
   63: 
   64: #include <string.h>
   65: 
   66: #ifdef VMS
   67: # include <unixlib.h>
   68: #endif
   69: 
   70: #ifdef _LIBC
   71: # include <libintl.h>
   72: #else
   73: # include "gettext.h"
   74: # define _(msgid) gettext (msgid)
   75: #endif
   76: 
   77: #if defined _LIBC && defined USE_IN_LIBIO
   78: # include <wchar.h>
   79: #endif
   80: 
   81: #ifndef attribute_hidden
   82: # define attribute_hidden
   83: #endif
   84: 
   85: /* This version of `getopt' appears to the caller like standard Unix `getopt'
   86:    but it behaves differently for the user, since it allows the user
   87:    to intersperse the options with the other arguments.
   88: 
   89:    As `getopt' works, it permutes the elements of ARGV so that,
   90:    when it is done, all the options precede everything else.  Thus
   91:    all application programs are extended to handle flexible argument order.
   92: 
   93:    Setting the environment variable POSIXLY_CORRECT disables permutation.
   94:    Then the behavior is completely standard.
   95: 
   96:    GNU application programs can use a third alternative mode in which
   97:    they can distinguish the relative order of options and other arguments.  */
   98: 
   99: #include "getopt.h"
  100: #include "getopt_int.h"
  101: 
  102: /* For communication from `getopt' to the caller.
  103:    When `getopt' finds an option that takes an argument,
  104:    the argument value is returned here.
  105:    Also, when `ordering' is RETURN_IN_ORDER,
  106:    each non-option ARGV-element is returned here.  */
  107: 
  108: char *optarg;
  109: 
  110: /* Index in ARGV of the next element to be scanned.
  111:    This is used for communication to and from the caller
  112:    and for communication between successive calls to `getopt'.
  113: 
  114:    On entry to `getopt', zero means this is the first call; initialize.
  115: 
  116:    When `getopt' returns -1, this is the index of the first of the
  117:    non-option elements that the caller should itself scan.
  118: 
  119:    Otherwise, `optind' communicates from one call to the next
  120:    how much of ARGV has been scanned so far.  */
  121: 
  122: /* 1003.2 says this must be 1 before any call.  */
  123: int optind = 1;
  124: 
  125: /* Callers store zero here to inhibit the error message
  126:    for unrecognized options.  */
  127: 
  128: int opterr = 1;
  129: 
  130: /* Set to an option character which was unrecognized.
  131:    This must be initialized on some systems to avoid linking in the
  132:    system's own getopt implementation.  */
  133: 
  134: int optopt = '?';
  135: 
  136: /* Keep a global copy of all internal members of getopt_data.  */
  137: 
  138: static struct _getopt_data getopt_data;
  139: 
  140: ^L
  141: #ifndef __GNU_LIBRARY__
  142: 
  143: /* Avoid depending on library functions or files
  144:    whose names are inconsistent.  */
  145: 
  146: #ifndef getenv
  147: extern char *getenv ();
  148: #endif
  149: 
  150: #endif /* not __GNU_LIBRARY__ */
  151: ^L
  152: #ifdef _LIBC
  153: /* Stored original parameters.
  154:    XXX This is no good solution.  We should rather copy the args so
  155:    that we can compare them later.  But we must not use malloc(3).  */
  156: extern int __libc_argc;
  157: extern char **__libc_argv;
  158: 
  159: /* Bash 2.0 gives us an environment variable containing flags
  160:    indicating ARGV elements that should not be considered arguments.  */
  161: 
  162: # ifdef USE_NONOPTION_FLAGS
  163: /* Defined in getopt_init.c  */
  164: extern char *__getopt_nonoption_flags;
  165: # endif
  166: 
  167: # ifdef USE_NONOPTION_FLAGS
  168: #  define SWAP_FLAGS(ch1, ch2) \
  169:   if (d->__nonoption_flags_len > 0)                                           \
  170:     {                                                                         \
  171:       char __tmp = __getopt_nonoption_flags[ch1];                             \
  172:       __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \
  173:       __getopt_nonoption_flags[ch2] = __tmp;                                  \
  174:     }
  175: # else
  176: #  define SWAP_FLAGS(ch1, ch2)
  177: # endif
  178: #else   /* !_LIBC */
  179: # define SWAP_FLAGS(ch1, ch2)
  180: #endif  /* _LIBC */
  181: 
  182: /* Exchange two adjacent subsequences of ARGV.
  183:    One subsequence is elements [first_nonopt,last_nonopt)
  184:    which contains all the non-options that have been skipped so far.
  185:    The other is elements [last_nonopt,optind), which contains all
  186:    the options processed since those non-options were skipped.
  187: 
  188:    `first_nonopt' and `last_nonopt' are relocated so that they describe
  189:    the new indices of the non-options in ARGV after they are moved.  */
  190: 
  191: static void
  192: exchange (char **argv, struct _getopt_data *d)
  193: {
  194:   int bottom = d->__first_nonopt;
  195:   int middle = d->__last_nonopt;
  196:   int top = d->optind;
  197:   char *tem;
  198: 
  199:   /* Exchange the shorter segment with the far end of the longer segment.
  200:      That puts the shorter segment into the right place.
  201:      It leaves the longer segment in the right place overall,
  202:      but it consists of two parts that need to be swapped next.  */
  203: 
  204: #if defined _LIBC && defined USE_NONOPTION_FLAGS
  205:   /* First make sure the handling of the `__getopt_nonoption_flags'
  206:      string can work normally.  Our top argument must be in the range
  207:      of the string.  */
  208:   if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
  209:     {
  210:       /* We must extend the array.  The user plays games with us and
  211:          presents new arguments.  */
  212:       char *new_str = malloc (top + 1);
  213:       if (new_str == NULL)
  214:         d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
  215:       else
  216:         {
  217:           memset (__mempcpy (new_str, __getopt_nonoption_flags,
  218:                              d->__nonoption_flags_max_len),
  219:                   '\0', top + 1 - d->__nonoption_flags_max_len);
  220:           d->__nonoption_flags_max_len = top + 1;
  221:           __getopt_nonoption_flags = new_str;
  222:         }
  223:     }
  224: #endif
  225: 
  226:   while (top > middle && middle > bottom)
  227:     {
  228:       if (top - middle > middle - bottom)
  229:         {
  230:           /* Bottom segment is the short one.  */
  231:           int len = middle - bottom;
  232:           register int i;
  233: 
  234:           /* Swap it with the top part of the top segment.  */
  235:           for (i = 0; i < len; i++)
  236:             {
  237:               tem = argv[bottom + i];
  238:               argv[bottom + i] = argv[top - (middle - bottom) + i];
  239:               argv[top - (middle - bottom) + i] = tem;
  240:               SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
  241:             }
  242:           /* Exclude the moved bottom segment from further swapping.  */
  243:           top -= len;
  244:         }
  245:       else
  246:         {
  247:           /* Top segment is the short one.  */
  248:           int len = top - middle;
  249:           register int i;
  250: 
  251:           /* Swap it with the bottom part of the bottom segment.  */
  252:           for (i = 0; i < len; i++)
  253:             {
  254:               tem = argv[bottom + i];
  255:               argv[bottom + i] = argv[middle + i];
  256:               argv[middle + i] = tem;
  257:               SWAP_FLAGS (bottom + i, middle + i);
  258:             }
  259:           /* Exclude the moved top segment from further swapping.  */
  260:           bottom += len;
  261:         }
  262:     }
  263: 
  264:   /* Update records for the slots the non-options now occupy.  */
  265: 
  266:   d->__first_nonopt += (d->optind - d->__last_nonopt);
  267:   d->__last_nonopt = d->optind;
  268: }
  269: 
  270: /* Initialize the internal data when the first call is made.  */
  271: 
  272: static const char *
  273: _getopt_initialize (int argc, char *const *argv, const char *optstring,
  274:                     struct _getopt_data *d)
  275: {
  276:   /* Start processing options with ARGV-element 1 (since ARGV-element 0
  277:      is the program name); the sequence of previously skipped
  278:      non-option ARGV-elements is empty.  */
  279: 
  280:   d->__first_nonopt = d->__last_nonopt = d->optind;
  281: 
  282:   d->__nextchar = NULL;
  283: 
  284:   d->__posixly_correct = !!getenv ("POSIXLY_CORRECT");
  285: 
  286:   /* Determine how to handle the ordering of options and nonoptions.  */
  287: 
  288:   if (optstring[0] == '-')
  289:     {
  290:       d->__ordering = RETURN_IN_ORDER;
  291:       ++optstring;
  292:     }
  293:   else if (optstring[0] == '+')
  294:     {
  295:       d->__ordering = REQUIRE_ORDER;
  296:       ++optstring;
  297:     }
  298:   else if (d->__posixly_correct)
  299:     d->__ordering = REQUIRE_ORDER;
  300:   else
  301:     d->__ordering = PERMUTE;
  302: 
  303: #if defined _LIBC && defined USE_NONOPTION_FLAGS
  304:   if (!d->__posixly_correct
  305:       && argc == __libc_argc && argv == __libc_argv)
  306:     {
  307:       if (d->__nonoption_flags_max_len == 0)
  308:         {
  309:           if (__getopt_nonoption_flags == NULL
  310:               || __getopt_nonoption_flags[0] == '\0')
  311:             d->__nonoption_flags_max_len = -1;
  312:           else
  313:             {
  314:               const char *orig_str = __getopt_nonoption_flags;
  315:               int len = d->__nonoption_flags_max_len = strlen (orig_str);
  316:               if (d->__nonoption_flags_max_len < argc)
  317:                 d->__nonoption_flags_max_len = argc;
  318:               __getopt_nonoption_flags =
  319:                 (char *) malloc (d->__nonoption_flags_max_len);
  320:               if (__getopt_nonoption_flags == NULL)
  321:                 d->__nonoption_flags_max_len = -1;
  322:               else
  323:                 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
  324:                         '\0', d->__nonoption_flags_max_len - len);
  325:             }
  326:         }
  327:       d->__nonoption_flags_len = d->__nonoption_flags_max_len;
  328:     }
  329:   else
  330:     d->__nonoption_flags_len = 0;
  331: #endif
  332: 
  333:   return optstring;
  334: }
  335: ^L
  336: /* Scan elements of ARGV (whose length is ARGC) for option characters
  337:    given in OPTSTRING.
  338: 
  339:    If an element of ARGV starts with '-', and is not exactly "-" or "--",
  340:    then it is an option element.  The characters of this element
  341:    (aside from the initial '-') are option characters.  If `getopt'
  342:    is called repeatedly, it returns successively each of the option characters
  343:    from each of the option elements.
  344: 
  345:    If `getopt' finds another option character, it returns that character,
  346:    updating `optind' and `nextchar' so that the next call to `getopt' can
  347:    resume the scan with the following option character or ARGV-element.
  348: 
  349:    If there are no more option characters, `getopt' returns -1.
  350:    Then `optind' is the index in ARGV of the first ARGV-element
  351:    that is not an option.  (The ARGV-elements have been permuted
  352:    so that those that are not options now come last.)
  353: 
  354:    OPTSTRING is a string containing the legitimate option characters.
  355:    If an option character is seen that is not listed in OPTSTRING,
  356:    return '?' after printing an error message.  If you set `opterr' to
  357:    zero, the error message is suppressed but we still return '?'.
  358: 
  359:    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
  360:    so the following text in the same ARGV-element, or the text of the following
  361:    ARGV-element, is returned in `optarg'.  Two colons mean an option that
  362:    wants an optional arg; if there is text in the current ARGV-element,
  363:    it is returned in `optarg', otherwise `optarg' is set to zero.
  364: 
  365:    If OPTSTRING starts with `-' or `+', it requests different methods of
  366:    handling the non-option ARGV-elements.
  367:    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
  368: 
  369:    Long-named options begin with `--' instead of `-'.
  370:    Their names may be abbreviated as long as the abbreviation is unique
  371:    or is an exact match for some defined option.  If they have an
  372:    argument, it follows the option name in the same ARGV-element, separated
  373:    from the option name by a `=', or else the in next ARGV-element.
  374:    When `getopt' finds a long-named option, it returns 0 if that option's
  375:    `flag' field is nonzero, the value of the option's `val' field
  376:    if the `flag' field is zero.
  377: 
  378:    The elements of ARGV aren't really const, because we permute them.
  379:    But we pretend they're const in the prototype to be compatible
  380:    with other systems.
  381: 
  382:    LONGOPTS is a vector of `struct option' terminated by an
  383:    element containing a name which is zero.
  384: 
  385:    LONGIND returns the index in LONGOPT of the long-named option found.
  386:    It is only valid when a long-named option has been found by the most
  387:    recent call.
  388: 
  389:    If LONG_ONLY is nonzero, '-' as well as '--' can introduce
  390:    long-named options.  */
  391: 
  392: int
  393: _getopt_internal_r (int argc, char *const *argv, const char *optstring,
  394:                     const struct option *longopts, int *longind,
  395:                     int long_only, struct _getopt_data *d)
  396: {
  397:   int print_errors = d->opterr;
  398:   if (optstring[0] == ':')
  399:     print_errors = 0;
  400: 
  401:   if (argc < 1)
  402:     return -1;
  403: 
  404:   d->optarg = NULL;
  405: 
  406:   if (d->optind == 0 || !d->__initialized)
  407:     {
  408:       if (d->optind == 0)
  409:         d->optind = 1; /* Don't scan ARGV[0], the program name.  */
  410:       optstring = _getopt_initialize (argc, argv, optstring, d);
  411:       d->__initialized = 1;
  412:     }
  413: 
  414:   /* Test whether ARGV[optind] points to a non-option argument.
  415:      Either it does not have option syntax, or there is an environment flag
  416:      from the shell indicating it is not an option.  The later information
  417:      is only used when the used in the GNU libc.  */
  418: #if defined _LIBC && defined USE_NONOPTION_FLAGS
  419: # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
  420:                       || (d->optind < d->__nonoption_flags_len                      \
  421:                           && __getopt_nonoption_flags[d->optind] == '1'))
  422: #else
  423: # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
  424: #endif
  425: 
  426:   if (d->__nextchar == NULL || *d->__nextchar == '\0')
  427:     {
  428:       /* Advance to the next ARGV-element.  */
  429: 
  430:       /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
  431:          moved back by the user (who may also have changed the arguments).  */
  432:       if (d->__last_nonopt > d->optind)
  433:         d->__last_nonopt = d->optind;
  434:       if (d->__first_nonopt > d->optind)
  435:         d->__first_nonopt = d->optind;
  436: 
  437:       if (d->__ordering == PERMUTE)
  438:         {
  439:           /* If we have just processed some options following some non-options,
  440:              exchange them so that the options come first.  */
  441: 
  442:           if (d->__first_nonopt != d->__last_nonopt
  443:               && d->__last_nonopt != d->optind)
  444:             exchange ((char **) argv, d);
  445:           else if (d->__last_nonopt != d->optind)
  446:             d->__first_nonopt = d->optind;
  447: 
  448:           /* Skip any additional non-options
  449:              and extend the range of non-options previously skipped.  */
  450: 
  451:           while (d->optind < argc && NONOPTION_P)
  452:             d->optind++;
  453:           d->__last_nonopt = d->optind;
  454:         }
  455: 
  456:       /* The special ARGV-element `--' means premature end of options.
  457:          Skip it like a null option,
  458:          then exchange with previous non-options as if it were an option,
  459:          then skip everything else like a non-option.  */
  460: 
  461:       if (d->optind != argc && !strcmp (argv[d->optind], "--"))
  462:         {
  463:           d->optind++;
  464: 
  465:           if (d->__first_nonopt != d->__last_nonopt
  466:               && d->__last_nonopt != d->optind)
  467:             exchange ((char **) argv, d);
  468:           else if (d->__first_nonopt == d->__last_nonopt)
  469:             d->__first_nonopt = d->optind;
  470:           d->__last_nonopt = argc;
  471: 
  472:           d->optind = argc;
  473:         }
  474: 
  475:       /* If we have done all the ARGV-elements, stop the scan
  476:          and back over any non-options that we skipped and permuted.  */
  477: 
  478:       if (d->optind == argc)
  479:         {
  480:           /* Set the next-arg-index to point at the non-options
  481:              that we previously skipped, so the caller will digest them.  */
  482:           if (d->__first_nonopt != d->__last_nonopt)
  483:             d->optind = d->__first_nonopt;
  484:           return -1;
  485:         }
  486: 
  487:       /* If we have come to a non-option and did not permute it,
  488:          either stop the scan or describe it to the caller and pass it by.  */
  489: 
  490:       if (NONOPTION_P)
  491:         {
  492:           if (d->__ordering == REQUIRE_ORDER)
  493:             return -1;
  494:           d->optarg = argv[d->optind++];
  495:           return 1;
  496:         }
  497: 
  498:       /* We have found another option-ARGV-element.
  499:          Skip the initial punctuation.  */
  500: 
  501:       d->__nextchar = (argv[d->optind] + 1
  502:                   + (longopts != NULL && argv[d->optind][1] == '-'));
  503:     }
  504: 
  505:   /* Decode the current option-ARGV-element.  */
  506: 
  507:   /* Check whether the ARGV-element is a long option.
  508: 
  509:      If long_only and the ARGV-element has the form "-f", where f is
  510:      a valid short option, don't consider it an abbreviated form of
  511:      a long option that starts with f.  Otherwise there would be no
  512:      way to give the -f short option.
  513: 
  514:      On the other hand, if there's a long option "fubar" and
  515:      the ARGV-element is "-fu", do consider that an abbreviation of
  516:      the long option, just like "--fu", and not "-f" with arg "u".
  517: 
  518:      This distinction seems to be the most useful approach.  */
  519: 
  520:   if (longopts != NULL
  521:       && (argv[d->optind][1] == '-'
  522:           || (long_only && (argv[d->optind][2]
  523:                             || !strchr (optstring, argv[d->optind][1])))))
  524:     {
  525:       char *nameend;
  526:       const struct option *p;
  527:       const struct option *pfound = NULL;
  528:       int exact = 0;
  529:       int ambig = 0;
  530:       int indfound = -1;
  531:       int option_index;
  532: 
  533:       for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
  534:         /* Do nothing.  */ ;
  535: 
  536:       /* Test all long options for either exact match
  537:          or abbreviated matches.  */
  538:       for (p = longopts, option_index = 0; p->name; p++, option_index++)
  539:         if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
  540:           {
  541:             if ((unsigned int) (nameend - d->__nextchar)
  542:                 == (unsigned int) strlen (p->name))
  543:               {
  544:                 /* Exact match found.  */
  545:                 pfound = p;
  546:                 indfound = option_index;
  547:                 exact = 1;
  548:                 break;
  549:               }
  550:             else if (pfound == NULL)
  551:               {
  552:                 /* First nonexact match found.  */
  553:                 pfound = p;
  554:                 indfound = option_index;
  555:               }
  556:             else if (long_only
  557:                      || pfound->has_arg != p->has_arg
  558:                      || pfound->flag != p->flag
  559:                      || pfound->val != p->val)
  560:               /* Second or later nonexact match found.  */
  561:               ambig = 1;
  562:           }
  563: 
  564:       if (ambig && !exact)
  565:         {
  566:           if (print_errors)
  567:             {
  568: #if defined _LIBC && defined USE_IN_LIBIO
  569:               char *buf;
  570: 
  571:               if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
  572:                               argv[0], argv[d->optind]) >= 0)
  573:                 {
  574:                   _IO_flockfile (stderr);
  575: 
  576:                   int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
  577:                   ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
  578: 
  579:                   __fxprintf (NULL, "%s", buf);
  580: