From 938719062df1bd17d4360c2e51d07423aee28ab1 Mon Sep 17 00:00:00 2001 From: Jason Edmeades <us@edmeades.me.uk> Date: Tue, 20 Feb 2007 00:40:28 +0000 Subject: [PATCH] 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 9532cbba8f3..384feddc184 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 fa17d9373bf..0e58197539a 100755 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -301,13 +301,32 @@ 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; char *whichcmd; 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. */ -- GitLab