diff options
Diffstat (limited to 't/lib/syslfs.t')
-rw-r--r-- | t/lib/syslfs.t | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/t/lib/syslfs.t b/t/lib/syslfs.t index 4d38a8e779..14a968a88c 100644 --- a/t/lib/syslfs.t +++ b/t/lib/syslfs.t @@ -30,13 +30,15 @@ sub explain { print <<EOM; # # If the lfs (large file support: large meaning larger than two gigabytes) -# tests are skipped or fail, it may mean either that your process is not -# allowed to write large files or that the file system you are running -# the tests on doesn't support large files, or both. You may also need -# to reconfigure your kernel. (This is all very system-dependent.) +# tests are skipped or fail, it may mean either that your process +# (or process group) is not allowed to write large files (resource +# limits) or that the file system you are running the tests on doesn't +# let your user/group have large files (quota) or the filesystem simply +# doesn't support large files. You may even need to reconfigure your kernel. +# (This is all very operating system and site-dependent.) # # Perl may still be able to support large files, once you have -# such a process and such a (file) system. +# such a process, enough quota, and such a (file) system. # EOM } @@ -79,19 +81,27 @@ unless (@s == 13 && # By now we better be sure that we do have sparse files: # if we are not, the following will hog 5 gigabytes of disk. Ooops. +$ENV{LC_ALL} = "C"; + sysopen(BIG, "big", O_WRONLY|O_CREAT|O_TRUNC) or do { warn "sysopen failed: $!\n"; bye }; sysseek(BIG, 5_000_000_000, SEEK_SET); + # The syswrite will fail if there are are filesize limitations (process or fs). -unless(syswrite(BIG, "big") == 3) { - $ENV{LC_ALL} = "C"; +my $syswrite = syswrite(BIG, "big") == 3; +my $close = close BIG if $syswrite; +unless($syswrite && $close) { + unless ($syswrite) { + print "# syswrite failed: $!\n" + } else { + print "# close failed: $!\n" + } if ($! =~/File too large/) { print "1..0\n# writing past 2GB failed\n"; explain(); - bye(); } + bye(); } -close BIG; @s = stat("big"); |