git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8162464)
Fix TestLib::slurp_file() with offset on windows.
Mon, 4 Oct 2021 20:28:06 +0000 (13:28 -0700)
Mon, 4 Oct 2021 20:28:06 +0000 (13:28 -0700)
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


diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 15f4e6f56e340844b6909088ba0e698c29cb88ff..06aae1760ebf938f9b3adb6ec4f9962a2daeaecb 100644 (file)
--- 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;
}
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /