summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund2021-10-04 20:28:06 +0000
committerAndres Freund2021-10-04 20:28:06 +0000
commit2f74db1236fe83e6665e5b0ddad4454c69495614 (patch)
tree028bdc198942c3a87231d5308eaa6e6b60b8c747
parent8162464a25e5314e753c580389f76a9b7f69445b (diff)
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 <[email protected]> Author: Andres Freund <[email protected]> Discussion: https://postgr.es/m/[email protected] 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 15f4e6f56e3..06aae1760eb 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
@@ -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;
}