aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-inquire.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/assuan-inquire.c')
-rw-r--r--src/assuan-inquire.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/assuan-inquire.c b/src/assuan-inquire.c
index d9d72be..94c72ef 100644
--- a/src/assuan-inquire.c
+++ b/src/assuan-inquire.c
@@ -1,5 +1,5 @@
/* assuan-inquire.c - handle inquire stuff
- * Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ * Copyright (C) 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
*
* This file is part of Assuan.
*
@@ -310,15 +310,20 @@ _assuan_inquire_ext_cb (assuan_context_t ctx)
return 0;
leave:
- if (mb)
- {
- *(ctx->inquire_r_buffer) = get_membuf (mb, ctx->inquire_r_buffer_len);
- if (!*(ctx->inquire_r_buffer))
- rc = _assuan_error (ASSUAN_Out_Of_Core);
- free_membuf (mb);
- free (mb);
- }
- (ctx->inquire_cb) (ctx->inquire_cb_data, rc);
+ {
+ size_t buf_len = 0;
+ unsigned char *buf = NULL;
+
+ if (mb)
+ {
+ buf = get_membuf (mb, &buf_len);
+ if (!buf)
+ rc = _assuan_error (ASSUAN_Out_Of_Core);
+ free_membuf (mb);
+ free (mb);
+ }
+ (ctx->inquire_cb) (ctx->inquire_cb_data, rc, buf, buf_len);
+ }
return rc;
}
@@ -326,8 +331,6 @@ _assuan_inquire_ext_cb (assuan_context_t ctx)
* assuan_inquire_ext:
* @ctx: An assuan context
* @keyword: The keyword used for the inquire
- * @r_buffer: Returns an allocated buffer
- * @r_length: Returns the length of this buffer
* @maxlen: If not 0, the size limit of the inquired data.
* @cb: A callback handler which is invoked after the operation completed.
* @cb_data: A user-provided value passed to the callback handler.
@@ -339,9 +342,10 @@ _assuan_inquire_ext_cb (assuan_context_t ctx)
* Return value: 0 on success or an ASSUAN error code
**/
assuan_error_t
-assuan_inquire_ext (assuan_context_t ctx, const char *keyword,
- unsigned char **r_buffer, size_t *r_length, size_t maxlen,
- int (*cb) (void *cb_data, int rc), void *cb_data)
+assuan_inquire_ext (assuan_context_t ctx, const char *keyword, size_t maxlen,
+ int (*cb) (void *cb_data, int rc, unsigned char *buf,
+ size_t len),
+ void *cb_data)
{
assuan_error_t rc;
struct membuf *mb = NULL;
@@ -350,9 +354,7 @@ assuan_inquire_ext (assuan_context_t ctx, const char *keyword,
if (!ctx || !keyword || (10 + strlen (keyword) >= sizeof (cmdbuf)))
return _assuan_error (ASSUAN_Invalid_Value);
- nodataexpected = !r_buffer && !r_length && !maxlen;
- if (!nodataexpected && (!r_buffer || !r_length))
- return _assuan_error (ASSUAN_Invalid_Value);
+ nodataexpected = !maxlen;
if (!ctx->is_server)
return _assuan_error (ASSUAN_Not_A_Server);
if (ctx->in_inquire)
@@ -381,8 +383,6 @@ assuan_inquire_ext (assuan_context_t ctx, const char *keyword,
ctx->inquire_cb = cb;
ctx->inquire_cb_data = cb_data;
ctx->inquire_membuf = mb;
- ctx->inquire_r_buffer = r_buffer;
- ctx->inquire_r_buffer_len = r_length;
return 0;
}