Add key fetching interface.
authormdw <mdw>
Sat, 17 Jun 2000 11:27:43 +0000 (11:27 +0000)
committermdw <mdw>
Sat, 17 Jun 2000 11:27:43 +0000 (11:27 +0000)
key.h

diff --git a/key.h b/key.h
index 88d4de5..4ce7b7c 100644 (file)
--- a/key.h
+++ b/key.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: key.h,v 1.5 2000/02/12 18:55:40 mdw Exp $
+ * $Id: key.h,v 1.6 2000/06/17 11:27:43 mdw Exp $
  *
  * Simple key management
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: key.h,v $
+ * Revision 1.6  2000/06/17 11:27:43  mdw
+ * Add key fetching interface.
+ *
  * Revision 1.5  2000/02/12 18:55:40  mdw
  * Make it all compile properly.
  *
@@ -152,6 +155,15 @@ enum {
 typedef struct { hash_iter i; time_t t; } key_iter;
 typedef struct { sym_iter i; } key_attriter;
 
+/* --- Key fetching --- */
+
+typedef struct key_fetchdef {
+  char *name;                          /* Name of item */
+  size_t off;                          /* Offset into target structure */
+  unsigned e;                          /* Flags for the item */
+  const struct key_fetchdef *kf;       /* Substructure pointer */
+} key_fetchdef;
+
 /* --- File opening options --- */
 
 enum {
@@ -596,6 +608,63 @@ extern void key_mkiter(key_iter */*i*/, key_file */*f*/);
 
 extern key *key_next(key_iter */*i*/);
 
+/*----- Fetching key data conveniently ------------------------------------*/
+
+/* --- @key_fetchinit@ --- *
+ *
+ * Arguments:  @const key_fetchdef *kf@ = pointer to base definition
+ *             @key_packstruct *kps@ = pointer to destination packing def
+ *             @void *p@ = pointer to destination block
+ *
+ * Returns:    Pointer to packing definition.
+ *
+ * Use:                Initializes a packing definition (@key_packdef@ structure).
+ *             If @kps@ is null on entry, an appropriately sized block is
+ *             allocated automatically.  Otherwise it must be large enough.
+ */
+
+extern key_packdef *key_fetchinit(const key_fetchdef */*kf*/,
+                                 key_packstruct */*kp*/, void */*p*/);
+
+/* --- @key_fetch@ --- *
+ *
+ * Arguments:  @key_packdef *kp@ = pointer to packing structure
+ *             @key *k@ = key file containing desired key
+ *
+ * Returns:    Error code, or zero.
+ *
+ * Use:                Fetches an unpacked key from a packed one.
+ */
+
+extern int key_fetch(key_packdef */*kp*/, key */*k*/);
+
+/* --- @key_fetchbyname@ --- *
+ *
+ * Arguments:  @key_packdef *kp@ = pointer to packing structure
+ *             @key_file *kf@ = key file containing desired key
+ *             @const char *tag@ = user's tag describing the key
+ *
+ * Returns:    Error code, or zero.
+ *
+ * Use:                Fetches a named key from a key file and unpacks it
+ *             conveniently.
+ */
+
+extern int key_fetchbyname(key_packdef */*kp*/,
+                          key_file */*kf*/, const char */*tag*/);
+
+/* --- @key_fetchdone@ --- *
+ *
+ * Arguments:  @key_packdef *kp@ = pointer to packing structure
+ *
+ * Returns:    ---
+ *
+ * Use:                Frees a packing structure.  If the structure was allocated by
+ *             @key_fetchinit@ then it is freed.
+ */
+
+extern void key_fetchdone(key_packdef */*kp*/);
+
 /*----- Other functions ---------------------------------------------------*/
 
 /* --- @key_moan@ --- *