From 4e3f2c485ee890854cf4320c34cc9e633a6feafe Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 6 Feb 2004 16:31:32 +0000 Subject: [PATCH] made the command line parser cut right on /D= and _?= and not one char before. this way foo.exe "bla"/D=..., which appears to be valid in other applications, will not get the last quote cut off. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3468 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/exehead/Main.c | 16 +++++++++------- Source/exehead/Ui.c | 1 - 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c index 89b49fa2..85c7c9c0 100644 --- a/Source/exehead/Main.c +++ b/Source/exehead/Main.c @@ -112,13 +112,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, { // skip over any spaces while (*cmdline == ' ') cmdline++; - // find out if this parm is quoted + + // get char we should look for to get the next parm + seekchar = ' '; if (cmdline[0] == '\"') { cmdline++; seekchar = '\"'; } - else seekchar = ' '; + + // is it a switch? if (cmdline[0] == '/') { cmdline++; @@ -137,9 +140,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, if (*(WORD*)cmdline == CHAR2_TO_WORD('D','=')) { - cmdline[-2]=0; // keep this from being passed to uninstaller if necessary + cmdline[-1]=0; // keep this from being passed to uninstaller if necessary mystrcpy(state_install_directory,cmdline+2); - cmdline=""; // prevent further processing of cmdline + break; // /D= must always be last } } @@ -156,8 +159,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT if (g_is_uninstaller) { - char *p=realcmds; - while (*p) p++; + char *p = findchar(realcmds, 0); while (p >= realcmds && (p[0] != '_' || p[1] != '?' || p[2] != '=')) p--; @@ -165,7 +167,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, if (p >= realcmds) { - *(p-1)=0; // terminate before the " _?=" + *p=0; // terminate before the "_?=" p+=3; // skip over _?= if (is_valid_instpath(p)) { diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 19e3c90a..103d6bc5 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -1644,7 +1644,6 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa item.pszText = ptr; item.cchTextMax = total; SendMessage(linsthwnd,LVM_GETITEMTEXT,i,(LPARAM)&item); - //while (*ptr) ptr++; ptr += mystrlen(ptr); *(WORD*)ptr = CHAR2_TO_WORD('\r','\n'); ptr+=2;