aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/w32-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/w32-io.c')
-rw-r--r--gpgme/w32-io.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gpgme/w32-io.c b/gpgme/w32-io.c
index fd53a6fb..947bb62e 100644
--- a/gpgme/w32-io.c
+++ b/gpgme/w32-io.c
@@ -1140,6 +1140,25 @@ _gpgme_io_fd2str (char *buf, int buflen, int fd)
return snprintf (buf, buflen, "%d", fd);
}
+
+int
+_gpgme_io_dup (int fd)
+{
+ HANDLE handle = fd_to_handle (fd);
+ HANDLE new_handle = fd_to_handle (fd);
+
+ /* For NT we have to set the sync flag. It seems that the only
+ * way to do it is by duplicating the handle. Tsss.. */
+ if (!DuplicateHandle( GetCurrentProcess(), handle,
+ GetCurrentProcess(), &new_handle,
+ 0, FALSE, DUPLICATE_SAME_ACCESS))
+ {
+ DEBUG1 ("** DuplicateHandle failed: ec=%d\n", (int) GetLastError());
+ }
+
+ return handle_to_fd (new_handle);
+}
+
/* The following interface is only useful for GPGME Glib. */