Module: wine Branch: master Commit: 938719062df1bd17d4360c2e51d07423aee28ab1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=938719062df1bd17d4360c2e51...
Author: Jason Edmeades us@edmeades.me.uk Date: Tue Feb 20 00:40:28 2007 +0000
cmd.exe: Add support for %ERRORLEVEL% in both batch and cmd line.
---
programs/cmd/batch.c | 10 +++++++++- programs/cmd/wcmdmain.c | 21 ++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/batch.c b/programs/cmd/batch.c index 9532cbb..384fedd 100755 --- a/programs/cmd/batch.c +++ b/programs/cmd/batch.c @@ -146,13 +146,21 @@ int i; /* contents of fred, then the digit 1. Would need to remove */ /* ExpandEnvStrings to achieve this */
- /* Replace use of %0...%9 */ + /* Replace use of %0...%9 and errorlevel*/ p = cmd1; while ((p = strchr(p, '%'))) { i = *(p+1) - '0'; if (*(p+1) == '~') { WCMD_HandleTildaModifiers(&p, NULL); p++; + } else if (CompareString (LOCALE_USER_DEFAULT, + NORM_IGNORECASE | SORT_STRINGSORT, + (p+1), 11, "ERRORLEVEL%", -1) == 2) { + char output[10]; + sprintf(output, "%d", errorlevel); + s = strdup (p+12); + strcpy (p, output); + strcat (p, s); } else if ((i >= 0) && (i <= 9)) { s = strdup (p+2); t = WCMD_parameter (context -> command, i + context -> shift_count, NULL); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index fa17d93..0e58197 100755 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -301,7 +301,7 @@ int main (int argc, char *argv[])
void WCMD_process_command (char *command) { - char *cmd, *p; + char *cmd, *p, *s; int status, i, len; DWORD count, creationDisposition; HANDLE h; @@ -309,6 +309,25 @@ void WCMD_process_command (char *command) SECURITY_ATTRIBUTES sa;
/* + * Replace errorlevel with current value (This shrinks in + * place and hence no need to reallocate the memory yet) + */ + p = command; + while ((p = strchr(p, '%'))) { + if (CompareString (LOCALE_USER_DEFAULT, + NORM_IGNORECASE | SORT_STRINGSORT, + (p+1), 11, "ERRORLEVEL%", -1) == 2) { + char output[10]; + sprintf(output, "%d", errorlevel); + s = strdup (p+12); + strcpy (p, output); + strcat (p, s); + } else { + p++; + } + } + +/* * Expand up environment variables. */ len = ExpandEnvironmentStrings (command, NULL, 0);