diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 8d802245..c3c522c0 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,9 @@ +2002-01-15 Marcus Brinkmann + + * trustlist.c: Various source clean ups. + (my_isdigit): Removed. + (gpgme_op_trustlist_end): New function. + 2002-01-13 Marcus Brinkmann * gpgme.c: Various source clean ups, like renaming C to CTX where diff --git a/gpgme/trustlist.c b/gpgme/trustlist.c index 664962a4..11acbf54 100644 --- a/gpgme/trustlist.c +++ b/gpgme/trustlist.c @@ -1,6 +1,6 @@ /* trustlist.c - key listing * Copyright (C) 2000 Werner Koch (dd9jn) - * Copyright (C) 2001 g10 Code GmbH + * Copyright (C) 2001, 2002 g10 Code GmbH * * This file is part of GPGME. * @@ -30,46 +30,44 @@ #include "context.h" #include "ops.h" -#define my_isdigit(a) ( (a) >='0' && (a) <= '9' ) - -struct gpgme_trust_item_s { - int level; - char keyid[16+1]; - int type; - char ot[2]; - char val[2]; - char *name; +struct gpgme_trust_item_s +{ + int level; + char keyid[16+1]; + int type; + char ot[2]; + char val[2]; + char *name; }; static GpgmeTrustItem trust_item_new (void) { - GpgmeTrustItem item; + GpgmeTrustItem item; - item = xtrycalloc (1, sizeof *item); - return item; + item = xtrycalloc (1, sizeof *item); + return item; } - static void -trustlist_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args ) +trustlist_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args) { - if ( ctx->out_of_core ) - return; + if (ctx->out_of_core) + return; - switch (code) { - case STATUS_EOF: - break; + switch (code) + { + case STATUS_EOF: + break; - default: - break; + default: + break; } } - /* * This handler is used to parse the output of --list-trust-path: * Format: @@ -84,76 +82,83 @@ trustlist_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args ) * NAME ist the username and only printed on U lines */ static void -trustlist_colon_handler ( GpgmeCtx ctx, char *line ) +trustlist_colon_handler (GpgmeCtx ctx, char *line) { - char *p, *pend; - int field = 0; - GpgmeTrustItem item = NULL; - struct trust_queue_item_s *q, *q2; + char *p, *pend; + int field = 0; + GpgmeTrustItem item = NULL; + struct trust_queue_item_s *q, *q2; - if ( ctx->out_of_core ) - return; - if (!line) - return; /* EOF */ + if (ctx->out_of_core) + return; + if (!line) + return; /* EOF */ - for (p = line; p; p = pend) { - field++; - pend = strchr (p, ':'); - if (pend) - *pend++ = 0; + for (p = line; p; p = pend) + { + field++; + pend = strchr (p, ':'); + if (pend) + *pend++ = 0; - switch (field) { - case 1: /* level */ - q = xtrymalloc ( sizeof *q ); - if ( !q ) { - ctx->out_of_core = 1; - return; + switch (field) + { + case 1: /* level */ + q = xtrymalloc (sizeof *q); + if (!q) + { + ctx->out_of_core = 1; + return; } - q->next = NULL; - q->item = item = trust_item_new (); - if (!q->item) { - xfree (q); - ctx->out_of_core = 1; - return; + q->next = NULL; + q->item = item = trust_item_new (); + if (!q->item) + { + xfree (q); + ctx->out_of_core = 1; + return; } - /* fixme: lock queue, keep a tail pointer */ - if ( !(q2 = ctx->trust_queue) ) - ctx->trust_queue = q; - else { - for ( ; q2->next; q2 = q2->next ) - ; - q2->next = q; + /* fixme: lock queue, keep a tail pointer */ + q2 = ctx->trust_queue; + if (!q2) + ctx->trust_queue = q; + else + { + while (q2->next) + q2 = q2->next; + q2->next = q; } - /* fixme: unlock queue */ - item->level = atoi (p); - break; - case 2: /* long keyid */ - if ( strlen (p) == DIM(item->keyid)-1 ) - strcpy (item->keyid, p); - break; - case 3: /* type */ - item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0; - break; - case 5: /* owner trust */ - item->ot[0] = *p; - item->ot[1] = 0; - break; - case 6: /* validity */ - item->val[0] = *p; - item->val[1] = 0; - break; - case 9: /* user ID */ - item->name = xtrystrdup (p); - if (!item->name) - ctx->out_of_core = 1; - break; + /* fixme: unlock queue */ + item->level = atoi (p); + break; + case 2: /* long keyid */ + if (strlen (p) == DIM(item->keyid) - 1) + strcpy (item->keyid, p); + break; + case 3: /* type */ + item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0; + break; + case 5: /* owner trust */ + item->ot[0] = *p; + item->ot[1] = 0; + break; + case 6: /* validity */ + item->val[0] = *p; + item->val[1] = 0; + break; + case 9: /* user ID */ + item->name = xtrystrdup (p); + if (!item->name) + ctx->out_of_core = 1; + break; } } - if (field) - ctx->key_cond = 1; + if (field) + ctx->key_cond = 1; } + GpgmeError gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level) { @@ -173,7 +178,7 @@ gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level) _gpgme_engine_release (ctx->engine); ctx->engine = NULL; } - + err = _gpgme_engine_new (ctx->use_cms ? GPGME_PROTOCOL_CMS : GPGME_PROTOCOL_OpenPGP, &ctx->engine); if (err) @@ -191,114 +196,140 @@ gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level) err = _gpgme_engine_start (ctx->engine, ctx); leave: - if (err) { - ctx->pending = 0; - _gpgme_engine_release (ctx->engine); - ctx->engine = NULL; - } + if (err) + { + ctx->pending = 0; + _gpgme_engine_release (ctx->engine); + ctx->engine = NULL; + } return err; } GpgmeError -gpgme_op_trustlist_next ( GpgmeCtx c, GpgmeTrustItem *r_item ) +gpgme_op_trustlist_next (GpgmeCtx c, GpgmeTrustItem *r_item) { - struct trust_queue_item_s *q; + struct trust_queue_item_s *q; - if (!r_item) - return mk_error (Invalid_Value); - *r_item = NULL; - if (!c) - return mk_error (Invalid_Value); - if ( !c->pending ) - return mk_error (No_Request); - if ( c->out_of_core ) - return mk_error (Out_Of_Core); + if (!r_item) + return mk_error (Invalid_Value); + *r_item = NULL; + if (!c) + return mk_error (Invalid_Value); + if (!c->pending) + return mk_error (No_Request); + if (c->out_of_core) + return mk_error (Out_Of_Core); - if ( !c->trust_queue ) { - _gpgme_wait_on_condition (c, 1, &c->key_cond ); - if ( c->out_of_core ) - return mk_error (Out_Of_Core); - if ( !c->key_cond ) - return mk_error (EOF); - c->key_cond = 0; - assert ( c->trust_queue ); + if (!c->trust_queue) + { + _gpgme_wait_on_condition (c, 1, &c->key_cond); + if (c->out_of_core) + return mk_error (Out_Of_Core); + if (!c->key_cond) + return mk_error (EOF); + c->key_cond = 0; + assert (c->trust_queue); } - q = c->trust_queue; - c->trust_queue = q->next; + q = c->trust_queue; + c->trust_queue = q->next; - *r_item = q->item; - xfree (q); - return 0; + *r_item = q->item; + xfree (q); + return 0; +} + + +/** + * gpgme_op_trustlist_end: + * @c: Context + * + * Ends the trustlist operation and allows to use the context for some + * other operation next. + **/ +GpgmeError +gpgme_op_trustlist_end (GpgmeCtx ctx) +{ + if (!ctx) + return mk_error (Invalid_Value); + if (!ctx->pending) + return mk_error (No_Request); + if (ctx->out_of_core) + return mk_error (Out_Of_Core); + + ctx->pending = 0; + return 0; } void -gpgme_trust_item_release ( GpgmeTrustItem item ) +gpgme_trust_item_release (GpgmeTrustItem item) { - if (!item) - return; - xfree (item->name); - xfree (item); + if (!item) + return; + xfree (item->name); + xfree (item); } const char * -gpgme_trust_item_get_string_attr ( GpgmeTrustItem item, GpgmeAttr what, - const void *reserved, int idx ) +gpgme_trust_item_get_string_attr (GpgmeTrustItem item, GpgmeAttr what, + const void *reserved, int idx) { - const char *val = NULL; + const char *val = NULL; - if (!item) - return NULL; - if (reserved) - return NULL; - if (idx) - return NULL; + if (!item) + return NULL; + if (reserved) + return NULL; + if (idx) + return NULL; - switch (what) { - case GPGME_ATTR_KEYID: - val = item->keyid; - break; - case GPGME_ATTR_OTRUST: - val = item->ot; - break; - case GPGME_ATTR_VALIDITY: - val = item->val; - break; - case GPGME_ATTR_USERID: - val = item->name; - break; - default: - break; + switch (what) + { + case GPGME_ATTR_KEYID: + val = item->keyid; + break; + case GPGME_ATTR_OTRUST: + val = item->ot; + break; + case GPGME_ATTR_VALIDITY: + val = item->val; + break; + case GPGME_ATTR_USERID: + val = item->name; + break; + default: + break; } - return val; + return val; } int -gpgme_trust_item_get_int_attr ( GpgmeTrustItem item, GpgmeAttr what, - const void *reserved, int idx ) +gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what, + const void *reserved, int idx) { - int val = 0; + int val = 0; + + if (!item) + return 0; + if (reserved) + return 0; + if (idx) + return 0; - if (!item) - return 0; - if (reserved) - return 0; - if (idx) - return 0; - - switch (what) { - case GPGME_ATTR_LEVEL: - val = item->level; - break; - case GPGME_ATTR_TYPE: - val = item->type; - break; - default: - break; + switch (what) + { + case GPGME_ATTR_LEVEL: + val = item->level; + break; + case GPGME_ATTR_TYPE: + val = item->type; + break; + default: + break; } - return val; + return val; }