bugfix + change to the nextCertificate() function prototype

This commit is contained in:
Steffen Hansen 2002-06-13 01:56:31 +00:00
parent 61c97e9fa9
commit 1bd00d0a18
2 changed files with 14 additions and 6 deletions

View File

@ -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* );

View File

@ -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 )