Module: wine Branch: master Commit: 44b49f1a40f07f22209bd09eb415da233d8704ca URL: https://source.winehq.org/git/wine.git/?a=commit;h=44b49f1a40f07f22209bd09eb...
Author: Daniel Lehman dlehman@esri.com Date: Tue Oct 29 09:46:31 2019 -0700
msvcrt: Set errno in _lseeki64.
Signed-off-by: Daniel Lehman dlehman@esri.com Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msvcrt/file.c | 1 + dlls/msvcrt/tests/file.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 9075b432ff..825d442bfa 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -1265,6 +1265,7 @@ __int64 CDECL MSVCRT__lseeki64(int fd, __int64 offset, int whence)
if (info->handle == INVALID_HANDLE_VALUE) { + *MSVCRT__errno() = MSVCRT_EBADF; release_ioinfo(info); return -1; } diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index 0ed59e347e..97d81abd00 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -2583,6 +2583,31 @@ static void test__creat(void) p__set_fmode(old_fmode); }
+static void test_lseek(void) +{ + int fd; + char testdata[4] = {'a', '\n', 'b', '\n'}; + + errno = 0xdeadbeef; + ok(_lseek(-42, 0, SEEK_SET) == -1, "expected failure\n"); + ok(errno == EBADF, "errno = %d\n", errno); + + fd = _creat("_creat.tst", _S_IWRITE); + ok(fd > 0, "_creat failed\n"); + _write(fd, testdata, 4); + + errno = 0xdeadbeef; + ok(_lseek(fd, 0, 42) == -1, "expected failure\n"); + ok(errno == EINVAL, "errno = %d\n", errno); + + errno = 0xdeadbeef; + ok(_lseek(fd, -42, SEEK_SET) == -1, "expected failure\n"); + ok(errno == EINVAL, "errno = %d\n", errno); + + _close(fd); + DeleteFileA("_creat.tst"); +} + START_TEST(file) { int arg_c; @@ -2654,6 +2679,7 @@ START_TEST(file) test_write_flush(); test_close(); test__creat(); + test_lseek();
/* Wait for the (_P_NOWAIT) spawned processes to finish to make sure the report * file contains lines in the correct order