summaryrefslogtreecommitdiff
path: root/t/op/lfs.t
diff options
context:
space:
mode:
Diffstat (limited to 't/op/lfs.t')
-rw-r--r--t/op/lfs.t21
1 files changed, 15 insertions, 6 deletions
diff --git a/t/op/lfs.t b/t/op/lfs.t
index ae6aac6079..af7853b270 100644
--- a/t/op/lfs.t
+++ b/t/op/lfs.t
@@ -29,13 +29,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
}
@@ -82,15 +84,22 @@ 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";
+
open(BIG, ">big") or do { warn "open failed: $!\n"; bye };
binmode BIG;
seek(BIG, 5_000_000_000, $SEEK_SET);
+
# Either the print or (more likely, thanks to buffering) the close will
# fail if there are are filesize limitations (process or fs).
my $print = print BIG "big";
my $close = close BIG if $print;
unless ($print && $close) {
- $ENV{LC_ALL} = "C";
+ unless ($print) {
+ print "# print failed: $!\n"
+ } else {
+ print "# close failed: $!\n"
+ }
if ($! =~/File too large/) {
print "1..0\n# writing past 2GB failed\n";
explain();