Make fileno() builtin work on directory handles
[perl.git] / t / io / perlio.t
index 3987a79..8dfac17 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
        skip_all_without_perlio();
 }
 
-plan tests => 46;
+plan tests => 48;
 
 use_ok('PerlIO');
 
@@ -113,6 +113,27 @@ ok(close($utffh));
     }
 }
 
+# fileno() for directory handles, on supported platforms
+SKIP: {
+    opendir my $dh, "io"
+        or die "Huh? Can't open directory 'io' containing this file: $!\n";
+    local $! = 0;
+    my $fd = fileno $dh;
+    my $errno = 0 + $!;
+    closedir $dh
+        or die "Huh? Can't close freshly-opened directory handle: $!\n";
+    if ($Config{d_dirfd} || $Config{d_dir_dd_fd}) {
+        ok(defined $fd, "fileno(DIRHANDLE) is defined under dirfd()")
+            or skip("directory fd was undefined", 1);
+        like($fd, qr/\A\d+\z/a,
+             "fileno(DIRHANDLE) yields non-negative int under dirfd()");
+    }
+    else {
+        ok(!defined $fd, "fileno(DIRHANDLE) is undef when no dirfd()");
+        isnt($errno, 0, "fileno(DIRHANDLE) sets errno when no dirfs()");
+    }
+}
+
 sub find_filename {
     my ($fh, @globs) = @_;
     my ($dev, $inode) = stat $fh;