Commit 8a7687d8 authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

programs: Add support to arguments with dash in taskkill.

parent 294adeec
...@@ -447,36 +447,46 @@ static BOOL add_to_task_list(WCHAR *name) ...@@ -447,36 +447,46 @@ static BOOL add_to_task_list(WCHAR *name)
* options are detected as parameters when placed after options that accept one. */ * options are detected as parameters when placed after options that accept one. */
static BOOL process_arguments(int argc, WCHAR *argv[]) static BOOL process_arguments(int argc, WCHAR *argv[])
{ {
static const WCHAR slashForceTerminate[] = {'/','f',0}; static const WCHAR opForceTerminate[] = {'f',0};
static const WCHAR slashImage[] = {'/','i','m',0}; static const WCHAR opImage[] = {'i','m',0};
static const WCHAR slashPID[] = {'/','p','i','d',0}; static const WCHAR opPID[] = {'p','i','d',0};
static const WCHAR slashHelp[] = {'/','?',0}; static const WCHAR opHelp[] = {'?',0};
static const WCHAR slashTerminateChildren[] = {'/','t',0}; static const WCHAR opTerminateChildren[] = {'t',0};
if (argc > 1) if (argc > 1)
{ {
int i; int i;
WCHAR *argdata;
BOOL has_im = FALSE, has_pid = FALSE; BOOL has_im = FALSE, has_pid = FALSE;
/* Only the lone help option is recognized. */ /* Only the lone help option is recognized. */
if (argc == 2 && !strcmpW(slashHelp, argv[1])) if (argc == 2)
{ {
taskkill_message(STRING_USAGE); argdata = argv[1];
exit(0); if ((*argdata == '/' || *argdata == '-') && !strcmpW(opHelp, argdata + 1))
{
taskkill_message(STRING_USAGE);
exit(0);
}
} }
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++)
{ {
int got_im = 0, got_pid = 0; int got_im = 0, got_pid = 0;
if (!strcmpiW(slashTerminateChildren, argv[i])) argdata = argv[i];
WINE_FIXME("/T not supported\n"); if (*argdata != '/' && *argdata != '-')
if (!strcmpiW(slashForceTerminate, argv[i])) goto invalid;
argdata++;
if (!strcmpiW(opTerminateChildren, argdata))
WINE_FIXME("argument T not supported\n");
if (!strcmpiW(opForceTerminate, argdata))
force_termination = TRUE; force_termination = TRUE;
/* Options /IM and /PID appear to behave identically, except for /* Options /IM and /PID appear to behave identically, except for
* the fact that they cannot be specified at the same time. */ * the fact that they cannot be specified at the same time. */
else if ((got_im = !strcmpiW(slashImage, argv[i])) || else if ((got_im = !strcmpiW(opImage, argdata)) ||
(got_pid = !strcmpiW(slashPID, argv[i]))) (got_pid = !strcmpiW(opPID, argdata)))
{ {
if (!argv[i + 1]) if (!argv[i + 1])
{ {
...@@ -501,6 +511,7 @@ static BOOL process_arguments(int argc, WCHAR *argv[]) ...@@ -501,6 +511,7 @@ static BOOL process_arguments(int argc, WCHAR *argv[])
} }
else else
{ {
invalid:
taskkill_message(STRING_INVALID_OPTION); taskkill_message(STRING_INVALID_OPTION);
taskkill_message(STRING_USAGE); taskkill_message(STRING_USAGE);
return FALSE; return FALSE;
......
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