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.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/gpgme/w32-io.c b/gpgme/w32-io.c
index 947bb62e..3b034f65 100644
--- a/gpgme/w32-io.c
+++ b/gpgme/w32-io.c
@@ -55,11 +55,12 @@
#define MAX_READERS 20
#define MAX_WRITERS 20
-static struct {
- int inuse;
- int fd;
- void (*handler)(int,void*);
- void *value;
+static struct
+{
+ int inuse;
+ int fd;
+ _gpgme_close_notify_handler_t handler;
+ void *value;
} notify_table[256];
DEFINE_STATIC_LOCK (notify_table_lock);
@@ -726,8 +727,9 @@ int
_gpgme_io_close ( int fd )
{
int i;
- void (*handler)(int, void*) = NULL;
+ _gpgme_close_notify_handler_t handler = NULL;
void *value = NULL;
+ int really_close = 1;
if ( fd == -1 )
return -1;
@@ -738,7 +740,7 @@ _gpgme_io_close ( int fd )
LOCK (notify_table_lock);
for ( i=0; i < DIM (notify_table); i++ ) {
if (notify_table[i].inuse && notify_table[i].fd == fd) {
- handler = notify_table[i].handler;
+ handler = notify_table[i].handler;
value = notify_table[i].value;
notify_table[i].handler = NULL;
notify_table[i].value = NULL;
@@ -748,9 +750,9 @@ _gpgme_io_close ( int fd )
}
UNLOCK (notify_table_lock);
if (handler)
- handler (fd, value);
+ really_close = handler (fd, value);
- if ( !CloseHandle (fd_to_handle (fd)) ) {
+ if ( really_close && !CloseHandle (fd_to_handle (fd)) ) {
DEBUG2 ("CloseHandle for fd %d failed: ec=%d\n",
fd, (int)GetLastError ());
return -1;
@@ -760,7 +762,8 @@ _gpgme_io_close ( int fd )
}
int
-_gpgme_io_set_close_notify (int fd, void (*handler)(int, void*), void *value)
+_gpgme_io_set_close_notify (int fd, _gpgme_close_notify_handler_t handler,
+ void *value)
{
int i;
@@ -1140,25 +1143,6 @@ _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. */