cmd: Ensure mkdir returns an error for pre-existing directories (try 2)

Frédéric Delanoy frederic.delanoy at gmail.com
Fri Jun 10 06:39:10 CDT 2011


Fixes bug 23783.

Changes from previous version: used mkdir instead of md; this yielded test bot failures
although they should be synonymous
---
 programs/cmd/builtins.c                  |    4 ++++
 programs/cmd/tests/test_builtins.cmd     |   10 ++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |    3 +++
 3 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 0352e59..86091d8 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -496,7 +496,11 @@ static BOOL create_full_path(WCHAR* path)
         WCHAR *slash;
         DWORD last_error = GetLastError();
         if (last_error == ERROR_ALREADY_EXISTS)
+        {
+            ret = FALSE;
+            errorlevel = 1;
             break;
+        }
 
         if (last_error != ERROR_PATH_NOT_FOUND)
         {
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 11f6f10..d70bfd1 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -126,6 +126,15 @@ if exist "file with spaces.dat" del "file with spaces.dat"
 cd ..
 rmdir "foo bar"
 
+echo -----------Testing mkdir -----------
+rem Creating an already existing directory must fail
+call :setError 0
+mkdir foobar
+echo %ErrorLevel%
+mkdir foobar
+echo %ErrorLevel%
+rmdir foobar
+
 echo -----------Testing Errorlevel-----------
 rem nt 4.0 doesn't really support a way of setting errorlevel, so this is weak
 rem See http://www.robvanderwoude.com/exit.php
@@ -143,6 +152,7 @@ echo %ErrorLevel% should be 7
 if errorlevel 7 echo setting var worked too well, bad
 call :setError 3
 echo %ErrorLevel% should still be 7
+rem warning, don't run any tests that depend on %ErrorLevel% after this
 
 echo -----------Testing GOTO-----------
 if a==a goto dest1
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index efc1795..81092a3 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -86,6 +86,9 @@ r.test not found after delete, good
 del /q * succeeded on file1
 del /q * succeeded on file2.dat
 ------------ Testing del /s --------------
+-----------Testing mkdir -----------
+0
+1
 -----------Testing Errorlevel-----------
 1
 errorlevel just right, good
-- 
1.7.5.4




More information about the wine-patches mailing list