aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/wait.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/wait.c')
-rw-r--r--gpgme/wait.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/gpgme/wait.c b/gpgme/wait.c
index 79f3ca7d..c73f4868 100644
--- a/gpgme/wait.c
+++ b/gpgme/wait.c
@@ -332,9 +332,9 @@ struct tag
int idx;
};
-void *
+GpgmeError
_gpgme_add_io_cb (void *data, int fd, int dir,
- GpgmeIOCb fnc, void *fnc_data)
+ GpgmeIOCb fnc, void *fnc_data, void **r_tag)
{
GpgmeError err;
fd_table_t fdt = (fd_table_t) (data ? data : &fdt_global);
@@ -344,9 +344,10 @@ _gpgme_add_io_cb (void *data, int fd, int dir,
assert (fdt);
assert (fnc);
+ *r_tag = NULL;
tag = xtrymalloc (sizeof *tag);
if (!tag)
- return NULL;
+ return mk_error (Out_Of_Core);
tag->fdt = fdt;
/* Allocate a structure to hold info about the handler. */
@@ -354,7 +355,7 @@ _gpgme_add_io_cb (void *data, int fd, int dir,
if (!item)
{
xfree (tag);
- return NULL;
+ return mk_error (Out_Of_Core);
}
item->dir = dir;
item->handler = fnc;
@@ -365,11 +366,11 @@ _gpgme_add_io_cb (void *data, int fd, int dir,
{
xfree (tag);
xfree (item);
- errno = ENOMEM;
- return 0;
+ return mk_error (Out_Of_Core);
}
-
- return tag;
+
+ *r_tag = tag;
+ return 0;
}
void