- if (!strcmp(c->name, "id"))
- return (!strcmp(c->value, db->url));
+ if (!strcmp(pattern, "*"))
+ return 1;
+ else if (!strncmp(pattern, "*/", 2))
+ {
+ char *db = strchr(zurl, '/');
+ if (!db)
+ return 0;
+ if (!strcmp(pattern + 2, db))
+ return 1;
+ else
+ return 0;
+ }
+ else if (!strcmp(pattern, zurl))
+ return 1;
+ else
+ return 0;
+}
+
+// This will be generalized at some point
+static int match_criterion(struct setting **settings, struct database_criterion *c)
+{
+ int offset = settings_offset(c->name);
+ struct database_criterion_value *v;
+
+ if (offset < 0)
+ {
+ yaz_log(YLOG_WARN, "Criterion not found: %s", c->name);
+ return 0;
+ }
+ if (!settings[offset])
+ return 0;
+ for (v = c->values; v; v = v->next)
+ {
+ if (offset == PZ_ID)
+ {
+ if (match_zurl(settings[offset]->value, v->value))
+ break;
+ }
+ else
+ {
+ if (!strcmp(settings[offset]->value, v->value))
+ break;
+ }
+ }
+ if (v)
+ return 1;