msvcrt: Free fd entries with incorrect HANDLE value.
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index ecbec34..90e0d80 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -797,18 +797,15 @@
LOCK_FILES();
hand = msvcrt_fdtoh(fd);
TRACE(":fd (%d) handle (%p)\n",fd,hand);
- if (hand == INVALID_HANDLE_VALUE)
+ if (!msvcrt_is_valid_fd(fd)) {
ret = -1;
- else if (!CloseHandle(hand))
- {
- WARN(":failed-last error (%d)\n",GetLastError());
- msvcrt_set_errno(GetLastError());
- ret = -1;
- }
- else
- {
+ } else {
msvcrt_free_fd(fd);
- ret = 0;
+ ret = CloseHandle(hand) ? 0 : -1;
+ if (ret) {
+ WARN(":failed-last error (%d)\n",GetLastError());
+ msvcrt_set_errno(GetLastError());
+ }
}
UNLOCK_FILES();
TRACE(":ok\n");