From: Andrew Dunstan Date: Tue, 15 Dec 2020 15:00:18 +0000 (-0500) Subject: Use native methods to open input in TestLib::slurp_file on Windows. X-Git-Tag: REL9_5_25~42 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=da7edca4630c5bcf7c0f0f5819ab6fb020d3c845;p=postgresql.git Use native methods to open input in TestLib::slurp_file on Windows. This is a backport of commits 114541d58e and 6f59826f0 to the remaining live branches. --- diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index b606e1b173f..6dbf3e6fc3b 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -44,7 +44,17 @@ use SimpleTee; use Test::More; -our $windows_os = $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys'; +our $windows_os; + +BEGIN +{ + $windows_os = $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys'; + if ($windows_os) + { + require Win32API::File; + Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle)); + } +} # Open log file. For each test, the log file name uses the name of the # file launching this module, without the .pl suffix. @@ -277,10 +287,24 @@ sub slurp_file { my ($filename) = @_; local $/; - open(my $in, '<', $filename) - or die "could not read \"$filename\": $!"; - my $contents = <$in>; - close $in; + my $contents; + if ($Config{osname} ne 'MSWin32') + { + open(my $in, '<', $filename) + or die "could not read \"$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') + or die "could not read \"$filename\": $^E\n"; + $contents = <$fh>; + CloseHandle($fHandle) + or die "could not close \"$filename\": $^E\n"; + } $contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys'; return $contents; }