[CRT] Update file descriptor handling to match Wine (5/7). CORE-14504
authorThomas Faber <thomas.faber@reactos.org>
Sun, 25 Mar 2018 15:02:53 +0000 (17:02 +0200)
committerThomas Faber <thomas.faber@reactos.org>
Mon, 26 Mar 2018 11:00:39 +0000 (13:00 +0200)
Import Wine commits by Piotr Caban:
86baccc9ae9 msvcrt: Get rid of fdtoh helper.
bd6eaf918c5 msvcrt: Get rid of is_valid_fd helper.

sdk/lib/crt/stdio/file.c

index 329bf96..4bdf91b 100644 (file)
@@ -221,31 +221,6 @@ static inline FILE* msvcrt_get_file(int i)
     return &ret->file;
 }
 
-static inline BOOL is_valid_fd(int fd)
-{
-    return fd >= 0 && fd < fdend && (get_ioinfo_nolock(fd)->wxflag & WX_OPEN);
-}
-
-/* INTERNAL: Get the HANDLE for a fd
- * This doesn't lock the table, because a failure will result in
- * INVALID_HANDLE_VALUE being returned, which should be handled correctly.  If
- * it returns a valid handle which is about to be closed, a subsequent call
- * will fail, most likely in a sane way.
- */
-/*static*/ HANDLE fdtoh(int fd)
-{
-  if (!is_valid_fd(fd))
-  {
-    WARN(":fd (%d) - no handle!\n",fd);
-    *__doserrno() = 0;
-    *_errno() = EBADF;
-    return INVALID_HANDLE_VALUE;
-  }
-  //if (get_ioinfo_nolock(fd)->handle == INVALID_HANDLE_VALUE)
-      //FIXME("returning INVALID_HANDLE_VALUE for %d\n", fd);
-  return get_ioinfo_nolock(fd)->handle;
-}
-
 /* INTERNAL: free a file entry fd */
 static void msvcrt_free_fd(int fd)
 {
@@ -383,7 +358,7 @@ static FILE* msvcrt_alloc_fp(void)
 static int msvcrt_init_fp(FILE* file, int fd, unsigned stream_flags)
 {
   TRACE(":fd (%d) allocating FILE*\n",fd);
-  if (!is_valid_fd(fd))
+  if (!(get_ioinfo_nolock(fd)->wxflag & WX_OPEN))
   {
     WARN(":invalid fd %d\n",fd);
     *__doserrno() = 0;
@@ -1581,9 +1556,11 @@ int CDECL _fileno(FILE* file)
  */
 intptr_t CDECL _get_osfhandle(int fd)
 {
-  HANDLE hand = fdtoh(fd);
+  HANDLE hand = get_ioinfo_nolock(fd)->handle;
   TRACE(":fd (%d) handle (%p)\n",fd,hand);
 
+  if(hand == INVALID_HANDLE_VALUE)
+      *_errno() = EBADF;
   return (intptr_t)hand;
 }