Commit 978998a1 authored by Vincent Lefevre's avatar Vincent Lefevre Committed by Peter Hutterer

xkbcomp: Improved -w option parsing

This patch improves -w option parsing even further, for cases like
"xkbcomp -w6 4.xkb out.xkb" (which were not handled by the fix of
the warning level is still optional (set to 0 if not present), and
errors like "xkbcomp -wfoo in out" are detected and reported.

https://bugs.freedesktop.org/show_bug.cgi?id=66344Signed-off-by: default avatarVincent Lefevre <vincent@vinc17.net>
Reviewed-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent d4e02a09
......@@ -576,17 +576,37 @@ parseArgs(int argc, char *argv[])
}
else if (strncmp(argv[i], "-w", 2) == 0)
{
if ((i >= (argc - 1)) || (!isdigit(argv[i + 1][0])))
unsigned long utmp;
char *tmp2;
/* If text is just after "-w" in the same word, then it must
* be a number and it is the warning level. Otherwise, if the
* next argument is a number, then it is the warning level,
* else the warning level is assumed to be 0.
*/
if (argv[i][2] == '\0')
{
warningLevel = 0;
if (isdigit(argv[i][2]))
if (sscanf(&argv[i][2], "%i", &itmp) == 1)
warningLevel = itmp;
if (i < argc - 1)
{
utmp = strtoul(argv[i+1], &tmp2, 10);
if (argv[i+1][0] != '\0' && *tmp2 == '\0')
{
warningLevel = utmp > 10 ? 10 : utmp;
i++;
}
}
}
else
{
if (sscanf(argv[++i], "%i", &itmp) == 1)
warningLevel = itmp;
utmp = strtoul(&argv[i][2], &tmp2, 10);
if (*tmp2 == '\0')
warningLevel = utmp > 10 ? 10 : utmp;
else
{
ERROR1("Unknown flag \"%s\" on command line\n", argv[i]);
Usage(argc, argv);
return False;
}
}
}
else if ((strcmp(argv[i], "-xkb") == 0) && (!xkblist))
......
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