1 int
getStringOpts(int argc,char ** argv,int i,char *** values,int cmin,int cmax)2 getStringOpts(int argc, char **argv, int i,
3 char* **values,
4 int cmin, int cmax)
5 /*****
6 We want to find at least cmin values and at most cmax values.
7 cmax==-1 then means infinitely many are allowed.
8 *****/
9 {
10 int alloced, used;
11
12 if( i+cmin >= argc ) {
13 fprintf(stderr,
14 "%s: option `%s' wants at least %d parameters\n",
15 Program, argv[i], cmin);
16 exit(EXIT_FAILURE);
17 }
18
19 alloced = cmin + 4;
20
21 *values = (char**)calloc((size_t)alloced, sizeof(char*));
22 if( ! *values ) {
23 outMem:
24 fprintf(stderr,
25 "%s: out of memory during parsing of option `%s'\n",
26 Program, argv[i]);
27 exit(EXIT_FAILURE);
28 }
29
30 for(used=0; (cmax==-1 || used<cmax) && used+i+1<argc; used++) {
31 if( used==alloced ) {
32 alloced += 8;
33 *values = (char **)realloc(*values, alloced*sizeof(char*));
34 if( !*values ) goto outMem;
35 }
36
37 if( used>=cmin && argv[used+i+1][0]=='-' ) break;
38 (*values)[used] = argv[used+i+1];
39 }
40
41 if( used<cmin ) {
42 fprintf(stderr,
43 "%s: less than %d parameters for option `%s', only %d found\n",
44 Program, cmin, argv[i], used);
45 exit(EXIT_FAILURE);
46 }
47
48 return i+used;
49 }
50 /**********************************************************************/
51