winemaker: Fix invalid usage of {open,close}dir() in fix_file_and_directory_names(). .

Reuse our caching mechanism (get_directory_contents()), but clear the 
cache if we have modified a directory's content.
This commit is contained in:
Francois Gouget 2009-02-25 10:32:36 +01:00 committed by Alexandre Julliard
parent 33d4c7c514
commit d4fddfb4bc
1 changed files with 41 additions and 30 deletions

View File

@ -447,6 +447,14 @@ sub get_directory_contents($)
return $directory; return $directory;
} }
##
# Removes a directory from the cache.
# This is needed if one of its files or subdirectory has been renamed.
sub clear_directory_cache($)
{
my ($dirname)=@_;
delete $directories{$dirname};
}
##### #####
@ -604,7 +612,6 @@ sub source_scan_directory($$$$)
} }
} }
} }
closedir(DIRECTORY);
if ($has_headers) { if ($has_headers) {
push @{@$project_settings[$T_INCLUDE_PATH]},"-I."; push @{@$project_settings[$T_INCLUDE_PATH]},"-I.";
@ -997,8 +1004,9 @@ sub fix_file_and_directory_names($)
{ {
my $dirname=$_[0]; my $dirname=$_[0];
if (opendir(DIRECTORY, "$dirname")) { my $directory=get_directory_contents($dirname);
foreach my $dentry (readdir DIRECTORY) { foreach my $dentry (@$directory)
{
if ($dentry =~ /^\./ or $dentry eq "CVS") { if ($dentry =~ /^\./ or $dentry eq "CVS") {
next; next;
} }
@ -1036,7 +1044,8 @@ sub fix_file_and_directory_names($)
$new_name =~ s/[ \$]/_/g; $new_name =~ s/[ \$]/_/g;
# And finally, perform the renaming # And finally, perform the renaming
if ($new_name ne $dentry) { if ($new_name ne $dentry)
{
if ($warn) { if ($warn) {
print STDERR "warning: in \"$dirname\", renaming \"$dentry\" to \"$new_name\"\n"; print STDERR "warning: in \"$dirname\", renaming \"$dentry\" to \"$new_name\"\n";
} }
@ -1045,13 +1054,15 @@ sub fix_file_and_directory_names($)
print STDERR " $!\n"; print STDERR " $!\n";
$new_name=$dentry; $new_name=$dentry;
} }
else
{
clear_directory_cache($dirname);
}
} }
if (-d "$dirname/$new_name") { if (-d "$dirname/$new_name") {
fix_file_and_directory_names("$dirname/$new_name"); fix_file_and_directory_names("$dirname/$new_name");
} }
} }
closedir(DIRECTORY);
}
} }