tony2001                                 Thu, 15 Apr 2010 11:50:43 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=298026

Log:
final fix for long opts in getopt()

Changed paths:
    U   php/php-src/branches/PHP_5_3/main/getopt.c
    U   php/php-src/trunk/main/getopt.c

Modified: php/php-src/branches/PHP_5_3/main/getopt.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/getopt.c  2010-04-15 11:18:28 UTC (rev 
298025)
+++ php/php-src/branches/PHP_5_3/main/getopt.c  2010-04-15 11:50:43 UTC (rev 
298026)
@@ -81,7 +81,7 @@
        }
        if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
                char *pos;
-               int arg_end = strlen(argv[*optind])-2;
+               int arg_end = strlen(argv[*optind])-1;

                /* '--' indicates end of args if not followed by a known long 
option name */
                if (argv[*optind][2] == '\0') {
@@ -95,27 +95,23 @@
                if ((pos = php_memnstr(&argv[*optind][arg_start], "=", 1, 
argv[*optind]+arg_end)) != NULL) {
                        arg_end = pos-&argv[*optind][arg_start];
                        arg_start++;
+               } else {
+                       arg_end--;
                }
-

                while (1) {
                        php_optidx++;
                        if (opts[php_optidx].opt_char == '-') {
                                (*optind)++;
                                return(php_opt_error(argc, argv, *optind-1, 
optchr, OPTERRARG, show_err));
-                       } else if (opts[php_optidx].opt_name && 
!strncmp(&argv[*optind][2], opts[php_optidx].opt_name, arg_end)) {
+                       } else if (opts[php_optidx].opt_name && 
!strncmp(&argv[*optind][2], opts[php_optidx].opt_name, arg_end) && arg_end == 
strlen(opts[php_optidx].opt_name)) {
                                break;
                        }
                }

-               if (arg_end == strlen(opts[php_optidx].opt_name)) {
-                       optchr = 0;
-                       dash = 0;
-                       arg_start += strlen(opts[php_optidx].opt_name);
-               } else {
-                       (*optind)++;
-                       return (php_opt_error(argc, argv, *optind-1, optchr, 
OPTERRNF, show_err));
-               }
+               optchr = 0;
+               dash = 0;
+               arg_start += strlen(opts[php_optidx].opt_name);
        } else {
                if (!dash) {
                        dash = 1;

Modified: php/php-src/trunk/main/getopt.c
===================================================================
--- php/php-src/trunk/main/getopt.c     2010-04-15 11:18:28 UTC (rev 298025)
+++ php/php-src/trunk/main/getopt.c     2010-04-15 11:50:43 UTC (rev 298026)
@@ -81,7 +81,7 @@
        }
        if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
                char *pos;
-               int arg_end = strlen(argv[*optind])-2;
+               int arg_end = strlen(argv[*optind])-1;

                /* '--' indicates end of args if not followed by a known long 
option name */
                if (argv[*optind][2] == '\0') {
@@ -95,27 +95,23 @@
                if ((pos = php_memnstr(&argv[*optind][arg_start], "=", 1, 
argv[*optind]+arg_end)) != NULL) {
                        arg_end = pos-&argv[*optind][arg_start];
                        arg_start++;
+               } else {
+                       arg_end--;
                }
-

                while (1) {
                        php_optidx++;
                        if (opts[php_optidx].opt_char == '-') {
                                (*optind)++;
                                return(php_opt_error(argc, argv, *optind-1, 
optchr, OPTERRARG, show_err));
-                       } else if (opts[php_optidx].opt_name && 
!strncmp(&argv[*optind][2], opts[php_optidx].opt_name, arg_end)) {
+                       } else if (opts[php_optidx].opt_name && 
!strncmp(&argv[*optind][2], opts[php_optidx].opt_name, arg_end) && arg_end == 
strlen(opts[php_optidx].opt_name)) {
                                break;
                        }
                }

-               if (arg_end == strlen(opts[php_optidx].opt_name)) {
-                       optchr = 0;
-                       dash = 0;
-                       arg_start += strlen(opts[php_optidx].opt_name);
-               } else {
-                       (*optind)++;
-                       return (php_opt_error(argc, argv, *optind-1, optchr, 
OPTERRNF, show_err));
-               }
+               optchr = 0;
+               dash = 0;
+               arg_start += strlen(opts[php_optidx].opt_name);
        } else {
                if (!dash) {
                        dash = 1;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to