diff options
Diffstat (limited to 'g10/keylist.c')
-rw-r--r-- | g10/keylist.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/g10/keylist.c b/g10/keylist.c index f445d67b6..01f208d8c 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -67,41 +67,50 @@ secret_key_list( STRLIST list ) static void list_all( int secret ) { - KBPOS kbpos; + KEYDB_HANDLE hd; KBNODE keyblock = NULL; int rc=0; - int lastresno; + const char *lastresname, *resname; - rc = enum_keyblocks( secret? 5:0, &kbpos, &keyblock ); + hd = keydb_new (secret); + if (!hd) + rc = G10ERR_GENERAL; + else + rc = keydb_search_first (hd); if( rc ) { if( rc != -1 ) - log_error("enum_keyblocks(open) failed: %s\n", g10_errstr(rc) ); + log_error("keydb_search_first failed: %s\n", g10_errstr(rc) ); goto leave; } - lastresno = -1; - while( !(rc = enum_keyblocks( 1, &kbpos, &keyblock )) ) { - if( lastresno != kbpos.resno ) { - const char *s = keyblock_resource_name( &kbpos ); + lastresname = NULL; + do { + rc = keydb_get_keyblock (hd, &keyblock); + if (rc) { + log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); + goto leave; + } + resname = keydb_get_resource_name (hd); + if (lastresname != resname ) { int i; - lastresno = kbpos.resno; - printf("%s\n", s ); - for(i=strlen(s); i; i-- ) + printf("%s\n", resname ); + for(i=strlen(resname); i; i-- ) putchar('-'); putchar('\n'); + lastresname = resname; } merge_keys_and_selfsig( keyblock ); list_keyblock( keyblock, secret ); - release_kbnode( keyblock ); keyblock = NULL; - } - + release_kbnode( keyblock ); + keyblock = NULL; + } while (!(rc = keydb_search_next (hd))); if( rc && rc != -1 ) - log_error("enum_keyblocks(read) failed: %s\n", g10_errstr(rc)); + log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); leave: - enum_keyblocks( 2, &kbpos, &keyblock ); /* close */ - release_kbnode( keyblock ); + release_kbnode (keyblock); + keydb_release (hd); } |