{
char *path = SvPV_nolen(*args);
DWORD access = 0;
- DWORD share = 0;
+ /* CRT uses _SH_DENYNO for open(), this the Win32 equivelent */
+ DWORD share = FILE_SHARE_READ | FILE_SHARE_WRITE;
DWORD create = -1;
DWORD attr = FILE_ATTRIBUTE_NORMAL;
+ if (stricmp(path, "/dev/null")==0)
+ path = "NUL";
if (*mode == '#')
{
/* sysopen - imode is UNIX-like O_RDONLY etc.
SETERRNO(EINVAL,LIB$_INVARG);
return NULL;
}
- if (!(access & GENERIC_WRITE))
- share = FILE_SHARE_READ;
h = CreateFile(path,access,share,NULL,create,attr,NULL);
if (h == INVALID_HANDLE_VALUE)
{
if (GetLastError() != NO_ERROR)
{
PerlIOBase(f)->flags |= PERLIO_F_ERROR;
+ PerlIO_save_errno(f);
return -1;
}
else
else
{
PerlIOBase(f)->flags |= PERLIO_F_ERROR;
+ PerlIO_save_errno(f);
return -1;
}
}