Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merged fix for bug #503 from SDL 1.2 revision 3487
- Loading branch information
Showing
with
33 additions
and
3 deletions.
-
+33
−3
src/main/win32/SDL_win32_main.c
|
@@ -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 @@ ParseCommandLine(char *cmdline, char **argv) |
|
|
++argc; |
|
|
} |
|
|
/* Skip over word */ |
|
|
while (*bufp && (*bufp != '"')) { |
|
|
while (*bufp && (*bufp != '"' || *lastp == '\\')) { |
|
|
lastp = bufp; |
|
|
++bufp; |
|
|
} |
|
|
} else { |
|
@@ -69,6 +93,12 @@ ParseCommandLine(char *cmdline, char **argv) |
|
|
} |
|
|
++bufp; |
|
|
} |
|
|
|
|
|
/* Strip out \ from \" sequences */ |
|
|
if (argv && last_argc != argc) { |
|
|
UnEscapeQuotes(argv[last_argc]); |
|
|
} |
|
|
last_argc = argc; |
|
|
} |
|
|
if (argv) { |
|
|
argv[argc] = NULL; |
|
|