Bruno Jesus : programs: Add support to arguments with dash in taskkill.

Alexandre Julliard julliard at winehq.org
Mon Jan 27 13:32:53 CST 2014


Module: wine
Branch: master
Commit: 8a7687d868728bd3c9fe922562f5a78045f05242
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8a7687d868728bd3c9fe922562f5a78045f05242

Author: Bruno Jesus <00cpxxx at 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;




More information about the wine-cvs mailing list