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:33:12 -0700
commit0a134c860fc116a3f1eed71fbdcf48b66221b456 (patch)
treec2049243491f3777491b611380982a35bac427b1
parentd0b0b70dc2a60d68f97af5264fe432e245eea3a5 (diff)
downloadpostgresql-0a134c860fc116a3f1eed71fbdcf48b66221b456.tar.gz
postgresql-0a134c860fc116a3f1eed71fbdcf48b66221b456.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 a5c7ae71495..1231c10fc3c 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -96,7 +96,7 @@ BEGIN
if ($windows_os)
{
require Win32API::File;
- Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle setFilePointer));
+ Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle));
}
}
@@ -272,33 +272,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 die "could not read \"$filename\": $!";
- if (defined($offset))
- {
- seek($in, $offset, SEEK_SET)
- or die "could not seek \"$filename\": $!";
- }
- $contents = <$in>;
- close $in;
}
else
{
my $fHandle = createFile($filename, "r", "rwd")
or die "could not open \"$filename\": $^E";
- OsFHandleOpen(my $fh = IO::Handle->new(), $fHandle, 'r')
+ OsFHandleOpen($fh = IO::Handle->new(), $fHandle, 'r')
or die "could not read \"$filename\": $^E\n";
- if (defined($offset))
- {
- setFilePointer($fh, $offset, qw(FILE_BEGIN))
- or die "could not seek \"$filename\": $^E\n";
- }
- $contents = <$fh>;
- CloseHandle($fHandle)
- or die "could not close \"$filename\": $^E\n";
}
+
+ if (defined($offset))
+ {
+ seek($fh, $offset, SEEK_SET)
+ or die "could not seek \"$filename\": $!";
+ }
+
+ $contents = <$fh>;
+ close $fh;
+
$contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
return $contents;
}