diff options
Diffstat (limited to 'src/assuan-inquire.c')
-rw-r--r-- | src/assuan-inquire.c | 40 |
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; } |