programs: Add support to arguments with dash in taskkill
Bruno Jesus
00cpxxx at gmail.com
Tue Jan 21 17:24:54 CST 2014
Fixes http://bugs.winehq.org/show_bug.cgi?id=26944
-------------- next part --------------
diff --git a/programs/taskkill/taskkill.c b/programs/taskkill/taskkill.c
index 18edec3..7f0e7ad 100644
--- a/programs/taskkill/taskkill.c
+++ b/programs/taskkill/taskkill.c
@@ -447,36 +447,46 @@ static BOOL add_to_task_list(WCHAR *name)
* options are detected as parameters when placed after options that accept one. */
static BOOL process_arguments(int argc, WCHAR *argv[])
{
- static const WCHAR slashForceTerminate[] = {'/','f',0};
- static const WCHAR slashImage[] = {'/','i','m',0};
- static const WCHAR slashPID[] = {'/','p','i','d',0};
- static const WCHAR slashHelp[] = {'/','?',0};
- static const WCHAR slashTerminateChildren[] = {'/','t',0};
+ static const WCHAR opForceTerminate[] = {'f',0};
+ static const WCHAR opImage[] = {'i','m',0};
+ static const WCHAR opPID[] = {'p','i','d',0};
+ static const WCHAR opHelp[] = {'?',0};
+ static const WCHAR opTerminateChildren[] = {'t',0};
if (argc > 1)
{
int i;
+ WCHAR *argdata;
BOOL has_im = FALSE, has_pid = FALSE;
/* Only the lone help option is recognized. */
- if (argc == 2 && !strcmpW(slashHelp, argv[1]))
+ if (argc == 2)
{
- taskkill_message(STRING_USAGE);
- exit(0);
+ argdata = argv[1];
+ if ((*argdata == '/' || *argdata == '-') && !strcmpW(opHelp, argdata + 1))
+ {
+ taskkill_message(STRING_USAGE);
+ exit(0);
+ }
}
for (i = 1; i < argc; i++)
{
int got_im = 0, got_pid = 0;
- if (!strcmpiW(slashTerminateChildren, argv[i]))
- WINE_FIXME("/T not supported\n");
- if (!strcmpiW(slashForceTerminate, argv[i]))
+ argdata = argv[i];
+ if (*argdata != '/' && *argdata != '-')
+ goto invalid;
+ argdata++;
+
+ if (!strcmpiW(opTerminateChildren, argdata))
+ WINE_FIXME("argument T not supported\n");
+ if (!strcmpiW(opForceTerminate, argdata))
force_termination = TRUE;
/* Options /IM and /PID appear to behave identically, except for
* the fact that they cannot be specified at the same time. */
- else if ((got_im = !strcmpiW(slashImage, argv[i])) ||
- (got_pid = !strcmpiW(slashPID, argv[i])))
+ else if ((got_im = !strcmpiW(opImage, argdata)) ||
+ (got_pid = !strcmpiW(opPID, argdata)))
{
if (!argv[i + 1])
{
@@ -501,6 +511,7 @@ static BOOL process_arguments(int argc, WCHAR *argv[])
}
else
{
+ invalid:
taskkill_message(STRING_INVALID_OPTION);
taskkill_message(STRING_USAGE);
return FALSE;
More information about the wine-patches
mailing list