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