Jason Edmeades : cmd.exe:
Add support for %ERRORLEVEL% in both batch and cmd line.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Feb 21 06:01:09 CST 2007
Module: wine
Branch: master
Commit: 938719062df1bd17d4360c2e51d07423aee28ab1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=938719062df1bd17d4360c2e51d07423aee28ab1
Author: Jason Edmeades <us at 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);
More information about the wine-cvs
mailing list