]> granicus.if.org Git - php/commitdiff
- Merge getopt fixes from re2c
authorMarcus Boerger <helly@php.net>
Sun, 22 Apr 2007 15:24:19 +0000 (15:24 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 22 Apr 2007 15:24:19 +0000 (15:24 +0000)
sapi/cgi/getopt.c
sapi/cli/getopt.c

index 963c4554e1ace31908c7e2d3972fe45f87d98ea9..0dd8a45f5bdcc0cb9b32c2eb90280e92450d0763 100644 (file)
@@ -107,6 +107,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                        (*optind)++;
                        return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err));
                }
+               arg_start = 1 + optchr;
        }
        if (opts_idx < 0) {
                while (1) {
@@ -120,6 +121,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                                        (*optind)++;
                                } else {
                                        optchr++;
+                                       arg_start++;
                                }
                                return(php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err));
                        } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
@@ -143,7 +145,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                }
                return opts[opts_idx].opt_char;
        } else {
-               if (arg_start == 2) {
+               if (arg_start >= 2) {
                        if (!argv[*optind][optchr+1])
                        {
                                dash = 0;
index 963c4554e1ace31908c7e2d3972fe45f87d98ea9..0dd8a45f5bdcc0cb9b32c2eb90280e92450d0763 100644 (file)
@@ -107,6 +107,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                        (*optind)++;
                        return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err));
                }
+               arg_start = 1 + optchr;
        }
        if (opts_idx < 0) {
                while (1) {
@@ -120,6 +121,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                                        (*optind)++;
                                } else {
                                        optchr++;
+                                       arg_start++;
                                }
                                return(php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err));
                        } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
@@ -143,7 +145,7 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
                }
                return opts[opts_idx].opt_char;
        } else {
-               if (arg_start == 2) {
+               if (arg_start >= 2) {
                        if (!argv[*optind][optchr+1])
                        {
                                dash = 0;