diff --git a/sm/ChangeLog b/sm/ChangeLog index 94d81d444..b5e5ba264 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,13 @@ +2006-12-20 Marcus Brinkmann + + * base64.c: Add new members READER and WRITER in union U2. + (gpgsm_create_reader): Initialise CTX->u2.reader. + (gpgsm_destroy_reader): Invoke ksba_reader_release. Return early + if CTX is NULL. + (gpgsm_create_writer): Initialise CTX->u2.writer. + (gpgsm_destroy_writer): Invoke ksba_writer_release. Return early + if CTX is NULL. + 2006-12-18 Marcus Brinkmann * fingerprint.c (gpgsm_get_fingerprint): Close MD. diff --git a/sm/base64.c b/sm/base64.c index 37ec9ce35..0c3ebd150 100644 --- a/sm/base64.c +++ b/sm/base64.c @@ -92,6 +92,11 @@ struct base64_context_s { struct reader_cb_parm_s rparm; struct writer_cb_parm_s wparm; } u; + + union { + ksba_reader_t reader; + ksba_writer_t writer; + } u2; }; @@ -568,6 +573,7 @@ gpgsm_create_reader (Base64Context *ctx, return rc; } + (*ctx)->u2.reader = r; *r_reader = r; return 0; } @@ -582,6 +588,10 @@ gpgsm_reader_eof_seen (Base64Context ctx) void gpgsm_destroy_reader (Base64Context ctx) { + if (!ctx) + return; + + ksba_reader_release (ctx->u2.reader); xfree (ctx); } @@ -630,6 +640,7 @@ gpgsm_create_writer (Base64Context *ctx, return rc; } + (*ctx)->u2.writer = w; *r_writer = w; return 0; } @@ -654,5 +665,9 @@ gpgsm_finish_writer (Base64Context ctx) void gpgsm_destroy_writer (Base64Context ctx) { + if (!ctx) + return; + + ksba_writer_release (ctx->u2.writer); xfree (ctx); }