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