diff options
author | Neal H. Walfield <[email protected]> | 2015-11-17 10:47:43 +0000 |
---|---|---|
committer | Neal H. Walfield <[email protected]> | 2015-11-17 13:53:00 +0000 |
commit | a052c30d31c0f6b532fea081f4a9bee083f5440f (patch) | |
tree | 178be09139d0af5118e957d468e4497acc6ee838 | |
parent | gpg: Use a more appropriate error code. (diff) | |
download | gnupg-a052c30d31c0f6b532fea081f4a9bee083f5440f.tar.gz gnupg-a052c30d31c0f6b532fea081f4a9bee083f5440f.zip |
gpg: Add function format_keyid.
* g10/options.h (opt.keyid_format): Add new value KF_DEFAULT.
* g10/keyid.c (format_keyid): New function.
(keystr): Use it.
--
Signed-off-by: Neal H. Walfield <[email protected]>
-rw-r--r-- | g10/keydb.h | 1 | ||||
-rw-r--r-- | g10/keyid.c | 76 | ||||
-rw-r--r-- | g10/options.h | 2 |
3 files changed, 48 insertions, 31 deletions
diff --git a/g10/keydb.h b/g10/keydb.h index 882af35cf..b1dfa08c7 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -786,6 +786,7 @@ char *pubkey_string (PKT_public_key *pk, char *buffer, size_t bufsize); #define PUBKEY_STRING_SIZE 32 u32 v3_keyid (gcry_mpi_t a, u32 *ki); void hash_public_key( gcry_md_hd_t md, PKT_public_key *pk ); +const char *format_keyid (u32 *keyid, int format, char *buffer, int len); size_t keystrlen(void); const char *keystr(u32 *keyid); const char *keystr_with_sub (u32 *main_kid, u32 *sub_kid); diff --git a/g10/keyid.c b/g10/keyid.c index d71698594..cb237ef54 100644 --- a/g10/keyid.c +++ b/g10/keyid.c @@ -274,65 +274,81 @@ v3_keyid (gcry_mpi_t a, u32 *ki) } -size_t -keystrlen(void) +const char * +format_keyid (u32 *keyid, int format, char *buffer, int len) { - switch(opt.keyid_format) + char tmp[KEYID_STR_SIZE]; + if (! buffer) + buffer = tmp; + + if (format == KF_DEFAULT) + format = opt.keyid_format; + if (format == KF_DEFAULT) + format = KF_0xLONG; + + switch (format) { case KF_SHORT: - return 8; + snprintf (buffer, len, "%08lX", (ulong)keyid[1]); + break; case KF_LONG: - return 16; + if (keyid[0]) + snprintf (buffer, len, "%08lX%08lX", + (ulong)keyid[0], (ulong)keyid[1]); + else + snprintf (buffer, len, "%08lX", (ulong)keyid[1]); + break; case KF_0xSHORT: - return 10; + snprintf (buffer, len, "0x%08lX", (ulong)keyid[1]); + break; case KF_0xLONG: - return 18; + if(keyid[0]) + snprintf (buffer, len, "0x%08lX%08lX", + (ulong)keyid[0],(ulong)keyid[1]); + else + snprintf (buffer, len, "0x%08lX", (ulong)keyid[1]); + break; default: BUG(); } -} + if (buffer == tmp) + return xstrdup (buffer); + return buffer; +} -const char * -keystr (u32 *keyid) +size_t +keystrlen(void) { - static char keyid_str[KEYID_STR_SIZE]; - - switch (opt.keyid_format) + switch(opt.keyid_format) { case KF_SHORT: - snprintf (keyid_str, sizeof keyid_str, "%08lX", (ulong)keyid[1]); - break; + return 8; case KF_LONG: - if (keyid[0]) - snprintf (keyid_str, sizeof keyid_str, "%08lX%08lX", - (ulong)keyid[0], (ulong)keyid[1]); - else - snprintf (keyid_str, sizeof keyid_str, "%08lX", (ulong)keyid[1]); - break; + return 16; case KF_0xSHORT: - snprintf (keyid_str, sizeof keyid_str, "0x%08lX", (ulong)keyid[1]); - break; + return 10; case KF_0xLONG: - if(keyid[0]) - snprintf (keyid_str, sizeof keyid_str, "0x%08lX%08lX", - (ulong)keyid[0],(ulong)keyid[1]); - else - snprintf (keyid_str, sizeof keyid_str, "0x%08lX", (ulong)keyid[1]); - break; + return 18; default: BUG(); } +} + - return keyid_str; +const char * +keystr (u32 *keyid) +{ + static char keyid_str[KEYID_STR_SIZE]; + return format_keyid (keyid, opt.keyid_format, keyid_str, sizeof (keyid_str)); } diff --git a/g10/options.h b/g10/options.h index 6fca714dd..0bb2aaee6 100644 --- a/g10/options.h +++ b/g10/options.h @@ -136,7 +136,7 @@ struct } compliance; enum { - KF_SHORT, KF_LONG, KF_0xSHORT, KF_0xLONG + KF_DEFAULT, KF_SHORT, KF_LONG, KF_0xSHORT, KF_0xLONG } keyid_format; int shm_coprocess; const char *set_filename; |