mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Fix TestLib::slurp_file() with offset on windows.
3c5b0685b9
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: Andrew Dunstan <andrew@dunslane.net> Author: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/20211003173038.64mmhgxctfqn7wl6@alap3.anarazel.de Backpatch: 9.6-, like3c5b0685b9
This commit is contained in:
parent
8162464a25
commit
2f74db1236
@ -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
|
||||
@ -492,33 +492,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";
|
||||
}
|
||||
$contents = <$fh>;
|
||||
CloseHandle($fHandle)
|
||||
or croak "could not close \"$filename\": $^E\n";
|
||||
}
|
||||
|
||||
if (defined($offset))
|
||||
{
|
||||
seek($fh, $offset, SEEK_SET)
|
||||
or croak "could not seek \"$filename\": $!";
|
||||
}
|
||||
|
||||
$contents = <$fh>;
|
||||
close $fh;
|
||||
|
||||
$contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
|
||||
return $contents;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user