From 7bd6a757fb3e108777ca9bfda5985f31aa0ebf58 Mon Sep 17 00:00:00 2001 From: Siep Kroonenberg Date: Fri, 18 Mar 2022 21:42:01 +0000 Subject: diskfree for windows >= 8 git-svn-id: svn://tug.org/texlive/trunk@62794 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/TeXLive/TLUtils.pm | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index 252f2295b08..e3f51b5de97 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -815,6 +815,42 @@ computing the disk space. sub diskfree { my $td = shift; + my ($output, $retval); + if (win32()) { + # the powershell one-liner only works from win8 on. + my @winver = Win32::GetOSVersion(); + if ($winver[1]<=6 && $winver[2]<=1) { + return -1; + } + my $avl; + if ($td =~ /^[a-zA-Z]:/) { + my $drv = substr($td,0,1); + # ea ignore: error action ignore: no output at all + my $cmd = "powershell -nologo -noninteractive -noprofile -command " . + "\"get-psdrive -name $drv -ea ignore |select-object free |format-wide\""; + ($output, $retval) = run_cmd($cmd); + # ignore exit code, just parse the output + my @lines = split(/\r*\n/, $output); + foreach (@lines) { + chomp $_; + if ($_ !~ /^\s*$/) { + $_ =~ s/^\s*//; + $_ =~ s/\s*$//; + $avl = $_; + last; + } + } + if ($avl !~ /^[0-9]+$/) { + return (-1); + } else { + return (int($avl/(1024*1024))); + } + } else { + # maybe UNC drive; do not try to handle this + return -1; + } + } + # now windows case has been taken care of return (-1) if (! $::progs{"df"}); # drop final / $td =~ s!/$!!; @@ -832,7 +868,7 @@ sub diskfree { $td .= "/" if ($td !~ m!/$!); return (-1) if (! -e $td); debug("Checking for free diskspace in $td\n"); - my ($output, $retval) = run_cmd("df -P \"$td\"", POSIXLY_CORRECT => 1); + ($output, $retval) = run_cmd("df -P \"$td\"", POSIXLY_CORRECT => 1); if ($retval == 0) { # Output format should be this: # Filesystem 512-blocks Used Available Capacity Mounted on -- cgit v1.2.3