src/main/win32/SDL_win32_main.c
branchSDL-1.2
changeset 4118 3c068a8c016f
parent 4084 70e77cbba87c
child 4246 8b8314cc34a6
equal deleted inserted replaced
4117:dbb5f9556796 4118:3c068a8c016f
    51 #if defined(_WIN32_WCE) && _WIN32_WCE < 300
    51 #if defined(_WIN32_WCE) && _WIN32_WCE < 300
    52 /* seems to be undefined in Win CE although in online help */
    52 /* seems to be undefined in Win CE although in online help */
    53 #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
    53 #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
    54 #endif /* _WIN32_WCE < 300 */
    54 #endif /* _WIN32_WCE < 300 */
    55 
    55 
       
    56 static void UnEscapeQuotes( char *arg )
       
    57 {
       
    58 	char *last = NULL;
       
    59 
       
    60 	while( *arg ) {
       
    61 		if( *arg == '"' && *last == '\\' ) {
       
    62 			char *c_curr = arg;
       
    63 			char *c_last = last;
       
    64 
       
    65 			while( *c_curr ) {
       
    66 				*c_last = *c_curr;
       
    67 				c_last = c_curr;
       
    68 				c_curr++;
       
    69 			}
       
    70 			*c_last = '\0';
       
    71 		}
       
    72 		last = arg;
       
    73 		arg++;
       
    74 	}
       
    75 }
       
    76 
    56 /* Parse a command line buffer into arguments */
    77 /* Parse a command line buffer into arguments */
    57 static int ParseCommandLine(char *cmdline, char **argv)
    78 static int ParseCommandLine(char *cmdline, char **argv)
    58 {
    79 {
    59 	char *bufp;
    80 	char *bufp;
    60 	int argc;
    81 	char *lastp = NULL;
    61 
    82 	int argc, last_argc;
    62 	argc = 0;
    83 
       
    84 	argc = last_argc = 0;
    63 	for ( bufp = cmdline; *bufp; ) {
    85 	for ( bufp = cmdline; *bufp; ) {
    64 		/* Skip leading whitespace */
    86 		/* Skip leading whitespace */
    65 		while ( isspace(*bufp) ) {
    87 		while ( isspace(*bufp) ) {
    66 			++bufp;
    88 			++bufp;
    67 		}
    89 		}
    73 					argv[argc] = bufp;
    95 					argv[argc] = bufp;
    74 				}
    96 				}
    75 				++argc;
    97 				++argc;
    76 			}
    98 			}
    77 			/* Skip over word */
    99 			/* Skip over word */
    78 			while ( *bufp && (*bufp != '"') ) {
   100 			while ( *bufp && ( *bufp != '"' || *lastp == '\\' ) ) {
       
   101 				lastp = bufp;
    79 				++bufp;
   102 				++bufp;
    80 			}
   103 			}
    81 		} else {
   104 		} else {
    82 			if ( *bufp ) {
   105 			if ( *bufp ) {
    83 				if ( argv ) {
   106 				if ( argv ) {
    94 			if ( argv ) {
   117 			if ( argv ) {
    95 				*bufp = '\0';
   118 				*bufp = '\0';
    96 			}
   119 			}
    97 			++bufp;
   120 			++bufp;
    98 		}
   121 		}
       
   122 
       
   123 		/* Strip out \ from \" sequences */
       
   124 		if( argv && last_argc != argc ) {
       
   125 			UnEscapeQuotes( argv[last_argc] );	
       
   126 		}
       
   127 		last_argc = argc;	
    99 	}
   128 	}
   100 	if ( argv ) {
   129 	if ( argv ) {
   101 		argv[argc] = NULL;
   130 		argv[argc] = NULL;
   102 	}
   131 	}
   103 	return(argc);
   132 	return(argc);