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.
This commit is contained in:
Andrew Dunstan 2020-12-15 10:00:18 -05:00
parent 706d84fe70
commit bf88c6d602
1 changed files with 23 additions and 4 deletions

View File

@ -79,6 +79,11 @@ BEGIN
# Must be set early # Must be set early
$windows_os = $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys'; $windows_os = $Config{osname} eq 'MSWin32' || $Config{osname} eq 'msys';
if ($windows_os)
{
require Win32API::File;
Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle));
}
} }
INIT INIT
@ -256,10 +261,24 @@ sub slurp_file
{ {
my ($filename) = @_; my ($filename) = @_;
local $/; local $/;
open(my $in, '<', $filename) my $contents;
or die "could not read \"$filename\": $!"; if ($Config{osname} ne 'MSWin32')
my $contents = <$in>; {
close $in; 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'; $contents =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
return $contents; return $contents;
} }