handle quoting on the command line in uninstaller
Mike McCormack
mike at codeweavers.com
Tue Oct 7 03:44:58 CDT 2003
ChangeLog:
* handle quoting on the command line in uninstaller
-------------- next part --------------
Index: programs/uninstaller/main.c
===================================================================
RCS file: /home/wine/wine/programs/uninstaller/main.c,v
retrieving revision 1.12
diff -u -r1.12 main.c
--- programs/uninstaller/main.c 25 Sep 2003 20:21:47 -0000 1.12
+++ programs/uninstaller/main.c 5 Oct 2003 19:18:14 -0000
@@ -121,32 +121,80 @@
}
}
+static CHAR *next_token( LPSTR *p )
+{
+ LPSTR token = NULL, t = *p;
+
+ if( !t )
+ return NULL;
+
+ while( t && !token )
+ {
+ switch( *t )
+ {
+ case ' ':
+ t++;
+ continue;
+ case '"':
+ /* unquote the token */
+ token = ++t;
+ t = strchr( token, '"' );
+ if( t )
+ *t++ = 0;
+ break;
+ case 0:
+ t = NULL;
+ break;
+ default:
+ token = t;
+ t = strchr( token, ' ' );
+ if( t )
+ *t++ = 0;
+ break;
+ }
+ }
+ *p = t;
+ return token;
+}
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow )
{
MSG msg;
WNDCLASS wc;
HWND hWnd;
+ LPSTR token = NULL, p;
- /*------------------------------------------------------------------------
- ** Handle requests just to list the programs
- **----------------------------------------------------------------------*/
- if (cmdline && strlen(cmdline) >= 6 && memcmp(cmdline, "--list", 6) == 0)
+ for( p = cmdline; p && *p; )
{
- ListUninstallPrograms();
- return(0);
- }
+ token = next_token( &p );
+ if( !token )
+ break;
- /*------------------------------------------------------------------------
- ** Handle requests to remove one program
- **----------------------------------------------------------------------*/
- if (cmdline && strlen(cmdline) > 9 && memcmp(cmdline, "--remove ", 9) == 0)
- {
- RemoveSpecificProgram(cmdline + 9);
- return(0);
- }
+ /* Handle requests just to list the programs */
+ if( !lstrcmpA( token, "--list" ) )
+ {
+ ListUninstallPrograms();
+ return 0;
+ }
+ else if( !lstrcmpA( token, "--remove" ) )
+ {
+ LPSTR szKey = next_token( &p );
+ if( !szKey )
+ {
+ WINE_ERR( "The remove option requires a parameter.\n");
+ return 1;
+ }
+ RemoveSpecificProgram( szKey );
+ return 0;
+ }
+ else
+ {
+ WINE_ERR( "unknown option %s\n",token);
+ return 1;
+ }
+ }
LoadString( hInst, IDS_APPNAME, appname, sizeof(appname));
More information about the wine-patches
mailing list