From cae5cb8e49600bc992ed89c456148b422d1dee4a Mon Sep 17 00:00:00 2001 From: mdw Date: Sat, 17 Jun 2000 11:27:43 +0000 Subject: [PATCH] Add key fetching interface. --- key.h | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/key.h b/key.h index 88d4de5..4ce7b7c 100644 --- 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@ --- * -- 2.11.0