+/* linked list of valid value filters */
+static struct cfgopt *valid_vals;
+
+/* adds a new filter set of valid values for the key "key" */
+void gliar_value_set(const char *key, char **valid, int vcount)
+{
+ int i;
+ struct cfgopt *node;
+
+ if(!(node = malloc(sizeof *node))) {
+ return;
+ }
+ if(!(node->key = malloc(strlen(key) + 1))) {
+ free(node);
+ return;
+ }
+ strcpy(node->key, key);
+
+ if(!(node->str_val = malloc(vcount * sizeof *node->str_val))) {
+ free(node->key);
+ free(node);
+ return;
+ }
+ for(i=0; i<vcount; i++) {
+ if(!(node->str_val[i] = malloc(strlen(valid[i]) + 1))) {
+ for(; i>=0; i--) {
+ free(node->str_val[i]);
+ free(node->key);
+ free(node);
+ return;
+ }
+ }
+ strcpy(node->str_val[i], valid[i]);
+ }
+
+ node->str_count = vcount;
+
+ node->next = valid_vals;
+ valid_vals = node;
+}
+