/[mailutils]/mailutils/lib/mu_argp.c
ViewVC logotype

Diff of /mailutils/lib/mu_argp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by gray, Tue Feb 5 15:00:18 2002 UTC revision 1.2 by gray, Tue Feb 19 12:05:17 2002 UTC
# Line 222  mu_common_argp_parser (int key, char *ar Line 222  mu_common_argp_parser (int key, char *ar
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
# Line 246  mu_daemon_argp_parser (int key, char *ar Line 246  mu_daemon_argp_parser (int key, char *ar
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':
# Line 291  mu_create_argcv (int argc, char **argv, Line 291  mu_create_argcv (int argc, char **argv,
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);
# Line 312  mu_create_argcv (int argc, char **argv, Line 312  mu_create_argcv (int argc, char **argv,
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        

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26