diff options
| author | Steffen Hansen <[email protected]> | 2002-06-13 01:56:31 +0000 | 
|---|---|---|
| committer | Steffen Hansen <[email protected]> | 2002-06-13 01:56:31 +0000 | 
| commit | 1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7 (patch) | |
| tree | 4497beb8eae24cc4e587359f8852ff7c86693032 | |
| parent | tests/ (diff) | |
| download | gpgme-1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7.tar.gz gpgme-1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7.zip | |
bugfix + change to the nextCertificate() function prototype
Diffstat (limited to '')
| -rw-r--r-- | gpgmeplug/cryptplug.h | 4 | ||||
| -rw-r--r-- | gpgmeplug/gpgmeplug.c | 16 | 
2 files changed, 14 insertions, 6 deletions
| diff --git a/gpgmeplug/cryptplug.h b/gpgmeplug/cryptplug.h index eca2a2bb..e1ba0a92 100644 --- a/gpgmeplug/cryptplug.h +++ b/gpgmeplug/cryptplug.h @@ -1764,7 +1764,7 @@ struct CertificateInfo {  \verbatim    struct CertificateInfo* info;    struct CertIterator* it = startListCertificates("Steffen"); -  while( info = nextCertificate( it ) ) { +  while( nextCertificate( it, &info ) == GPGME_No_Error && info ) {      do something with info.      dont free() it, the struct will be reused      by the next call to nextCertificate() @@ -1773,7 +1773,7 @@ struct CertificateInfo {  \endverbatim  */  struct CertIterator*  startListCertificates( const char* pattern, int remote ); -struct CertificateInfo*  nextCertificate( struct CertIterator* ); +int  nextCertificate( struct CertIterator*, struct CertificateInfo** result );  void endListCertificates( struct CertIterator* ); diff --git a/gpgmeplug/gpgmeplug.c b/gpgmeplug/gpgmeplug.c index 62d02bdd..eabcf35b 100644 --- a/gpgmeplug/gpgmeplug.c +++ b/gpgmeplug/gpgmeplug.c @@ -2115,6 +2115,7 @@ struct CertIterator* startListCertificates( const char* pattern, int remote )      return it;  } +/* free() each string in a char*[] and the array itself */  static void freeStringArray( char** c )  {      char** _c = c; @@ -2126,6 +2127,7 @@ static void freeStringArray( char** c )      safe_free( (void**)&_c );  } +/* free all malloc'ed data in a struct CertificateInfo */  static void freeInfo( struct CertificateInfo* info )  {    struct DnPair* a = info->dnarray; @@ -2145,6 +2147,8 @@ static void freeInfo( struct CertificateInfo* info )    memset( info, 0, sizeof( *info ) );  } +/* Format the fingerprint nicely. The caller should +   free the returned value with safe_free() */  static char* make_fingerprint( const char* fpr )  {    int len = strlen(fpr); @@ -2161,10 +2165,11 @@ static char* make_fingerprint( const char* fpr )    return result;  } -struct CertificateInfo* nextCertificate( struct CertIterator* it ) +int nextCertificate( struct CertIterator* it, struct CertificateInfo** result )  {    GpgmeError err;    GpgmeKey   key; +  int retval = GPGME_No_Error;    assert( it );    err = gpgme_op_keylist_next ( it->ctx, &key);    if( err != GPGME_EOF ) {    @@ -2173,6 +2178,7 @@ struct CertificateInfo* nextCertificate( struct CertIterator* it )      unsigned long u;      char* names[MAX_GPGME_IDX+1];      struct DnPair *issuer_dn, *tmp_dn; +    retval = err;      memset( names, 0, sizeof( names ) );      freeInfo( &(it->info) ); @@ -2188,10 +2194,10 @@ struct CertificateInfo* nextCertificate( struct CertIterator* it )        struct DnPair* a = parse_dn( names[idx] );         if( idx == 0 ) {  	it->info.userid[idx] = reorder_dn( a ); +	it->info.dnarray = a;  	safe_free( (void **)&(names[idx]) );        } else {  	it->info.userid[idx] = names[idx]; -	it->info.dnarray = a;        }      }      it->info.userid[idx] = 0; @@ -2241,8 +2247,10 @@ struct CertificateInfo* nextCertificate( struct CertIterator* it )      it->info.disabled = u;      gpgme_key_release (key); -    return &(it->info); -  } else return NULL; +    /*return &(it->info);*/ +    *result =  &(it->info); +  } else *result = NULL; +  return retval;  }  void endListCertificates( struct CertIterator* it ) | 
