Index: trunk/src/hid_cfg.c =================================================================== --- trunk/src/hid_cfg.c (revision 1541) +++ trunk/src/hid_cfg.c (revision 1542) @@ -402,19 +402,8 @@ } -lht_node_t *hid_cfg_create_hash_node(lht_node_t *parent, const char *name, ...) +void hid_cfg_extend_hash_nodev(lht_node_t *node, va_list ap) { - lht_node_t *n; - va_list ap; - - if ((parent != NULL) && (parent->type != LHT_LIST)) - return NULL; - - n = lht_dom_node_alloc(LHT_HASH, name); - if (parent != NULL) - lht_dom_list_append(parent, n); - - va_start(ap, name); for(;;) { char *cname, *cval; lht_node_t *t; @@ -427,11 +416,35 @@ if (cval != NULL) { t = lht_dom_node_alloc(LHT_TEXT, cname); t->data.text.value = strdup(cval); - lht_dom_hash_put(n, t); + lht_dom_hash_put(node, t); } } +} + +void hid_cfg_extend_hash_node(lht_node_t *node, ...) +{ + va_list ap; + va_start(ap, node); + hid_cfg_extend_hash_nodev(node, ap); va_end(ap); +} +lht_node_t *hid_cfg_create_hash_node(lht_node_t *parent, const char *name, ...) +{ + lht_node_t *n; + va_list ap; + + if ((parent != NULL) && (parent->type != LHT_LIST)) + return NULL; + + n = lht_dom_node_alloc(LHT_HASH, name); + if (parent != NULL) + lht_dom_list_append(parent, n); + + va_start(ap, name); + hid_cfg_extend_hash_nodev(n, ap); + va_end(ap); + return n; } Index: trunk/src/hid_cfg.h =================================================================== --- trunk/src/hid_cfg.h (revision 1541) +++ trunk/src/hid_cfg.h (revision 1542) @@ -94,6 +94,12 @@ for creating a menu item in a subtree list. */ lht_node_t *hid_cfg_create_hash_node(lht_node_t *parent, const char *name, ...); +/* Create a flat subtree of text nodes from name,value varargs (NULL + terminated). This is a shorthand for creating a menu item in a + subtree list. */ +void hid_cfg_extend_hash_node(lht_node_t *node, ...); +void hid_cfg_extend_hash_nodev(lht_node_t *node, va_list ap); + /* Report an error about a node */ #define hid_cfg_error(node, ...) \ do { \