From 03e4d23263b0403a1e4007b74fc4e9c511cd54a8 Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Wed, 9 Dec 2015 18:59:03 +0100 Subject: [PATCH] [perl #126834] Cygwin cygdrive prefix test * t/lib/cygwin.t: Use the /proc virtual filesystem to determine the cygdrive prefix. If that isn't available, fall back to using the cygpath executable instead of parsing the output from df or mount for older Cygwin. That fallback can fail if C:\ is manually mounted someplace else, but the former code had the same problem. --- t/lib/cygwin.t | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/t/lib/cygwin.t b/t/lib/cygwin.t index a619e40..ba86170 100644 --- a/t/lib/cygwin.t +++ b/t/lib/cygwin.t @@ -52,18 +52,16 @@ is(Cygwin::mount_flags("/cygdrive") =~ /,cygdrive/, 1, "check cygdrive mount_fl # Cygdrive mount prefix my @flags = split(/,/, Cygwin::mount_flags('/cygdrive')); my $prefix = pop(@flags); -ok($prefix, "cygdrive mount prefix = " . (($prefix) ? $prefix : '')); -chomp(my $prefix2 = `df -a | grep -i '^c: ' | cut -d% -f2 | xargs`); -# we get something like "C: - - - - /cygdrive" if this isn't the entry -# df displays free space info for -$prefix2 =~ s/.* //; -$prefix2 =~ s/\/c$//i; -SKIP: -{ - $prefix2 - or skip("No C: entry found in df output", 1); - is($prefix, $prefix2, 'cygdrive mount prefix'); +ok($prefix, "cygdrive mount prefix = " . (($prefix) ? $prefix : '')); +my $prefix2 = readlink "/proc/cygdrive"; +unless ($prefix2) { + # fallback to old Cygwin, the drive need not actually exist, so + # this will always work (but might return the wrong prefix if the + # user re-mounted C:\ + chomp($prefix2 = `cygpath C:`); + $prefix2 = substr($prefix2, 0, -1-(length($prefix2)>2)); } +is($prefix, $prefix2, 'cygdrive mount prefix2 = ' . $prefix2); my @mnttbl = Cygwin::mount_table(); ok(@mnttbl > 0, "non empty mount_table"); -- 1.8.3.1