X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fgetarguments.c;h=e8da9849b8eaad0b25b63068c721f97d080a8996;hp=89b57c19240e3fe86d1a75231e311c1bd75ed167;hb=31750e8a12eafcd1b8fa81cb12b988e680254f24;hpb=6c42153ad9362cc676ea66563bf400d7511b3b68 diff --git a/sbr/getarguments.c b/sbr/getarguments.c index 89b57c1..e8da984 100644 --- a/sbr/getarguments.c +++ b/sbr/getarguments.c @@ -1,52 +1,49 @@ - /* - * getarguments.c -- Get the argument vector ready to go. - * - * $Id$ - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** getarguments.c -- Get the argument vector ready to go. +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include +#include char ** -getarguments (char *invo_name, int argc, char **argv, int check_context) +getarguments(char *invo_name, int argc, char **argv, int check_context) { - char *cp, **ap, **bp, **arguments; - int n = 0; - - /* - * Check if profile/context specifies any arguments - */ - if (check_context && (cp = context_find (invo_name))) { - cp = getcpy (cp); /* make copy */ - ap = brkstring (cp, " ", "\n"); /* split string */ - - /* Count number of arguments split */ - bp = ap; - while (*bp++) - n++; - } - - if (!(arguments = (char **) malloc ((argc + n) * sizeof(*arguments)))) - adios (NULL, "unable to malloc argument storage"); - bp = arguments; - - /* Copy any arguments from profile/context */ - if (n > 0) { - while (*ap) - *bp++ = *ap++; - } - - /* Copy arguments from command line */ - argv++; - while (*argv) - *bp++ = *argv++; - - /* Now NULL terminate the array */ - *bp = NULL; - - return arguments; + char *cp = NULL, **ap = NULL, **bp = NULL, **arguments = NULL; + int n = 0; + + /* + ** Check if profile/context specifies any arguments + */ + if (check_context && (cp = context_find(invo_name))) { + cp = mh_xstrdup(cp); /* make copy */ + ap = brkstring(cp, " ", "\n"); /* split string */ + + /* Count number of arguments split */ + bp = ap; + while (*bp++) + n++; + } + + arguments = mh_xcalloc(argc + n, sizeof(*arguments)); + bp = arguments; + + /* Copy any arguments from profile/context */ + if (ap != NULL && n > 0) { + while (*ap) + *bp++ = *ap++; + } + + /* Copy arguments from command line */ + argv++; + while (*argv) + *bp++ = *argv++; + + /* Now NULL terminate the array */ + *bp = NULL; + + return arguments; }