Module: wine Branch: master Commit: 8a7687d868728bd3c9fe922562f5a78045f05242 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a7687d868728bd3c9fe922562...
Author: Bruno Jesus 00cpxxx@gmail.com Date: Tue Jan 21 21:24:54 2014 -0200
programs: Add support to arguments with dash in taskkill.
---
programs/taskkill/taskkill.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-)
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;