From b5b7e0bfda93e553c04fbf7340551a8cce1d9b44 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Sun, 8 Jun 2008 11:49:21 +0100 Subject: [PATCH 1/1] Add kvp_make(), to make a kvp list in a single function call. Organization: Straylight/Edgeware From: Richard Kettlewell --- lib/kvp.c | 19 +++++++++++++++++++ lib/kvp.h | 1 + 2 files changed, 20 insertions(+) diff --git a/lib/kvp.c b/lib/kvp.c index 9cd0554..c56249d 100644 --- a/lib/kvp.c +++ b/lib/kvp.c @@ -201,6 +201,25 @@ const char *kvp_get(const struct kvp *kvp, const char *name) { return kvp ? kvp->value : 0; } +struct kvp *kvp_make(const char *name, ...) { + const char *value; + struct kvp *kvp = 0, *k; + va_list ap; + + va_start(ap, name); + while(name) { + value = va_arg(ap, const char *); + k = xmalloc(sizeof *k); + k->name = name; + k->value = value ? xstrdup(value) : value; + k->next = kvp; + kvp = k; + name = va_arg(ap, const char *); + } + va_end(ap); + return kvp; +} + /* Local Variables: c-basic-offset:2 diff --git a/lib/kvp.h b/lib/kvp.h index 0daa9d2..dcdca5f 100644 --- a/lib/kvp.h +++ b/lib/kvp.h @@ -56,6 +56,7 @@ char *urlencodestring(const char *s); /* return the url-encoded form of @s@ */ char *urldecodestring(const char *s, size_t ns); +struct kvp *kvp_make(const char *key, ...); #endif /* KVP_H */ -- [mdw]