Commit c4465cd0 authored by Andres Freund's avatar Andres Freund

Fix TestLib::slurp_file() with offset on windows.

3c5b0685 used setFilePointer() to set the position of the filehandle, but
passed the wrong filehandle, always leaving the position at 0. Instead of just
fixing that, remove use of setFilePointer(), we have a perl fd at this point,
so we can just use perl's seek().

Additionally, the perl filehandle wasn't closed, just the windows filehandle.
Reviewed-By: default avatarAndrew Dunstan <andrew@dunslane.net>
Author: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20211003173038.64mmhgxctfqn7wl6@alap3.anarazel.de
Backpatch: 9.6-, like 3c5b0685
parent 919c08d9
......@@ -149,7 +149,7 @@ BEGIN
{
require Win32API::File;
Win32API::File->import(
qw(createFile OsFHandleOpen CloseHandle setFilePointer));
qw(createFile OsFHandleOpen CloseHandle));
}
# Specifies whether to use Unix sockets for test setups. On
......@@ -472,33 +472,33 @@ sub slurp_file
my ($filename, $offset) = @_;
local $/;
my $contents;
my $fh;
# On windows open file using win32 APIs, to allow us to set the
# FILE_SHARE_DELETE flag ("d" below), otherwise other accesses to the file
# may fail.
if ($Config{osname} ne 'MSWin32')
{
open(my $in, '<', $filename)
open($fh, '<', $filename)
or croak "could not read \"$filename\": $!";
if (defined($offset))
{
seek($in, $offset, SEEK_SET)
or croak "could not seek \"$filename\": $!";
}
$contents = <$in>;
close $in;
}
else
{
my $fHandle = createFile($filename, "r", "rwd")
or croak "could not open \"$filename\": $^E";
OsFHandleOpen(my $fh = IO::Handle->new(), $fHandle, 'r')
OsFHandleOpen($fh = IO::Handle->new(), $fHandle, 'r')
or croak "could not read \"$filename\": $^E\n";
}
if (defined($offset))
{
setFilePointer($fh, $offset, qw(FILE_BEGIN))
or croak "could not seek \"$filename\": $^E\n";
seek($fh, $offset, SEEK_SET)
or croak "could not seek \"$filename\": $!";
}
$contents = <$fh>;
CloseHandle($fHandle)
or croak "could not close \"$filename\": $^E\n";
}
close $fh;
$contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
return $contents;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment