[3/6] cmd: Fix redirection handle parsing

Frédéric Delanoy frederic.delanoy at gmail.com
Fri Aug 26 17:26:42 CDT 2011


---
 programs/cmd/tests/test_builtins.cmd     |    9 +++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   23 +++++++++++++----------
 programs/cmd/wcmdmain.c                  |    9 +++++----
 3 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 7a264d4..0f78376 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -81,6 +81,12 @@ echo foo>foo
 type foo
 echo foo 1> foo
 type foo
+echo foo at tab@1> foo
+type foo
+echo foo 1>@tab at foo
+type foo
+echo foo at tab@1>@tab at foo
+type foo
 echo foo7 7> foo
 type foo
 echo foo9 9> foo
@@ -91,6 +97,9 @@ echo foo11> foo
 type foo
 echo foo12> foo
 type foo
+del foo
+echo1>foo
+type foo
 echo ...stdout appending
 echo foo>foo
 echo foo >>foo
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 2f9471b..3cbb569 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -120,11 +120,14 @@ word
 ...stdout redirection
 foo
 foo at space@
+foo at tab@
+foo at space@
+foo at tab@
 foo7 at space@@or_broken at foo@space@
 foo9 at space@@or_broken at foo@space@
- at todo_wine@foo1
- at todo_wine@foo11
- at todo_wine@foo12
+foo1
+foo11
+foo12
 ...stdout appending
 foo
 foo at space@
@@ -133,12 +136,12 @@ foob at space@
 fooc at space@
 foob at space@
 fooc at space@
- at todo_wine@food1
- at todo_wine@foob at space@
- at todo_wine@fooc at space@
- at todo_wine@food1
- at todo_wine@food2
- at todo_wine@food21
+food1
+foob at space@
+fooc at space@
+food1
+food2
+food21
 @todo_wine at foo7@space@@space@@or_broken at not supported at space@
 @todo_wine at foo@or_broken at not supported
 @todo_wine at ------------ Testing ^ escape character --------------
@@ -621,7 +624,7 @@ lulu
 file created in read-only dir
 ------------ Testing CALL --------------
 foo at space@
- at todo_wine@foo 8
+foo 8
 foo at space@@space@
 foo bar at space@
 @todo_wine at foo ""@space@
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 04e1391..2c1c2e5 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1944,10 +1944,11 @@ WCHAR *WCMD_ReadAndParseLine(const WCHAR *optionalcmd, CMD_LIST **output, HANDLE
                 }
 
                 /* See if 1>, 2> etc, in which case we have some patching up
-                   to do                                                     */
-                if (curPos != extraSpace &&
-                    *(curPos-1)>='1' && *(curPos-1)<='9') {
-
+                   to do (provided there's a preceding whitespace, and enough
+                   chars read so far) */
+                if (curStringLen > 2
+                        && (*(curPos-1)>='1') && (*(curPos-1)<='9')
+                        && ((*(curPos-2)==' ') || (*(curPos-2)=='\t'))) {
                     curStringLen--;
                     curString[curStringLen] = 0x00;
                     curCopyTo[(*curLen)++] = *(curPos-1);
-- 
1.7.6




More information about the wine-patches mailing list