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