You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by si...@apache.org on 2007/01/01 16:18:15 UTC

svn commit: r491585 - /spamassassin/trunk/spamc/getopt.c

Author: sidney
Date: Mon Jan  1 07:18:15 2007
New Revision: 491585

URL: http://svn.apache.org/viewvc?view=rev&rev=491585
Log:
bug 5263: fix bugs when a longopt with no arguments is last on the command line

Modified:
    spamassassin/trunk/spamc/getopt.c

Modified: spamassassin/trunk/spamc/getopt.c
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamc/getopt.c?view=diff&rev=491585&r1=491584&r2=491585
==============================================================================
--- spamassassin/trunk/spamc/getopt.c (original)
+++ spamassassin/trunk/spamc/getopt.c Mon Jan  1 07:18:15 2007
@@ -193,6 +193,7 @@
    char *bp, *opt = NULL;
    int i;
 
+   spamc_optarg = NULL; /* clear any left over state from previous option */
    if(spamc_optreset)
       spamc_optreset = optchr = dash = 0;
    if(spamc_optind >= argc) {
@@ -223,7 +224,7 @@
       if(cp[1] == ':') {
          /* requires an argument */
          if(!argv[spamc_optind] || (argv[spamc_optind][0] == '-') || 
-               (spamc_optind == argc)) {
+               (spamc_optind >= argc)) {
             return(optiserr(argc, argv, spamc_optind-1, optstring, optchr, OPTERRARG));
          }
          spamc_optarg = argv[spamc_optind++];
@@ -251,7 +252,7 @@
          if((strcmp(longopt+2, longopts[i].name)) == 0) {
             *longindex = i;
             if(longopts[i].has_arg == required_argument) {
-               if(((!argv[spamc_optind]) || (argv[spamc_optind][0] == '-')) && 
+               if(((spamc_optind >= argc) || (!argv[spamc_optind]) || (argv[spamc_optind][0] == '-')) && 
                    (opt == NULL))
                   return(longoptiserr(argc, argv, spamc_optind-1, OPTERRARG));
                if(opt != NULL) {
@@ -260,7 +261,7 @@
                   spamc_optarg = argv[spamc_optind++];
                }
             } else if(longopts[i].has_arg == optional_argument) {
-               if(((argv[spamc_optind]) && (argv[spamc_optind][0] != '-')) || 
+               if(((spamc_optind < argc) && (argv[spamc_optind]) && (argv[spamc_optind][0] != '-')) || 
                      (opt != NULL)) {
                   if(opt != NULL) {
                      spamc_optarg = opt;
@@ -268,8 +269,6 @@
                      spamc_optarg = argv[spamc_optind++];
                   }
                }
-            } else {
-               spamc_optarg = NULL;
             }
             if(longopts[i].flag == NULL) {
                return(longopts[i].val);