11 #define POPT_ARGV_ARRAY_GROW_DELTA 5
14 int * argcPtr,
const char *** argvPtr)
16 size_t nb = (argc + 1) *
sizeof(*argv);
21 if (argc <= 0 || argv == NULL)
23 for (i = 0; i < argc; i++) {
26 nb += strlen(argv[i]) + 1;
33 dst += (argc + 1) *
sizeof(*argv);
35 for (i = 0; i < argc; i++) {
37 dst += strlen(strcpy(dst, argv[i])) + 1;
57 const char ** argv = malloc(
sizeof(*argv) * argvAlloced);
59 size_t buflen = strlen(s) + 1;
60 char * buf, * bufOrig = NULL;
63 if (argv == NULL)
return rc;
64 buf = bufOrig = calloc(1, buflen);
71 for (src = s; *src !=
'\0'; src++) {
74 }
else if (quote !=
'\0') {
81 if (*src != quote) *buf++ =
'\\';
85 if (*argv[argc] !=
'\0') {
87 if (argc == argvAlloced) {
89 argv = realloc(argv,
sizeof(*argv) * argvAlloced);
90 if (argv == NULL)
goto exit;
94 }
else switch (*src) {
112 if (strlen(argv[argc])) {
119 if (bufOrig) free(bufOrig);
120 if (argv) free(argv);
138 size_t maxlinelen =
sizeof(line);
140 size_t maxargvlen = (size_t)480;
151 argstr = calloc(maxargvlen,
sizeof(*argstr));
154 while (fgets(line, (
int)maxlinelen, fp) != NULL) {
162 if (linelen >= maxlinelen-1) {
167 if (*p ==
'\0' || *p ==
'\n')
continue;
168 if (*p ==
'#')
continue;
172 while (*q !=
'\0' && (!
_isspaceptr(q)) && *q !=
'=')
183 argvlen += (t = q - p) + (
sizeof(
" --")-1);
184 if (argvlen >= maxargvlen) {
185 maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
186 argstr = realloc(argstr, maxargvlen);
189 strcat(argstr,
" --");
212 argvlen += t + (
sizeof(
"' --='")-1);
213 if (argvlen >= maxargvlen) {
214 maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
215 argstr = realloc(argstr, maxargvlen);
218 strcat(argstr,
" --");
220 strcat(argstr,
"=\"");
222 strcat(argstr,
"\"");