{
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
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;
}