diff options
| author | foobar <sniper@php.net> | 2007-04-15 22:54:26 +0000 |
|---|---|---|
| committer | foobar <sniper@php.net> | 2007-04-15 22:54:26 +0000 |
| commit | fd9af91146ade971d5aa5b1f6959302dfe382aad (patch) | |
| tree | c87247440ed4cf58deb76449880841510b5e5fe9 | |
| parent | e2cf497a61111f45b0ca805923ff94e5d67072c0 (diff) | |
| download | php-git-fd9af91146ade971d5aa5b1f6959302dfe382aad.tar.gz | |
MFB: sync getopt from CLI
| -rw-r--r-- | sapi/cgi/getopt.c | 33 | ||||
| -rw-r--r-- | sapi/cgi/php_getopt.h | 9 |
2 files changed, 29 insertions, 13 deletions
diff --git a/sapi/cgi/getopt.c b/sapi/cgi/getopt.c index 82e90ed95f..963c4554e1 100644 --- a/sapi/cgi/getopt.c +++ b/sapi/cgi/getopt.c @@ -16,6 +16,8 @@ +----------------------------------------------------------------------+ */ +/* $Id$ */ + #include <stdio.h> #include <string.h> #include <assert.h> @@ -77,29 +79,34 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta } if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) { /* '--' indicates end of args if not followed by a known long option name */ + if (argv[*optind][2] == '\0') { + (*optind)++; + return(EOF); + } + while (1) { opts_idx++; if (opts[opts_idx].opt_char == '-') { (*optind)++; - return(EOF); + return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err)); } else if (opts[opts_idx].opt_name && !strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) { break; } } optchr = 0; - dash = 1; - arg_start = 2 + strlen(opts[opts_idx].opt_name); - } - if (!dash) { - dash = 1; - optchr = 1; - } - - /* Check if the guy tries to do a -: kind of flag */ - if (argv[*optind][optchr] == ':') { dash = 0; - (*optind)++; - return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err)); + arg_start = 2 + strlen(opts[opts_idx].opt_name); + } else { + if (!dash) { + dash = 1; + optchr = 1; + } + /* Check if the guy tries to do a -: kind of flag */ + if (argv[*optind][optchr] == ':') { + dash = 0; + (*optind)++; + return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err)); + } } if (opts_idx < 0) { while (1) { diff --git a/sapi/cgi/php_getopt.h b/sapi/cgi/php_getopt.h index 4bfa433977..fc14c96743 100644 --- a/sapi/cgi/php_getopt.h +++ b/sapi/cgi/php_getopt.h @@ -16,8 +16,17 @@ +----------------------------------------------------------------------+ */ +/* $Id$ */ + #include "php.h" +#ifdef NETWARE +/* +As NetWare LibC has optind and optarg macros defined in unistd.h our local variables were getting mistakenly preprocessed so undeffing optind and optarg +*/ +#undef optarg +#undef optind +#endif /* Define structure for one recognized option (both single char and long name). * If short_open is '-' this is the last option. */ |
