--- pgp/src/getopt.c 2018/04/24 16:39:13 1.1.1.3 +++ pgp/src/getopt.c 2018/04/24 16:43:31 1.1.1.6 @@ -1,86 +1,85 @@ /* -** @(#)getopt.c 2.5 (smail) 9/15/87 -*/ + ** @(#)getopt.c 2.5 (smail) 9/15/87 + */ /* -* This is the AT&T public domain source for getopt(3). It is the code -* which was given out at the 1985 UNIFORUM conference in Dallas. -* -* There is no manual page. That is because the one they gave out at -* UNIFORUM was slightly different from the current System V Release 2 -* manual page. The difference apparently involved a note about the -* famous rules 5 and 6, recommending using white space between an -* option and its first argument, and not grouping options that have -* arguments. Getopt itself is currently lenient about both of these -* things. White space is allowed, but not mandatory, and the last option -* in a group can have an argument. That particular version of the man -* page evidently has no official existence. The current SVR2 man page -* reflects the actual behavor of this getopt. -*/ + * This is the AT&T public domain source for getopt(3). It is the code + * which was given out at the 1985 UNIFORUM conference in Dallas. + * + * There is no manual page. That is because the one they gave out at + * UNIFORUM was slightly different from the current System V Release 2 + * manual page. The difference apparently involved a note about the + * famous rules 5 and 6, recommending using white space between an + * option and its first argument, and not grouping options that have + * arguments. Getopt itself is currently lenient about both of these + * things. White space is allowed, but not mandatory, and the last option + * in a group can have an argument. That particular version of the man + * page evidently has no official existence. The current SVR2 man page + * reflects the actual behavor of this getopt. + */ #include #include #include "getopt.h" -/*LINTLIBRARY*/ +/*LINTLIBRARY */ #ifndef NULL #define NULL 0 #endif #define EOF (-1) -#define ERR(str, chr) (opterr ? fprintf(stderr, "%s%s%c\n", argv[0], str, chr) : 0) +#define ERR(str, chr) (opterr ? \ +fprintf(stderr, "%s%s%c\n", argv[0], str, chr) : 0) -int opterr = 1; -int optind = 1; -int optopt = 0; -char *optarg = 0; +int opterr = 1; +int optind = 1; +int optopt = 0; +char *optarg = 0; -int -getopt(int argc, char **argv, char *opts) +int pgp_getopt(int argc, char **argv, char *opts) { - static int sp = 1; - register int c; - register char *cp; - - if(sp == 1) { - if(optind >= argc || (argv[optind][0] != '+' && - argv[optind][0] != '-') || argv[optind][1] == '\0') - return(EOF); - else if(strcmp(argv[optind], "--") == 0) { - optind++; - return(EOF); - } - /* '+' for config options, '+' should not be in the opts list */ - if (argv[optind][0] == '+') { - optarg = argv[optind++] + 1; - return '+'; - } + static int sp = 1; + register int c; + register char *cp; + + if (sp == 1) { + if (optind >= argc || (argv[optind][0] != '+' && + argv[optind][0] != '-') || argv[optind][1] == '\0') + return EOF; + else if (strcmp(argv[optind], "--") == 0) { + optind++; + return EOF; } - optopt = c = argv[optind][sp]; - if(c == ':' || (cp=strchr(opts, c)) == NULL) { - ERR(": illegal option -- ", c); - if(argv[optind][++sp] == '\0') { - optind++; - sp = 1; - } - return('\0'); + /* '+' for config options, '+' should not be in the opts list */ + if (argv[optind][0] == '+') { + optarg = argv[optind++] + 1; + return '+'; } - if(*++cp == ':') { - if(argv[optind][sp+1] != '\0') - optarg = &argv[optind++][sp+1]; - else if(++optind >= argc) { - ERR(": option requires an argument -- ", c); - sp = 1; - return('\0'); - } else - optarg = argv[optind++]; - sp = 1; - } else { - if(argv[optind][++sp] == '\0') { - sp = 1; - optind++; - } - optarg = NULL; + } + optopt = c = argv[optind][sp]; + if (c == ':' || (cp = strchr(opts, c)) == NULL) { + ERR(": illegal option -- ", c); + if (argv[optind][++sp] == '\0') { + optind++; + sp = 1; } - return(c); + return '\0'; + } + if (*++cp == ':') { + if (argv[optind][sp + 1] != '\0') + optarg = &argv[optind++][sp + 1]; + else if (++optind >= argc) { + ERR(": option requires an argument -- ", c); + sp = 1; + return '\0'; + } else + optarg = argv[optind++]; + sp = 1; + } else { + if (argv[optind][++sp] == '\0') { + sp = 1; + optind++; + } + optarg = NULL; + } + return c; } -