From 28a68906d18814e346e39c687c7b725b1e1a4f50 Mon Sep 17 00:00:00 2001 From: Sven Sandberg Date: Thu, 8 Jan 2009 14:28:40 +0100 Subject: [PATCH] BUG#41959: mtr: error message when mkpath() fails and the file exists but is not directory Problem: when mtr tries to create a directory, and the target exists but is a file instead of directory, it tries several times to create the directory again before it fails. Fix: make it check if the target exists and is a non-directory. --- mysql-test/lib/My/File/Path.pm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mysql-test/lib/My/File/Path.pm b/mysql-test/lib/My/File/Path.pm index 7ef1211ff52..7c0004ef526 100644 --- a/mysql-test/lib/My/File/Path.pm +++ b/mysql-test/lib/My/File/Path.pm @@ -61,6 +61,9 @@ sub rmtree { sub mkpath { my $path; + + die "Usage: mkpath()" unless @_ == 1; + foreach my $dir ( File::Spec->splitdir( @_ ) ) { #print "dir: $dir\n"; if ($dir =~ /^[a-z]:/i){ @@ -72,8 +75,9 @@ sub mkpath { $path= File::Spec->catdir($path, $dir); #print "path: $path\n"; - next if -d $path; # Path already exist - next if mkdir($path); # mkdir worked + next if -d $path; # Path already exists and is a directory + croak("File already exists but is not a directory: '$path'") if -e $path; + next if mkdir($path); # mkdir failed, try one more time next if mkdir($path);