aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2021-10-04 13:28:06 -0700
committerAndres Freund <andres@anarazel.de>2021-10-04 13:28:48 -0700
commitc4465cd09e3ab034ced25e623d5760e9ce437f6c (patch)
tree40ee2b72837cefd8e0fe4ebde0db2ad4beb51c70
parent919c08d909f766bb51c5c617714364a91bb90d9d (diff)
downloadpostgresql-c4465cd09e3ab034ced25e623d5760e9ce437f6c.tar.gz
postgresql-c4465cd09e3ab034ced25e623d5760e9ce437f6c.zip
Fix TestLib::slurp_file() with offset on windows.
3c5b0685b921 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-, like 3c5b0685b921
-rw-r--r--src/test/perl/TestLib.pm36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 8c533453b41..10bf31755e7 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -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";
- }
- $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;
}