Mercurial > sdl-ios-xcode
changeset 4118:3c068a8c016f SDL-1.2
Tony White fixed bug #503
Support escaped quotes on Win32 command lines.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 29 Dec 2007 18:58:09 +0000 |
parents | dbb5f9556796 |
children | 98dee075dae0 |
files | src/main/win32/SDL_win32_main.c |
diffstat | 1 files changed, 32 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/win32/SDL_win32_main.c Sat Dec 29 18:50:33 2007 +0000 +++ b/src/main/win32/SDL_win32_main.c Sat Dec 29 18:58:09 2007 +0000 @@ -53,13 +53,35 @@ #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t')) #endif /* _WIN32_WCE < 300 */ +static void UnEscapeQuotes( char *arg ) +{ + char *last = NULL; + + while( *arg ) { + if( *arg == '"' && *last == '\\' ) { + char *c_curr = arg; + char *c_last = last; + + while( *c_curr ) { + *c_last = *c_curr; + c_last = c_curr; + c_curr++; + } + *c_last = '\0'; + } + last = arg; + arg++; + } +} + /* Parse a command line buffer into arguments */ static int ParseCommandLine(char *cmdline, char **argv) { char *bufp; - int argc; + char *lastp = NULL; + int argc, last_argc; - argc = 0; + argc = last_argc = 0; for ( bufp = cmdline; *bufp; ) { /* Skip leading whitespace */ while ( isspace(*bufp) ) { @@ -75,7 +97,8 @@ ++argc; } /* Skip over word */ - while ( *bufp && (*bufp != '"') ) { + while ( *bufp && ( *bufp != '"' || *lastp == '\\' ) ) { + lastp = bufp; ++bufp; } } else { @@ -96,6 +119,12 @@ } ++bufp; } + + /* Strip out \ from \" sequences */ + if( argv && last_argc != argc ) { + UnEscapeQuotes( argv[last_argc] ); + } + last_argc = argc; } if ( argv ) { argv[argc] = NULL;