Mercurial > sdl-ios-xcode
diff src/main/win32/SDL_win32_main.c @ 2286:41a6675d8700
Merged fix for bug #503 from SDL 1.2 revision 3487
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 29 Dec 2007 19:29:20 +0000 |
parents | c121d94672cb |
children | ae7799d16c87 |
line wrap: on
line diff
--- a/src/main/win32/SDL_win32_main.c Sat Dec 29 06:17:31 2007 +0000 +++ b/src/main/win32/SDL_win32_main.c Sat Dec 29 19:29:20 2007 +0000 @@ -25,14 +25,37 @@ #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)) { @@ -48,7 +71,8 @@ ++argc; } /* Skip over word */ - while (*bufp && (*bufp != '"')) { + while (*bufp && (*bufp != '"' || *lastp == '\\')) { + lastp = bufp; ++bufp; } } else { @@ -69,6 +93,12 @@ } ++bufp; } + + /* Strip out \ from \" sequences */ + if (argv && last_argc != argc) { + UnEscapeQuotes(argv[last_argc]); + } + last_argc = argc; } if (argv) { argv[argc] = NULL;