diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gpgme.c | 2 | ||||
| -rw-r--r-- | src/gpgme.h.in | 3 | ||||
| -rw-r--r-- | src/key.c | 2 | ||||
| -rw-r--r-- | src/keylist.c | 20 | 
4 files changed, 26 insertions, 1 deletions
| diff --git a/src/gpgme.c b/src/gpgme.c index a3768ef9..628cdaee 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -233,6 +233,7 @@ gpgme_release (gpgme_ctx_t ctx)      return;    _gpgme_engine_release (ctx->engine); +  ctx->engine = NULL;    _gpgme_fd_table_deinit (&ctx->fdt);    _gpgme_release_result (ctx);    _gpgme_signers_clear (ctx); @@ -244,6 +245,7 @@ gpgme_release (gpgme_ctx_t ctx)    if (ctx->lc_messages)      free (ctx->lc_messages);    _gpgme_engine_info_release (ctx->engine_info); +  ctx->engine_info = NULL;    DESTROY_LOCK (ctx->lock);    free (ctx);  } diff --git a/src/gpgme.h.in b/src/gpgme.h.in index d58c114d..170d7dd8 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -629,6 +629,9 @@ struct _gpgme_subkey    /* The serial number of a smart card holding this key or NULL.  */    char *card_number; + +  /* The name of the curve for ECC algorithms or NULL.  */ +  char *curve;  };  typedef struct _gpgme_subkey *gpgme_subkey_t; @@ -331,6 +331,8 @@ gpgme_key_unref (gpgme_key_t key)        gpgme_subkey_t next = subkey->next;        if (subkey->fpr)  	free (subkey->fpr); +      if (subkey->curve) +	free (subkey->curve);        if (subkey->card_number)  	free (subkey->card_number);        free (subkey); diff --git a/src/keylist.c b/src/keylist.c index a3613339..582b241b 100644 --- a/src/keylist.c +++ b/src/keylist.c @@ -422,7 +422,7 @@ keylist_colon_handler (void *priv, char *line)        RT_SSB, RT_SEC, RT_CRT, RT_CRS, RT_REV, RT_SPK      }    rectype = RT_NONE; -#define NR_FIELDS 16 +#define NR_FIELDS 17    char *field[NR_FIELDS];    int fields = 0;    void *hook; @@ -584,6 +584,15 @@ keylist_colon_handler (void *priv, char *line)            if (err)              return err;          } + +      /* Field 17 has the curve name for ECC.  */ +      if (fields >= 17 && *field[16]) +        { +          subkey->curve = strdup (field[16]); +          if (!subkey->curve) +            return gpg_error_from_syserror (); +        } +        break;      case RT_SUB: @@ -646,6 +655,15 @@ keylist_colon_handler (void *priv, char *line)            if (err)              return err;          } + +      /* Field 17 has the curve name for ECC.  */ +      if (fields >= 17 && *field[16]) +        { +          subkey->curve = strdup (field[16]); +          if (!subkey->curve) +            return gpg_error_from_syserror (); +        } +        break;      case RT_UID: | 
