msvcrt: Fix errno set on write to read-only file.

This commit is contained in:
Piotr Caban 2022-11-02 11:08:02 +01:00 committed by Alexandre Julliard
parent 3fd47b4663
commit 7f5f904cfa
2 changed files with 10 additions and 0 deletions

View file

@ -3590,6 +3590,8 @@ int CDECL _write(int fd, const void* buf, unsigned int count)
TRACE("WriteFile (fd %d, hand %p) failed-last error (%ld)\n", fd,
hand, GetLastError());
msvcrt_set_errno(GetLastError());
if (GetLastError() == ERROR_ACCESS_DENIED)
*_errno() = EBADF;
num_written = -1;
}
@ -3718,6 +3720,8 @@ int CDECL _write(int fd, const void* buf, unsigned int count)
TRACE("WriteFile/WriteConsoleW (fd %d, hand %p) failed-last error (%ld)\n", fd,
hand, GetLastError());
msvcrt_set_errno(GetLastError());
if (GetLastError() == ERROR_ACCESS_DENIED)
*_errno() = EBADF;
release_ioinfo(info);
return -1;
}

View file

@ -311,6 +311,12 @@ static void test_readmode( BOOL ascii_mode )
ok(l == pl+fp,"line 2 ftell got %ld should be %d in %s\n", l, pl+fp, IOMODE);
ok(lstrlenA(buffer) == 2+ao,"line 2 fgets got size %d should be %d in %s\n",
lstrlenA(buffer), 2+ao, IOMODE);
errno = 0xdeadbeef;
_doserrno = 0xdeadbeef;
ok(write(fd, buffer, 1) == -1, "read succeeded on write-only file\n");
ok(errno == EBADF, "errno = %d\n", errno);
ok(_doserrno == ERROR_ACCESS_DENIED, "doserrno = %ld\n", _doserrno);
/* test fread across buffer boundary */
rewind(file);