提交 60c1d62792646e4034549d46e0659c8b087a68ed

作者 LJH 李佳桓
1 个父辈 b0c50a32

add

正在显示 1 个修改的文件 包含 119 行增加0 行删除
  1 +/*
  2 + * Copyright (c) 1987 Regents of the University of California.
  3 + * All rights reserved.
  4 + *
  5 + * Redistribution and use in source and binary forms, with or without
  6 + * modification, are permitted provided that the following conditions
  7 + * are met:
  8 + * 1. Redistributions of source code must retain the above copyright
  9 + * notice, this list of conditions and the following disclaimer.
  10 + * 2. Redistributions in binary form must reproduce the above copyright
  11 + * notice, this list of conditions and the following disclaimer in the
  12 + * documentation and/or other materials provided with the distribution.
  13 + * 3. All advertising materials mentioning features or use of this software
  14 + * must display the following acknowledgement:
  15 + * This product includes software developed by the University of
  16 + * California, Berkeley and its contributors.
  17 + * 4. Neither the name of the University nor the names of its contributors
  18 + * may be used to endorse or promote products derived from this software
  19 + * without specific prior written permission.
  20 + *
  21 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24 + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31 + * SUCH DAMAGE.
  32 + */
  33 +
  34 +#if defined(LIBC_SCCS) && !defined(lint)
  35 +static char sccsid[] = "@(#)getopt.c 4.13 (Berkeley) 2/23/91";
  36 +#endif /* LIBC_SCCS and not lint */
  37 +
  38 +#include <stdio.h>
  39 +#include <string.h>
  40 +
  41 +/*
  42 + * get option letter from argument vector
  43 + */
  44 +int opterr = 1, /* if error message should be printed */
  45 + optind = 1, /* index into parent argv vector */
  46 + optopt; /* character checked for validity */
  47 +char *optarg; /* argument associated with option */
  48 +
  49 +#define BADCH (int)'?'
  50 +#define EMSG ""
  51 +
  52 +int
  53 +getopt(nargc, nargv, ostr)
  54 + int nargc;
  55 + char **nargv;
  56 + char *ostr;
  57 +{
  58 + static char *place = EMSG; /* option letter processing */
  59 + register char *oli; /* option letter list index */
  60 + char *p;
  61 +
  62 + if (!*place) { /* update scanning pointer */
  63 + if (optind >= nargc || *(place = nargv[optind]) != '-') {
  64 + place = EMSG;
  65 + return(EOF);
  66 + }
  67 + if (place[1] && *++place == '-') { /* found "--" */
  68 + ++optind;
  69 + place = EMSG;
  70 + return(EOF);
  71 + }
  72 + } /* option letter okay? */
  73 + if ((optopt = (int)*place++) == (int)':' ||
  74 + !(oli = strchr(ostr, optopt))) {
  75 + /*
  76 + * if the user didn't specify '-' as an option,
  77 + * assume it means EOF.
  78 + */
  79 + if (optopt == (int)'-')
  80 + return(EOF);
  81 + if (!*place)
  82 + ++optind;
  83 + if (opterr) {
  84 + if (!(p = strrchr(*nargv, '/')))
  85 + p = *nargv;
  86 + else
  87 + ++p;
  88 + (void)fprintf(stderr, "%s: illegal option -- %c\n",
  89 + p, optopt);
  90 + }
  91 + return(BADCH);
  92 + }
  93 + if (*++oli != ':') { /* don't need argument */
  94 + optarg = NULL;
  95 + if (!*place)
  96 + ++optind;
  97 + }
  98 + else { /* need an argument */
  99 + if (*place) /* no white space */
  100 + optarg = place;
  101 + else if (nargc <= ++optind) { /* no arg */
  102 + place = EMSG;
  103 + if (!(p = strrchr(*nargv, '/')))
  104 + p = *nargv;
  105 + else
  106 + ++p;
  107 + if (opterr)
  108 + (void)fprintf(stderr,
  109 + "%s: option requires an argument -- %c\n",
  110 + p, optopt);
  111 + return(BADCH);
  112 + }
  113 + else /* white space */
  114 + optarg = nargv[optind];
  115 + place = EMSG;
  116 + ++optind;
  117 + }
  118 + return(optopt); /* dump back option letter */
  119 +}
... ...
注册登录 后发表评论