msvcrt-A10: _dup2

Jaco Greeff jaco at puxedo.org
Mon Nov 4 06:42:17 CST 2002


This patch in the msvcrt-A?? series implements the _dup2 function which 
allows for the duplication of a file descriptor into another one.

License:
LGPL

Changelog:
* dlls/msvcrt/file.c, dlls/msvcrt/msvcrt.spec: Jaco Greeff <jaco at puxedo.org>
- Implement the _dup2 function to duplicate a file descriptor into 
another one

--[ inline patch ]--

diff -aurN msvcrt-A09/dlls/msvcrt/file.c msvcrt-A10/dlls/msvcrt/file.c
--- msvcrt-A09/dlls/msvcrt/file.c	Mon Nov  4 14:07:29 2002
+++ msvcrt-A10/dlls/msvcrt/file.c	Mon Nov  4 14:34:28 2002
@@ -718,6 +718,46 @@
  }

  /*********************************************************************
+ *      _dup2 (MSVCRT.@)
+ */
+int _dup2(int fd1, int fd2)
+{
+    HANDLE hand = msvcrt_fdtoh(fd1);
+
+    TRACE("(fd1 == %d, fd2 == %d)\n", fd1, fd2);
+
+    /* Make sure that the handle for fd1 is valid and
+     * that fd2 is a valid file descriptor
+     */
+    if (hand == INVALID_HANDLE_VALUE)
+    {
+        TRACE("Invalid fd == %d, no associated handle\n", fd1);
+        return -1;
+    }
+    else if ((fd2 < 0) || (fd2 >= MSVCRT_fdend))
+    {
+        TRACE("Invalid fd == %d\n", fd2);
+        return -1;
+    }
+
+    /* Close the file associated with fd2, before
+     * assigning it another value from fd1
+     */
+    _close(fd2);
+
+    /* Duplicate the file handle and flags for fd2,
+     * to allow us to have access to the same file as
+     * per the original fd1
+     */
+    MSVCRT_handles[fd2] = MSVCRT_handles[fd1];
+    MSVCRT_flags[fd2] = MSVCRT_flags[fd1];
+    MSVCRT_files[fd2] = NULL;
+    MSVCRT_tempfiles[fd2] = NULL;
+
+    return 0;
+}
+
+/*********************************************************************
   *		_wfdopen (MSVCRT.@)
   */
  MSVCRT_FILE* _wfdopen(int fd, const WCHAR *mode)
diff -aurN msvcrt-A09/dlls/msvcrt/msvcrt.spec 
msvcrt-A10/dlls/msvcrt/msvcrt.spec
--- msvcrt-A09/dlls/msvcrt/msvcrt.spec	Mon Nov  4 14:06:43 2002
+++ msvcrt-A10/dlls/msvcrt/msvcrt.spec	Mon Nov  4 14:22:34 2002
@@ -197,7 +197,7 @@
  @ stub _daylight
  @ stub _dstbias
  @ cdecl _dup(long) _dup
-@ stub _dup2 #(long long)
+@ cdecl _dup2(long long) _dup2
  @ cdecl _ecvt( double long ptr ptr) ecvt
  @ cdecl _endthread () _endthread
  @ cdecl _endthreadex(long) _endthreadex




More information about the wine-patches mailing list