From c71b1401ffaa14dde1cd1932288a90596177fee0 Mon Sep 17 00:00:00 2001 From: foobar Date: Sun, 15 Apr 2007 22:50:58 +0000 Subject: [PATCH] - Synch these files from sapi/cli/ and allow using s.c. long-options with CGI. --- sapi/cgi/getopt.c | 33 ++++++++++++++++++++------------- 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 #include #include @@ -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. */ -- 2.50.1