+
+char *res_get_def (Res r, const char *name, char *def)
+{
+ char *t;
+
+ if (!(t = res_get (r, name)))
+ {
+ logf (LOG_DEBUG, "CAUTION: Using default resource %s:%s", name, def);
+ return def;
+ }
+ else
+ return t;
+}
+
+int res_get_match (Res r, const char *name, const char *value, const char *s)
+{
+ const char *cn = res_get (r, name);
+
+ if (!cn)
+ cn = s;
+ if (cn && !yaz_matchstr (cn, value))
+ return 1;
+ return 0;
+}
+
+void res_put (Res r, const char *name, const char *value)
+{
+ struct res_entry *re;
+ assert (r);
+ if (!r->init)
+ reread (r);
+
+ for (re = r->first; re; re=re->next)
+ if (re->value && !yaz_matchstr (re->name, name))
+ {
+ xfree (re->value);
+ re->value = xstrdup (value);
+ return;
+ }
+ re = add_entry (r);
+ re->name = xstrdup (name);
+ re->value = xstrdup (value);
+}
+
+int res_trav (Res r, const char *prefix, void *p,
+ void (*f)(void *p, const char *name, const char *value))
+{
+ struct res_entry *re;
+ int l = 0;
+ int no = 0;