Jason Edmeades : cmd.exe: Add basic for /F string support.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Sep 12 07:50:48 CDT 2007
Module: wine
Branch: master
Commit: f3ae48cbdafb93936f51133045714f7a64f3ce12
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f3ae48cbdafb93936f51133045714f7a64f3ce12
Author: Jason Edmeades <jason.edmeades at googlemail.com>
Date: Tue Sep 11 21:43:06 2007 +0100
cmd.exe: Add basic for /F string support.
---
programs/cmd/builtins.c | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index ee8f1b3..a58acde 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -770,10 +770,11 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
/* Loop through all entries on the same line */
WCHAR *item;
+ WCHAR *itemStart;
WINE_TRACE("Processing for set %p\n", thisSet);
i = 0;
- while (*(item = WCMD_parameter (thisSet->command, i, NULL))) {
+ while (*(item = WCMD_parameter (thisSet->command, i, &itemStart))) {
/*
* If the parameter within the set has a wildcard then search for matching files
@@ -817,7 +818,8 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
if (itemNum <=3) numbers[itemNum-1] = atolW(item);
/* else ignore them! */
- } else if (doFileset) {
+ /* Filesets - either a list of files, or a command to run and parse the output */
+ } else if (doFileset && *itemStart != '"') {
HANDLE input;
@@ -847,6 +849,8 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
wine_dbgstr_w(buffer));
if (where) {
+ /* FIXME: The following should be moved into its own routine and
+ reused for the string literal parsing below */
thisCmdStart = cmdStart;
WCMD_part_execute(&thisCmdStart, firstCmd, variable, parm, FALSE, TRUE);
cmdEnd = thisCmdStart;
@@ -857,6 +861,25 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
}
CloseHandle (input);
}
+
+ /* Filesets - A string literal */
+ } else if (doFileset && *itemStart == '"') {
+ WCHAR buffer[MAXSTRING] = {'\0'};
+ WCHAR *where, *parm;
+
+ /* Skip blank lines, and re-extract parameter now string has quotes removed */
+ strcpyW(buffer, item);
+ parm = WCMD_parameter (buffer, 0, &where);
+ WINE_TRACE("Parsed parameter: %s from %s\n", wine_dbgstr_w(parm),
+ wine_dbgstr_w(buffer));
+
+ if (where) {
+ /* FIXME: The following should be moved into its own routine and
+ reused for the string literal parsing below */
+ thisCmdStart = cmdStart;
+ WCMD_part_execute(&thisCmdStart, firstCmd, variable, parm, FALSE, TRUE);
+ cmdEnd = thisCmdStart;
+ }
}
WINE_TRACE("Post-command, cmdEnd = %p\n", cmdEnd);
More information about the wine-cvs
mailing list