aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Hansen <[email protected]>2002-06-13 01:56:31 +0000
committerSteffen Hansen <[email protected]>2002-06-13 01:56:31 +0000
commit1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7 (patch)
tree4497beb8eae24cc4e587359f8852ff7c86693032
parenttests/ (diff)
downloadgpgme-1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7.tar.gz
gpgme-1bd00d0a184c2b86ec8f6181cdc2ef455d1a01e7.zip
bugfix + change to the nextCertificate() function prototype
-rw-r--r--gpgmeplug/cryptplug.h4
-rw-r--r--gpgmeplug/gpgmeplug.c16
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 )