222 |
case ARG_SQL_PORT: |
case ARG_SQL_PORT: |
223 |
sql_port = strtoul (arg, NULL, 0); |
sql_port = strtoul (arg, NULL, 0); |
224 |
if (sql_port == 0) |
if (sql_port == 0) |
225 |
{ |
{ |
226 |
sql_host = NULL; |
sql_host = NULL; |
227 |
sql_socket = arg; |
sql_socket = arg; |
228 |
} |
} |
229 |
break; |
break; |
230 |
|
|
231 |
#endif |
#endif |
246 |
case 'd': |
case 'd': |
247 |
p->mode = MODE_DAEMON; |
p->mode = MODE_DAEMON; |
248 |
if (arg) |
if (arg) |
249 |
{ |
{ |
250 |
size_t n = strtoul (arg, NULL, 10); |
size_t n = strtoul (arg, NULL, 10); |
251 |
if (n > 0) |
if (n > 0) |
252 |
p->maxchildren = n; |
p->maxchildren = n; |
253 |
} |
} |
254 |
break; |
break; |
255 |
|
|
256 |
case 'i': |
case 'i': |
291 |
else |
else |
292 |
progname = argv[0]; |
progname = argv[0]; |
293 |
|
|
294 |
x_argv = malloc ((argc + 1) * sizeof (x_argv[0])); |
x_argv = malloc (sizeof (x_argv[0])); |
295 |
if (!x_argv) |
if (!x_argv) |
296 |
{ |
{ |
297 |
fprintf (stderr, "%s: not enough memory\n", progname); |
fprintf (stderr, "%s: not enough memory\n", progname); |
312 |
size_t n = 0; |
size_t n = 0; |
313 |
|
|
314 |
while (getline (&buf, &n, fp) > 0) |
while (getline (&buf, &n, fp) > 0) |
315 |
{ |
{ |
316 |
char *kwp, *p; |
char *kwp, *p; |
317 |
int len; |
int len; |
318 |
|
|
319 |
for (kwp = buf; *kwp && isspace (*kwp); kwp++) |
for (kwp = buf; *kwp && isspace (*kwp); kwp++) |
320 |
; |
; |
321 |
|
|
322 |
if (*kwp == '#' || *kwp == 0) |
if (*kwp == '#' || *kwp == 0) |
323 |
continue; |
continue; |
324 |
|
|
325 |
len = strlen (kwp); |
len = strlen (kwp); |
326 |
if (kwp[len-1] == '\n') |
if (kwp[len-1] == '\n') |
327 |
kwp[--len] = 0; |
kwp[--len] = 0; |
328 |
|
|
329 |
if (kwp[len-1] == '\\' || linebuf) |
if (kwp[len-1] == '\\' || linebuf) |
330 |
{ |
{ |
331 |
int cont; |
int cont; |
332 |
|
|
333 |
if (kwp[len-1] == '\\') |
if (kwp[len-1] == '\\') |
334 |
{ |
{ |
335 |
kwp[--len] = 0; |
kwp[--len] = 0; |
336 |
cont = 1; |
cont = 1; |
337 |
} |
} |
338 |
else |
else |
339 |
cont = 0; |
cont = 0; |
340 |
|
|
341 |
if (!linebuf) |
if (!linebuf) |
342 |
linebuf = calloc (len + 1, 1); |
linebuf = calloc (len + 1, 1); |
343 |
else |
else |
344 |
linebuf = realloc (linebuf, strlen (linebuf) + len + 1); |
linebuf = realloc (linebuf, strlen (linebuf) + len + 1); |
345 |
|
|
346 |
if (!linebuf) |
if (!linebuf) |
347 |
{ |
{ |
348 |
fprintf (stderr, "%s: not enough memory\n", progname); |
fprintf (stderr, "%s: not enough memory\n", progname); |
349 |
exit (1); |
exit (1); |
350 |
} |
} |
351 |
|
|
352 |
strcpy (linebuf + strlen (linebuf), kwp); |
strcpy (linebuf + strlen (linebuf), kwp); |
353 |
if (cont) |
if (cont) |
354 |
continue; |
continue; |
355 |
kwp = linebuf; |
kwp = linebuf; |
356 |
} |
} |
357 |
|
|
358 |
len = 0; |
len = 0; |
359 |
for (p = kwp; *p && !isspace (*p); p++) |
for (p = kwp; *p && !isspace (*p); p++) |
360 |
len++; |
len++; |
361 |
|
|
362 |
if (strncmp ("mailutils", kwp, len) == 0 |
if (strncmp ("mailutils", kwp, len) == 0 |
363 |
|| strncmp (progname, kwp, len) == 0) |
|| strncmp (progname, kwp, len) == 0) |
364 |
{ |
{ |
365 |
int n_argc = 0; |
int n_argc = 0; |
366 |
char **n_argv; |
char **n_argv; |
367 |
|
|
368 |
if (argcv_get (p, "", &n_argc, &n_argv)) |
if (argcv_get (p, "", &n_argc, &n_argv)) |
369 |
{ |
{ |
370 |
argcv_free (n_argc, n_argv); |
argcv_free (n_argc, n_argv); |
371 |
if (linebuf) |
if (linebuf) |
372 |
free (linebuf); |
free (linebuf); |
373 |
linebuf = NULL; |
linebuf = NULL; |
374 |
continue; |
continue; |
375 |
} |
} |
376 |
x_argv = realloc (x_argv, |
x_argv = realloc (x_argv, |
377 |
(x_argc + n_argc + 1) * sizeof (x_argv[0])); |
(x_argc + n_argc + 1) * sizeof (x_argv[0])); |
378 |
if (!x_argv) |
if (!x_argv) |
379 |
{ |
{ |
380 |
fprintf (stderr, "%s: not enough memory\n", progname); |
fprintf (stderr, "%s: not enough memory\n", progname); |
381 |
exit (1); |
exit (1); |
382 |
} |
} |
383 |
|
|
384 |
for (i = 0; i < n_argc; i++) |
for (i = 0; i < n_argc; i++) |
385 |
x_argv[x_argc++] = n_argv[i]; |
x_argv[x_argc++] = n_argv[i]; |
386 |
|
|
387 |
free (n_argv); |
free (n_argv); |
388 |
if (linebuf) |
if (linebuf) |
389 |
free (linebuf); |
free (linebuf); |
390 |
linebuf = NULL; |
linebuf = NULL; |
391 |
} |
} |
392 |
} |
} |
393 |
fclose (fp); |
fclose (fp); |
394 |
} |
} |
395 |
|
|
396 |
/* Finally, add the command line options */ |
/* Finally, add the command line options */ |
397 |
|
x_argv = realloc (x_argv, (x_argc + argc + 1) * sizeof (x_argv[0])); |
398 |
for (i = 1; i < argc; i++) |
for (i = 1; i < argc; i++) |
399 |
x_argv[x_argc++] = argv[i]; |
x_argv[x_argc++] = argv[i]; |
400 |
|
|