gpg: Add function format_keyid.
authorNeal H. Walfield <neal@g10code.com>
Tue, 17 Nov 2015 10:47:43 +0000 (11:47 +0100)
committerNeal H. Walfield <neal@g10code.com>
Tue, 17 Nov 2015 13:53:00 +0000 (14:53 +0100)
* 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 <neal@g10code.com>
g10/keydb.h
g10/keyid.c
g10/options.h

index 882af35..b1dfa08 100644 (file)
@@ -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 );
 #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);
 size_t keystrlen(void);
 const char *keystr(u32 *keyid);
 const char *keystr_with_sub (u32 *main_kid, u32 *sub_kid);
index d716985..cb237ef 100644 (file)
@@ -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:
     {
     case KF_SHORT:
-      return 8;
+      snprintf (buffer, len, "%08lX", (ulong)keyid[1]);
+      break;
 
     case KF_LONG:
 
     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:
 
     case KF_0xSHORT:
-      return 10;
+      snprintf (buffer, len, "0x%08lX", (ulong)keyid[1]);
+      break;
 
     case KF_0xLONG:
 
     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();
     }
 
     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:
     {
     case KF_SHORT:
-      snprintf (keyid_str, sizeof keyid_str, "%08lX", (ulong)keyid[1]);
-      break;
+      return 8;
 
     case KF_LONG:
 
     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:
 
     case KF_0xSHORT:
-      snprintf (keyid_str, sizeof keyid_str, "0x%08lX", (ulong)keyid[1]);
-      break;
+      return 10;
 
     case KF_0xLONG:
 
     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();
     }
 
     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));
 }
 
 
 }
 
 
index 6fca714..0bb2aae 100644 (file)
@@ -136,7 +136,7 @@ struct
     } compliance;
   enum
     {
     } 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;
     } keyid_format;
   int shm_coprocess;
   const char *set_filename;