[PATCH] programs/notepad: Only skip valid command options

Bruno Jesus 00cpxxx at gmail.com
Mon Jan 30 21:31:33 CST 2017


Tested against XP notepad, fixes bug https://bugs.winehq.org/show_bug.cgi?id=27580

This also allows opening unix style paths.

Examples that now match:
notepad /paaa.txt     = "aaa.txt" not found
notepad /p /p aaa.txt = "/p aaa.txt" not found
notepad /etc/passwd2  = "/etc/passwd2" not found
notepad ok.txt /p     = file not found

Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
---
 programs/notepad/main.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/programs/notepad/main.c b/programs/notepad/main.c
index 20e887b..6f567a9 100644
--- a/programs/notepad/main.c
+++ b/programs/notepad/main.c
@@ -615,7 +615,7 @@ static int AlertFileDoesNotExist(LPCWSTR szFileName)
 
 static void HandleCommandLine(LPWSTR cmdline)
 {
-    WCHAR delimiter;
+    WCHAR delimiter, *ptr;
     BOOL opt_print = FALSE;
 
     /* skip white space */
@@ -630,22 +630,29 @@ static void HandleCommandLine(LPWSTR cmdline)
 
     if (*cmdline == delimiter) cmdline++;
 
-    while (*cmdline == ' ' || *cmdline == '-' || *cmdline == '/')
+    ptr = cmdline;
+    while (*ptr == ' ' || *ptr == '-' || *ptr == '/')
     {
         WCHAR option;
 
-        if (*cmdline++ == ' ') continue;
+        if (*ptr++ == ' ') continue;
 
-        option = *cmdline;
-        if (option) cmdline++;
-        while (*cmdline == ' ') cmdline++;
+        option = *ptr;
+        if (option) ptr++;
+        while (*ptr == ' ') ptr++;
 
         switch(option)
         {
             case 'p':
             case 'P':
-                opt_print = TRUE;
+            {
+                if (!opt_print)
+                {
+                    opt_print = TRUE;
+                    cmdline = ptr;
+                }
                 break;
+            }
         }
     }
 
-- 
2.9.3




More information about the wine-patches mailing list