Commit 0630b480 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Copy the argument name to malloc'ed storage.

parent 26d26d30
......@@ -180,7 +180,7 @@ void mgt_DumpRstVsl(void);
struct vsb *mgt_BuildVident(void);
void MGT_Complain(const char *, const char *, ...) __v_printflike(2, 3);
const void *MGT_Pick(const struct choice *, const char *, const char *);
char **MGT_NamedArg(const char *arg, const char **name, const char *what);
char **MGT_NamedArg(const char *, const char **, const char *);
/* stevedore_mgt.c */
......
......@@ -194,7 +194,9 @@ char **
MGT_NamedArg(const char *spec, const char **name, const char *what)
{
const char *p, *q;
char *r;
char **av;
int l;
ASSERT_MGT();
p = strchr(spec, '=');
......@@ -214,6 +216,15 @@ MGT_NamedArg(const char *spec, const char **name, const char *what)
if (av[0] != NULL)
ARGV_ERR("%s\n", av[0]);
*name = p;
if (p == NULL) {
*name = NULL;
} else {
l = p - spec;
r = malloc(1L + l);
AN(r);
memcpy(r, spec, l);
r[l] = '\0';
*name = r;
}
return (av);
}
......@@ -178,10 +178,10 @@ STV_Config(const char *spec)
bprintf(stv->ident, "s%u", seq++);
else {
/* XXX: no need for truncation once VSM ident becomes dynamic */
l = name - spec;
l = strlen(name);
if (l > sizeof stv->ident - 1)
l = sizeof stv->ident - 1;
bprintf(stv->ident, "%.*s", l, spec);
bprintf(stv->ident, "%.*s", l, name);
}
stv_check_ident(spec, stv->ident);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment