From c476829aba506ff85d49916810b8a644df928f77 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Tue, 29 Apr 2003 21:53:58 +0000 Subject: [PATCH] doc/ 2003-04-29 Marcus Brinkmann * gpgme.texi (Trust Item Management): Add data members of GpgmeTrustItem type. (Information About Trust Items): Add note about obsoleteness. (Manipulating Trust Items): Add gpgme_trust_item_ref and gpgme_trust_item_unref. gpgme/ 2003-04-29 Marcus Brinkmann * gpgme.h (struct _gpgme_trust_item): New structure. (GpgmeTrustItem): New type. (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes. * context.h (struct trust_queue_item_s): Remove structure. (struct gpgme_context_s): Remove trust_queue member. * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c. * trust-item.c: New file. * trustlist.c: Do not include or , but "gpgme.h". (struct trust_queue_item_s): Change to new type op_data_t. (trust_status_handler): Change first argument to void *. (trust_colon_handler): Likewise. (_gpgme_op_trustlist_event_cb): Use op_data_t type. (gpgme_op_trustlist_start): Use op_data_t and rework error handling. (gpgme_op_trustlist_next): Use op_data_t. (gpgme_trust_item_release): Remove function. (gpgme_trust_item_get_string_attr): Likewise. (gpgme_trust_item_get_int_attr): Likewise. tests/ 2003-04-29 Marcus Brinkmann * gpg/t-trustlist.c: Rewritten. --- NEWS | 12 +++ doc/ChangeLog | 8 ++ doc/gpgme.texi | 51 ++++++++++- gpgme/ChangeLog | 20 ++++ gpgme/Makefile.am | 2 +- gpgme/context.h | 8 -- gpgme/gpgme.h | 77 ++++++++++++---- gpgme/trustlist.c | 198 ++++++++++++---------------------------- tests/ChangeLog | 2 + tests/gpg/t-import.c | 2 +- tests/gpg/t-trustlist.c | 132 ++++++++++++--------------- 11 files changed, 263 insertions(+), 249 deletions(-) diff --git a/NEWS b/NEWS index 352380c..bebd129 100644 --- a/NEWS +++ b/NEWS @@ -97,6 +97,12 @@ Noteworthy changes in version 0.4.1 (unreleased) gpgme_get_sig_string_attr and gpgme_get_sig_key are now deprecated, and gpgme_get_notation is removed. + * GpgmeTrustItem objects have now directly accessible data, so the + gpgme_trust_item_get_string_attr and gpgme_trust_item_get_ulong_attr + accessor functions are deprecated. Also, reference counting is + available through gpgme_trust_item_ref and gpgme_trust_item_unref + (the gpgme_trust_item_release alias for the latter is deprecated). + * Interface changes relative to the 0.4.0 release: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GpgmeIOCb CHANGED: Return type from void to GpgmeError. @@ -147,6 +153,12 @@ gpgme_get_sig_ulong_attr DEPRECATED: Use verify result directly. gpgme_get_sig_string_attr DEPRECATED: Use verify result directly. GPGME_SIG_STAT_* DEPRECATED: Use error value in sig status. gpgme_get_sig_status DEPRECATED: Use verify result directly. +GpgmeTrustItem CHANGED: Now has user accessible data members. +gpgme_trust_item_ref NEW +gpgme_trust_item_unref NEW +gpgme_trust_item_release DEPRECATED: Use gpgme_trust_item_unref. +gpgme_trust_item_get_string_attr DEPRECATED +gpgme_trust_item_get_ulong_attr DEPRECATED ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Noteworthy changes in version 0.4.0 (2002-12-23) diff --git a/doc/ChangeLog b/doc/ChangeLog index 653c216..a743087 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,11 @@ +2003-04-29 Marcus Brinkmann + + * gpgme.texi (Trust Item Management): Add data members of + GpgmeTrustItem type. + (Information About Trust Items): Add note about obsoleteness. + (Manipulating Trust Items): Add gpgme_trust_item_ref and + gpgme_trust_item_unref. + 2003-04-28 Marcus Brinkmann * gpgme.texi (Verify): Rewritten to take into account new and diff --git a/doc/gpgme.texi b/doc/gpgme.texi index a05a0e6..838a262 100644 --- a/doc/gpgme.texi +++ b/doc/gpgme.texi @@ -2256,7 +2256,7 @@ the key @var{key}. @deftypefun void gpgme_key_unref (@w{GpgmeKey @var{key}}) @deftypefunx void gpgme_key_release (@w{GpgmeKey @var{key}}) -The function @code{gpgme_key_ref} releases a reference for the key +The function @code{gpgme_key_unref} releases a reference for the key @var{key}. If this was the last reference, the key will be destroyed and all resources associated to it will be released. @@ -2598,7 +2598,29 @@ started successfully, and @code{GPGME_Invalid_Value} if @var{ctx} or @strong{Caution:} The trust items interface is experimental. @deftp {Data type} GpgmeTrustItem -The @code{GpgmeTrustItem} type is a handle for a trust item. +The @code{GpgmeTrustItem} type is a pointer to a trust item object. +It has the following members: + +@table @code +@item char *keyid +This is a string describing the key to which this trust items belongs. + +@item int type +This is the type of the trust item. A value of 1 refers to a key, a +value of 2 refers to a user ID. + +@item int level +This is the trust level. + +@item char *otrust +The owner trust if @code{type} is 1. + +@item char *val +The calculated validity. + +@item char *name +The user name if @code{type} is 2. +@end table @end deftp @menu @@ -2666,6 +2688,10 @@ operation there was not enough memory available. @cindex trust item, attributes @cindex attributes, of a trust item +The following interfaces are deprecated and only provided for backward +compatibility. Don't use them. They will be removed in a future +version of @acronym{GPGME}. + Trust items have attributes which can be queried using the interfaces below. The attribute identifiers are shared with those for key attributes. @xref{Information About Keys}. @@ -2701,9 +2727,26 @@ or @var{reserved} not @code{NULL}. @subsection Manipulating Trust Items @cindex trust item, manipulation +@deftypefun void gpgme_trust_item_ref (@w{GpgmeTrustItem @var{item}}) +The function @code{gpgme_trust_item_ref} acquires an additional +reference for the trust item @var{item}. +@end deftypefun + +@deftypefun void gpgme_trust_item_unref (@w{GpgmeTrustItem @var{item}}) +The function @code{gpgme_trust_item_unref} releases a reference for +the trust item @var{item}. If this was the last reference, the trust +item will be destroyed and all resources associated to it will be +released. +@end deftypefun + + +The following interface is deprecated and only provided for backward +compatibility. Don't use it. It will be removed in a future version +of @acronym{GPGME}. + @deftypefun void gpgme_trust_item_release (@w{GpgmeTrustItem @var{item}}) -The function @code{gpgme_trust_item_release} destroys a -@code{GpgmeTrustItem} object and releases all associated resources. +The function @code{gpgme_trust_item_release} is an alias for +@code{gpgme_trust_item_unref}. @end deftypefun diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 944dc83..b6399c7 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,5 +1,25 @@ 2003-04-29 Marcus Brinkmann + * gpgme.h (struct _gpgme_trust_item): New structure. + (GpgmeTrustItem): New type. + (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes. + * context.h (struct trust_queue_item_s): Remove structure. + (struct gpgme_context_s): Remove trust_queue member. + * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c. + * trust-item.c: New file. + * trustlist.c: Do not include or , but + "gpgme.h". + (struct trust_queue_item_s): Change to new type op_data_t. + (trust_status_handler): Change first argument to void *. + (trust_colon_handler): Likewise. + (_gpgme_op_trustlist_event_cb): Use op_data_t type. + (gpgme_op_trustlist_start): Use op_data_t and rework error + handling. + (gpgme_op_trustlist_next): Use op_data_t. + (gpgme_trust_item_release): Remove function. + (gpgme_trust_item_get_string_attr): Likewise. + (gpgme_trust_item_get_int_attr): Likewise. + * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR for bad signatures. diff --git a/gpgme/Makefile.am b/gpgme/Makefile.am index f36872e..7a8a79c 100644 --- a/gpgme/Makefile.am +++ b/gpgme/Makefile.am @@ -77,7 +77,7 @@ libgpgme_la_SOURCES = \ op-support.c \ encrypt.c encrypt-sign.c decrypt.c decrypt-verify.c verify.c \ sign.c passphrase.c progress.c \ - key.h key.c key-cache.c keylist.c trustlist.c \ + key.c key-cache.c keylist.c trust-item.c trustlist.c \ import.c export.c genkey.c delete.c edit.c \ engine.h engine-backend.h engine.c rungpg.c status-table.h \ ${gpgsm_components} sema.h io.h ${system_components} \ diff --git a/gpgme/context.h b/gpgme/context.h index a73724f..43557f7 100644 --- a/gpgme/context.h +++ b/gpgme/context.h @@ -63,13 +63,6 @@ struct key_queue_item_s }; -struct trust_queue_item_s -{ - struct trust_queue_item_s *next; - GpgmeTrustItem item; -}; - - /* Currently we need it at several places, so we put the definition into this header file. */ struct gpgme_context_s @@ -111,7 +104,6 @@ struct gpgme_context_s /* Something new is available. */ volatile int key_cond; struct key_queue_item_s *key_queue; - struct trust_queue_item_s *trust_queue; /* The user provided passphrase callback and its hook value. */ GpgmePassphraseCb passphrase_cb; diff --git a/gpgme/gpgme.h b/gpgme/gpgme.h index 4909866..b5813fd 100644 --- a/gpgme/gpgme.h +++ b/gpgme/gpgme.h @@ -67,10 +67,6 @@ typedef struct gpgme_recipients_s *GpgmeRecipients; struct gpgme_key_s; typedef struct gpgme_key_s *GpgmeKey; -/* A trust item. */ -struct gpgme_trust_item_s; -typedef struct gpgme_trust_item_s *GpgmeTrustItem; - /* The error numbers used by GPGME. */ typedef enum @@ -729,21 +725,6 @@ unsigned long gpgme_key_sig_get_ulong_attr (GpgmeKey key, int uid_idx, GpgmeAttr what, const void *reserved, int idx); - -/* Release the trust item ITEM. */ -void gpgme_trust_item_release (GpgmeTrustItem item); - -/* Return the value of the attribute WHAT of ITEM, which has to be - representable by a string. */ -const char *gpgme_trust_item_get_string_attr (GpgmeTrustItem item, - GpgmeAttr what, - const void *reserved, int idx); - -/* Return the value of the attribute WHAT of KEY, which has to be - representable by an integer. IDX specifies a running index if the - attribute appears more than once in the key. */ -int gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what, - const void *reserved, int idx); /* Crypto Operations. */ @@ -1082,6 +1063,42 @@ GpgmeError gpgme_op_keylist_next (GpgmeCtx ctx, GpgmeKey *r_key); /* Terminate a pending keylist operation within CTX. */ GpgmeError gpgme_op_keylist_end (GpgmeCtx ctx); + +/* Trust items and operations. */ + +struct _gpgme_trust_item +{ + /* Internal to GPGME, do not use. */ + unsigned int _refs; + + /* The key ID to which the trust item belongs. */ + char *keyid; + + /* Internal to GPGME, do not use. */ + char _keyid[16 + 1]; + + /* The type of the trust item, 1 refers to a key, 2 to a user ID. */ + int type; + + /* The trust level. */ + int level; + + /* The owner trust if TYPE is 1. */ + char *otrust; + + /* Internal to GPGME, do not use. */ + char _otrust[2]; + + /* The calculated validity. */ + char *val; + + /* Internal to GPGME, do not use. */ + char _val[2]; + + /* The user name if TYPE is 2. */ + char *name; +}; +typedef struct _gpgme_trust_item *GpgmeTrustItem; /* Start a trustlist operation within CTX, searching for trust items which match PATTERN. */ @@ -1094,7 +1111,29 @@ GpgmeError gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item); /* Terminate a pending trustlist operation within CTX. */ GpgmeError gpgme_op_trustlist_end (GpgmeCtx ctx); +/* Acquire a reference to ITEM. */ +void gpgme_trust_item_ref (GpgmeTrustItem item); + +/* Release a reference to ITEM. If this was the last one the trust + item is destroyed. */ +void gpgme_trust_item_unref (GpgmeTrustItem item); + +/* Release the trust item ITEM. */ +void gpgme_trust_item_release (GpgmeTrustItem item); +/* Return the value of the attribute WHAT of ITEM, which has to be + representable by a string. */ +const char *gpgme_trust_item_get_string_attr (GpgmeTrustItem item, + GpgmeAttr what, + const void *reserved, int idx); + +/* Return the value of the attribute WHAT of KEY, which has to be + representable by an integer. IDX specifies a running index if the + attribute appears more than once in the key. */ +int gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what, + const void *reserved, int idx); + + /* Various functions. */ /* Check that the library fulfills the version requirement. */ diff --git a/gpgme/trustlist.c b/gpgme/trustlist.c index ba1188a..4061781 100644 --- a/gpgme/trustlist.c +++ b/gpgme/trustlist.c @@ -21,48 +21,34 @@ #if HAVE_CONFIG_H #include #endif -#include #include #include -#include #include +#include "gpgme.h" #include "util.h" #include "context.h" #include "ops.h" -struct gpgme_trust_item_s + +struct trust_queue_item_s { - int level; - char keyid[16+1]; - int type; - char ot[2]; - char val[2]; - char *name; + struct trust_queue_item_s *next; + GpgmeTrustItem item; }; - -static GpgmeTrustItem -trust_item_new (void) +typedef struct { - GpgmeTrustItem item; - - item = calloc (1, sizeof *item); - return item; -} + /* Something new is available. */ + int trust_cond; + struct trust_queue_item_s *trust_queue; +} *op_data_t; + static GpgmeError -trustlist_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) +trustlist_status_handler (void *priv, GpgmeStatusCode code, char *args) { - switch (code) - { - case GPGME_STATUS_EOF: - break; - - default: - break; - } return 0; } @@ -79,8 +65,10 @@ trustlist_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) complete count NAME ist the username and only printed on U lines. */ static GpgmeError -trustlist_colon_handler (GpgmeCtx ctx, char *line) +trustlist_colon_handler (void *priv, char *line) { + GpgmeCtx ctx = (GpgmeCtx) priv; + GpgmeError err; char *p, *pend; int field = 0; GpgmeTrustItem item = NULL; @@ -98,9 +86,9 @@ trustlist_colon_handler (GpgmeCtx ctx, char *line) switch (field) { case 1: /* level */ - item = trust_item_new (); - if (!item) - return GPGME_Out_Of_Core; + err = _gpgme_trust_item_new (&item); + if (err) + return err; item->level = atoi (p); break; case 2: /* long keyid */ @@ -111,17 +99,15 @@ trustlist_colon_handler (GpgmeCtx ctx, char *line) item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0; break; case 5: /* owner trust */ - item->ot[0] = *p; - item->ot[1] = 0; + item->_otrust[0] = *p; break; case 6: /* validity */ - item->val[0] = *p; - item->val[1] = 0; + item->_val[0] = *p; break; case 9: /* user ID */ item->name = strdup (p); if (!item->name) { - gpgme_trust_item_release (item); + gpgme_trust_item_unref (item); return GPGME_Out_Of_Core; } break; @@ -138,25 +124,31 @@ void _gpgme_op_trustlist_event_cb (void *data, GpgmeEventIO type, void *type_data) { GpgmeCtx ctx = (GpgmeCtx) data; + GpgmeError err; + op_data_t opd; GpgmeTrustItem item = (GpgmeTrustItem) type_data; struct trust_queue_item_s *q, *q2; assert (type == GPGME_EVENT_NEXT_TRUSTITEM); + err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd, + -1, NULL); + if (err) + return; + q = malloc (sizeof *q); if (!q) { - gpgme_trust_item_release (item); - /* FIXME */ - /* ctx->error = GPGME_Out_Of_Core; */ + gpgme_trust_item_unref (item); + /* FIXME: GPGME_Out_Of_Core; */ return; } q->item = item; q->next = NULL; - /* FIXME: lock queue, keep a tail pointer */ - q2 = ctx->trust_queue; + /* FIXME: Use a tail pointer */ + q2 = opd->trust_queue; if (!q2) - ctx->trust_queue = q; + opd->trust_queue = q; else { while (q2->next) @@ -164,7 +156,7 @@ _gpgme_op_trustlist_event_cb (void *data, GpgmeEventIO type, void *type_data) q2->next = q; } /* FIXME: unlock queue */ - ctx->key_cond = 1; + opd->trust_cond = 1; } @@ -172,36 +164,36 @@ GpgmeError gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level) { GpgmeError err = 0; + op_data_t opd; if (!pattern || !*pattern) return GPGME_Invalid_Value; err = _gpgme_op_reset (ctx, 2); if (err) - goto leave; + return err; + + err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd, + sizeof (*opd), NULL); + if (err) + return err; _gpgme_engine_set_status_handler (ctx->engine, trustlist_status_handler, ctx); err = _gpgme_engine_set_colon_line_handler (ctx->engine, trustlist_colon_handler, ctx); if (err) - goto leave; - - err =_gpgme_engine_op_trustlist (ctx->engine, pattern); + return err; - leave: - if (err) - { - _gpgme_engine_release (ctx->engine); - ctx->engine = NULL; - } - return err; + return _gpgme_engine_op_trustlist (ctx->engine, pattern); } GpgmeError gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item) { + GpgmeError err; + op_data_t opd; struct trust_queue_item_s *q; if (!r_item) @@ -210,18 +202,23 @@ gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item) if (!ctx) return GPGME_Invalid_Value; - if (!ctx->trust_queue) + err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd, + -1, NULL); + if (err) + return err; + + if (!opd->trust_queue) { - GpgmeError err = _gpgme_wait_on_condition (ctx, &ctx->key_cond); + err = _gpgme_wait_on_condition (ctx, &opd->trust_cond); if (err) return err; - if (!ctx->key_cond) + if (!opd->trust_cond) return GPGME_EOF; - ctx->key_cond = 0; - assert (ctx->trust_queue); + opd->trust_cond = 0; + assert (opd->trust_queue); } - q = ctx->trust_queue; - ctx->trust_queue = q->next; + q = opd->trust_queue; + opd->trust_queue = q->next; *r_item = q->item; free (q); @@ -229,13 +226,7 @@ gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item) } -/** - * gpgme_op_trustlist_end: - * @c: Context - * - * Ends the trustlist operation and allows to use the context for some - * other operation next. - **/ +/* Terminate a pending trustlist operation within CTX. */ GpgmeError gpgme_op_trustlist_end (GpgmeCtx ctx) { @@ -244,76 +235,3 @@ gpgme_op_trustlist_end (GpgmeCtx ctx) return 0; } - - -void -gpgme_trust_item_release (GpgmeTrustItem item) -{ - if (!item) - return; - if (item->name) - free (item->name); - free (item); -} - - -const char * -gpgme_trust_item_get_string_attr (GpgmeTrustItem item, GpgmeAttr what, - const void *reserved, int idx) -{ - const char *val = 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; - } - return val; -} - - -int -gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what, - const void *reserved, int idx) -{ - int val = 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; - } - return val; -} diff --git a/tests/ChangeLog b/tests/ChangeLog index 187f703..04b911a 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,7 @@ 2003-04-29 Marcus Brinkmann + * gpg/t-trustlist.c: Rewritten. + * gpg/t-verify.c (main): Rewritten. * gpg/t-decrypt-verify.c: Rewritten. * gpgsm/t-verify.c (main): Rewritten. diff --git a/tests/gpg/t-import.c b/tests/gpg/t-import.c index 57bfcd1..bce9fd3 100644 --- a/tests/gpg/t-import.c +++ b/tests/gpg/t-import.c @@ -25,7 +25,7 @@ #include - + #define fail_if_err(err) \ do \ { \ diff --git a/tests/gpg/t-trustlist.c b/tests/gpg/t-trustlist.c index a3c8152..874ac08 100644 --- a/tests/gpg/t-trustlist.c +++ b/tests/gpg/t-trustlist.c @@ -1,90 +1,70 @@ -/* t-trustlist.c - regression test - * Copyright (C) 2000 Werner Koch (dd9jn) - * Copyright (C) 2001 g10 Code GmbH - * - * This file is part of GPGME. - * - * GPGME is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GPGME is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ +/* t-trustlist.c - Regression test. + Copyright (C) 2000 Werner Koch (dd9jn) + Copyright (C) 2001, 2003 g10 Code GmbH + + This file is part of GPGME. + + GPGME is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + GPGME is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GPGME; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include +#include #include -#include #include -#define fail_if_err(a) do { if(a) { \ - fprintf (stderr, "%s:%d: GpgmeError %s\n", \ - __FILE__, __LINE__, gpgme_strerror(a)); \ - exit (1); } \ - } while(0) - -static void -doit ( GpgmeCtx ctx, const char *pattern ) -{ - GpgmeError err; - GpgmeTrustItem item; - - err = gpgme_op_trustlist_start (ctx, pattern, 0 ); - fail_if_err (err); - - while ( !(err = gpgme_op_trustlist_next ( ctx, &item )) ) { - printf ("l=%d k=%s t=%d o=%s v=%s u=%s\n", - gpgme_trust_item_get_int_attr (item, GPGME_ATTR_LEVEL, NULL, 0 ), - gpgme_trust_item_get_string_attr (item, GPGME_ATTR_KEYID, NULL, 0 ), - gpgme_trust_item_get_int_attr (item, GPGME_ATTR_TYPE, NULL, 0 ), - gpgme_trust_item_get_string_attr (item, GPGME_ATTR_OTRUST, NULL, 0 ), - gpgme_trust_item_get_string_attr (item, GPGME_ATTR_VALIDITY, NULL, 0 ), - gpgme_trust_item_get_string_attr (item, GPGME_ATTR_USERID, NULL, 0 ) - ); - gpgme_trust_item_release (item); - } - if ( err != GPGME_EOF ) - fail_if_err (err); -} + +#define fail_if_err(err) \ + do \ + { \ + if (err) \ + { \ + fprintf (stderr, "%s:%d: GpgmeError %s\n", \ + __FILE__, __LINE__, gpgme_strerror (err)); \ + exit (1); \ + } \ + } \ + while (0) int -main (int argc, char **argv ) +main (int argc, char *argv[]) { - GpgmeCtx ctx; - GpgmeError err; - int loop = 0; - const char *pattern; - - if( argc ) { - argc--; argv++; - } - - if (argc && !strcmp( *argv, "--loop" ) ) { - loop = 1; - argc--; argv++; - } - pattern = argc? *argv : "alice"; + GpgmeCtx ctx; + GpgmeError err; + GpgmeTrustItem item; + + err = gpgme_new (&ctx); + fail_if_err (err); - err = gpgme_new (&ctx); + err = gpgme_op_trustlist_start (ctx, "alice", 0); + fail_if_err (err); + + while (!(err = gpgme_op_trustlist_next (ctx, &item))) + { + printf ("l=%d k=%s t=%d o=%s v=%s u=%s\n", + gpgme_trust_item_get_int_attr (item, GPGME_ATTR_LEVEL, NULL, 0), + gpgme_trust_item_get_string_attr (item, GPGME_ATTR_KEYID, NULL, 0), + gpgme_trust_item_get_int_attr (item, GPGME_ATTR_TYPE, NULL, 0), + gpgme_trust_item_get_string_attr (item, GPGME_ATTR_OTRUST, NULL, 0), + gpgme_trust_item_get_string_attr (item, GPGME_ATTR_VALIDITY, NULL, 0), + gpgme_trust_item_get_string_attr (item, GPGME_ATTR_USERID, NULL, 0)); + gpgme_trust_item_release (item); + } + if (err != GPGME_EOF) fail_if_err (err); - do { - fprintf (stderr, "** pattern=`%s'\n", pattern ); - doit ( ctx, pattern ); - } while ( loop ); - gpgme_release (ctx); - return 0; + gpgme_release (ctx); + return 0; } - - - -- 2.26.2