postgres.git / summary / log / commit / refs

commit    cd1b2334b8a2c18f54e7ade408c9133805cae557
Author:   Andres Freund <andres@anarazel.de>
Date:     Mon Oct 04 20:28:06 2021 +0000
First released in: 15.0, 9.6.24, 10.19, 11.14, 12.9, 13.5, 14.1

    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


src/test/perl/TestLib.pm | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 610736aeb5b..2320ead9d58 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -99,7 +99,7 @@ BEGIN if ($windows_os) { require Win32API::File; - Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle setFilePointer)); + Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle)); } } @@ -280,33 +280,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; } [parent: 07873a5dc925]