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);
36 for (i = 0; i < argc; i++) {
38 dst =
stpcpy(dst, argv[i]);
59 const char ** argv = malloc(
sizeof(*argv) * argvAlloced);
61 size_t buflen = strlen(s) + 1;
62 char * buf, * bufOrig = NULL;
65 if (argv == NULL)
return rc;
66 buf = bufOrig = calloc((
size_t)1, buflen);
73 for (src = s; *src !=
'\0'; src++) {
76 }
else if (quote !=
'\0') {
83 if (*src != quote) *buf++ =
'\\';
87 if (*argv[argc] !=
'\0') {
89 if (argc == argvAlloced) {
91 argv = realloc(argv,
sizeof(*argv) * argvAlloced);
92 if (argv == NULL)
goto exit;
96 }
else switch (*src) {
114 if (strlen(argv[argc])) {
121 if (bufOrig) free(bufOrig);
122 if (argv) free(argv);
141 size_t maxlinelen =
sizeof(line);
143 size_t maxargvlen = (size_t)480;
154 argstr = calloc(maxargvlen,
sizeof(*argstr));
157 while (fgets(line, (
int)maxlinelen, fp) != NULL) {
165 if (linelen >= maxlinelen-1) {
170 if (*p ==
'\0' || *p ==
'\n')
continue;
171 if (*p ==
'#')
continue;
175 while (*q !=
'\0' && (!
_isspaceptr(q)) && *q !=
'=')
186 argvlen += (t = (size_t)(q - p)) + (
sizeof(
" --")-1);
187 if (argvlen >= maxargvlen) {
188 maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
189 argstr = realloc(argstr, maxargvlen);
192 strcat(argstr,
" --");
215 argvlen += t + (
sizeof(
"' --='")-1);
216 if (argvlen >= maxargvlen) {
217 maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
218 argstr = realloc(argstr, maxargvlen);
221 strcat(argstr,
" --");
223 strcat(argstr,
"=\"");
225 strcat(argstr,
"\"");
#define POPT_ERROR_BADQUOTE
int poptParseArgvString(const char *s, int *argcPtr, const char ***argvPtr)
Parse a string into an argument array.
#define POPT_ARGV_ARRAY_GROW_DELTA
static char * stpcpy(char *dest, const char *src)
#define POPT_ERROR_NULLARG
int poptDupArgv(int argc, const char **argv, int *argcPtr, const char ***argvPtr)
Duplicate an argument array.
int poptConfigFileToString(FILE *fp, char **argstrp, int flags)
Parses an input configuration file and returns an string that is a command line.
#define POPT_ERROR_OVERFLOW
#define _isspaceptr(_chp)
#define POPT_ERROR_MALLOC