dmx: Clean up some argument parsing code

This threw:

../hw/dmx/input/dmxarg.c: In function ‘dmxArgParse’:
../hw/dmx/input/dmxarg.c:128:5: warning: ‘strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
     strncpy(tmp, string, len);
     ^~~~~~~~~~~~~~~~~~~~~~~~~
../hw/dmx/input/dmxarg.c:126:11: note: length computed here
     len = strlen(string) + 2;
           ^~~~~~~~~~~~~~

This code predates xstrtokenize, but that's no excuse.

Signed-off-by: Adam Jackson <ajax@redhat.com>
Acked-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Adam Jackson 2018-04-05 12:45:51 -04:00
parent be99072a1a
commit 176f26e96a

View File

@ -114,30 +114,17 @@ dmxArgC(dmxArg a)
dmxArg dmxArg
dmxArgParse(const char *string) dmxArgParse(const char *string)
{ {
char *tmp; int i = 0;
char *start, *pt;
dmxArg a = dmxArgCreate(); dmxArg a = dmxArgCreate();
int done;
int len;
if (!string) if (!string)
return a; return a;
len = strlen(string) + 2; a->argv = (const char **)xstrtokenize(string, ",");
tmp = malloc(len); if (a->argv)
strncpy(tmp, string, len); for (i = 0; a->argv[i] != NULL; i++);
a->argc = i;
for (start = pt = tmp, done = 0; !done && *pt; start = ++pt) {
for (; *pt && *pt != ','; pt++);
if (!*pt)
done = 1;
*pt = '\0';
dmxArgAdd(a, start);
}
if (!done)
dmxArgAdd(a, ""); /* Final comma */
free(tmp);
return a; return a;
} }