From 9939fd6012b0f48c30293f85af47746dc4a81bce Mon Sep 17 00:00:00 2001 From: Andrey Turkin Date: Sun, 28 Feb 2010 17:50:16 +0300 Subject: [PATCH] extrac32: Enhance command-line parsing. --- programs/extrac32/extrac32.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/programs/extrac32/extrac32.c b/programs/extrac32/extrac32.c index d7f2da44bfa..fc1ae1c94ae 100644 --- a/programs/extrac32/extrac32.c +++ b/programs/extrac32/extrac32.c @@ -105,10 +105,14 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho for(i = 0; i < argc; i++) { /* Get cabfile */ - if ((argv[i][0] != '/') && !cabfile) + if (argv[i][0] != '/') { - cabfile = argv[i]; - continue; + if (!cabfile) + { + cabfile = argv[i]; + continue; + } else + break; } /* Get parameters for commands */ check = toupperW( argv[i][1] ); @@ -127,11 +131,7 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho break; case 'C': if (cmd) return 0; - if ((i + 2) >= argc) return 0; cmd = check; - cabfile = argv[++i]; - if (!GetFullPathNameW(argv[++i], MAX_PATH, path, NULL)) - return 0; break; case 'E': case 'D': @@ -146,6 +146,13 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho if (!cabfile) return 0; + if (cmd == 'C') + { + if ((i + 1) != argc) return 0; + if (!GetFullPathNameW(argv[i], MAX_PATH, path, NULL)) + return 0; + } + if (!path[0]) GetCurrentDirectoryW(MAX_PATH, path);