X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2.c;h=6c3e1962d46ef893f90bce0506e4fa353fa18aa8;hb=f53516031317781ebb1a92691e3999de0afa72eb;hp=3c37fc7f00eda969854b435ac3f1730005709637;hpb=975482621691b3dbd8d08cb5fbd81eeb6d9b05dd;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2.c b/src/pazpar2.c index 3c37fc7..6c3e196 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.50 2007-03-20 05:32:58 quinn Exp $ */ +/* $Id: pazpar2.c,v 1.52 2007-03-23 03:26:22 quinn Exp $ */ #include #include @@ -1276,7 +1276,7 @@ int session_active_clients(struct session *s) return res; } -// parses crit1=val1,crit2=val2,... +// parses crit1=val1,crit2=val2|val3,... static struct database_criterion *parse_filter(NMEM m, const char *buf) { struct database_criterion *res = 0; @@ -1289,6 +1289,9 @@ static struct database_criterion *parse_filter(NMEM m, const char *buf) nmem_strsplit(m, ",", buf, &values, &num); for (i = 0; i < num; i++) { + char **subvalues; + int subnum; + int subi; struct database_criterion *new = nmem_malloc(m, sizeof(*new)); char *eq = strchr(values[i], '='); if (!eq) @@ -1298,7 +1301,15 @@ static struct database_criterion *parse_filter(NMEM m, const char *buf) } *(eq++) = '\0'; new->name = values[i]; - new->value = eq; + nmem_strsplit(m, "|", eq, &subvalues, &subnum); + new->values = 0; + for (subi = 0; subi < subnum; subi++) + { + struct database_criterion_value *newv = nmem_malloc(m, sizeof(*newv)); + newv->value = subvalues[subi]; + newv->next = new->values; + new->values = newv; + } new->next = res; res = new; } @@ -1347,7 +1358,7 @@ void destroy_session(struct session *s) while (s->clients) client_destroy(s->clients); nmem_destroy(s->nmem); - wrbuf_free(s->wrbuf, 1); + wrbuf_destroy(s->wrbuf); } struct session *new_session()