summaryrefslogtreecommitdiff
path: root/Master/tlpkg/TeXLive
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/TeXLive')
-rw-r--r--Master/tlpkg/TeXLive/TLUtils.pm27
1 files changed, 25 insertions, 2 deletions
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm
index ba48ed0586e..7e158279d46 100644
--- a/Master/tlpkg/TeXLive/TLUtils.pm
+++ b/Master/tlpkg/TeXLive/TLUtils.pm
@@ -51,6 +51,7 @@ C<TeXLive::TLUtils> -- utilities used in the TeX Live infrastructure
TeXLive::TLUtils::basename($path);
TeXLive::TLUtils::dirname_and_basename($path);
TeXLive::TLUtils::dir_writable($path);
+ TeXLive::TLUtils::dir_creatable($path);
TeXLive::TLUtils::mkdirhier($path);
TeXLive::TLUtils::rmtree($root, $verbose, $safe);
TeXLive::TLUtils::copy($file, $target_dir);
@@ -113,6 +114,7 @@ BEGIN {
&basename
&dirname_and_basename
&dir_writable
+ &dir_creatable
&mkdirhier
&rmtree
&copy
@@ -522,6 +524,27 @@ sub dirname_and_basename {
}
+=item C<dir_creatable($path)>
+
+Tests whether its argument is a directory where we can create a directory.
+
+=cut
+
+sub dir_creatable {
+ $path=shift;
+ return 0 unless -d $path;
+ $path =~ s!\\!/!g if win32;
+ $path =~ s!/$!!g;
+ my $i = 0;
+ while (-e $path . "/" . $i) { $i++; }
+ my $d = $path."/".$i;
+ return 0 unless mkdir $d;
+ return 0 unless -d $d;
+ rmdir $d;
+ return 1;
+}
+
+
=item C<dir_writable($path)>
Tests whether its argument is writable by trying to write to
@@ -2592,8 +2615,8 @@ sub texdir_check {
my ($texdir) = shift; # PATH/texlive/2008
my $texdirparent = dirname($texdir); # PATH/texlive
my $texdirpparent = dirname($texdirparent); # PATH
- if ( (dir_writable($texdirpparent)) ||
- ( (-d $texdirparent) && (dir_writable($texdirparent)) ) ||
+ if ( (dir_creatable($texdirpparent)) ||
+ ( (-d $texdirparent) && (dir_creatable($texdirparent)) ) ||
( (-d $texdir) && (dir_writable($texdir)) ) ) {
return 1;
}