git-svn: trunk@5011
Tomasz Kojm authored on 2009/04/03 01:38:10... | ... |
@@ -1,3 +1,7 @@ |
1 |
+Thu Apr 2 18:36:58 CEST 2009 (tk) |
|
2 |
+---------------------------------- |
|
3 |
+ * shared/optparser.c: make the parser even more tolerant to whitespace |
|
4 |
+ |
|
1 | 5 |
Thu Apr 2 04:09:06 CEST 2009 (acab) |
2 | 6 |
------------------------------------ |
3 | 7 |
* clamav-milter/clamfi.c: properly separate body from headers (bb#1531), |
... | ... |
@@ -630,7 +630,7 @@ struct optstruct *optparse(const char *cfgfile, int argc, char **argv, int verbo |
630 | 630 |
const char *name = NULL, *arg; |
631 | 631 |
int i, err = 0, lc = 0, sc = 0, opt_index, line = 0, ret, numarg; |
632 | 632 |
struct optstruct *opts = NULL, *opts_last = NULL, *opt; |
633 |
- char buff[512]; |
|
633 |
+ char buffer[512], *buff; |
|
634 | 634 |
struct option longopts[MAXCMDOPTS]; |
635 | 635 |
char shortopts[MAXCMDOPTS]; |
636 | 636 |
regex_t regex; |
... | ... |
@@ -705,9 +705,12 @@ struct optstruct *optparse(const char *cfgfile, int argc, char **argv, int verbo |
705 | 705 |
while(1) { |
706 | 706 |
|
707 | 707 |
if(cfgfile) { |
708 |
- if(!fgets(buff, sizeof(buff), fs)) |
|
708 |
+ if(!fgets(buffer, sizeof(buffer), fs)) |
|
709 | 709 |
break; |
710 | 710 |
|
711 |
+ buff = buffer; |
|
712 |
+ for(i = 0; i < (int) strlen(buff) - 1 && (buff[i] == ' ' || buff[i] == '\t'); i++); |
|
713 |
+ buff += i; |
|
711 | 714 |
line++; |
712 | 715 |
if(strlen(buff) <= 2 || buff[0] == '#') |
713 | 716 |
continue; |
... | ... |
@@ -729,14 +732,14 @@ struct optstruct *optparse(const char *cfgfile, int argc, char **argv, int verbo |
729 | 729 |
*pt++ = 0; |
730 | 730 |
for(i = 0; i < (int) strlen(pt) - 1 && (pt[i] == ' ' || pt[i] == '\t'); i++); |
731 | 731 |
pt += i; |
732 |
- if((i = strlen(pt)) && pt[i - 1] == '\n') |
|
733 |
- pt[i-- - 1] = 0; |
|
732 |
+ for(i = strlen(pt); i >= 1 && (pt[i - 1] == ' ' || pt[i - 1] == '\t' || pt[i - 1] == '\n'); i--); |
|
734 | 733 |
if(!i) { |
735 | 734 |
if(verbose) |
736 | 735 |
fprintf(stderr, "ERROR: Missing argument for option at line %d\n", line); |
737 | 736 |
err = 1; |
738 | 737 |
break; |
739 | 738 |
} |
739 |
+ pt[i] = 0; |
|
740 | 740 |
arg = pt; |
741 | 741 |
if(*arg == '"') { |
742 | 742 |
arg++; pt++; |
... | ... |
@@ -754,15 +757,6 @@ struct optstruct *optparse(const char *cfgfile, int argc, char **argv, int verbo |
754 | 754 |
err = 1; |
755 | 755 |
break; |
756 | 756 |
} |
757 |
- } else { |
|
758 |
- for(i = strlen(pt); i >= 1 && (pt[i - 1] == ' ' || pt[i - 1] == '\t'); i--); |
|
759 |
- if(!i) { |
|
760 |
- if(verbose) |
|
761 |
- fprintf(stderr, "ERROR: Missing argument for option at line %u\n", line); |
|
762 |
- err = 1; |
|
763 |
- break; |
|
764 |
- } |
|
765 |
- pt[i] = 0; |
|
766 | 757 |
} |
767 | 758 |
|
768 | 759 |
} else { |