X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fclient.c;h=e5d3e4c101e9020eaeebfbb7f48b6251132f5082;hb=37482a306afb1c7952bdf304530498b6d068db92;hp=dac30f24ce17133503b54c12d058e9eda732d26f;hpb=77ba2b539f5e7e74af67194b7f78a55cf7310edc;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index dac30f2..e5d3e4c 100644 --- a/src/client.c +++ b/src/client.c @@ -1308,6 +1308,31 @@ const char *client_get_facet_limit_local(struct client *cl, return 0; } +static void ccl_quote_map_term(CCL_bibset ccl_map, WRBUF w, + const char *term) +{ + int quote_it = 0; + const char *cp; + for (cp = term; *cp; cp++) + if ((*cp >= '0' && *cp <= '9') || strchr(" +-", *cp)) + ; + else + quote_it = 1; + if (!quote_it) + wrbuf_puts(w, term); + else + { + wrbuf_putc(w, '\"'); + for (cp = term; *cp; cp++) + { + if (strchr( "\\\"", *cp)) + wrbuf_putc(w, '\\'); + wrbuf_putc(w, *cp); + } + wrbuf_putc(w, '\"'); + } +} + static int apply_limit(struct session_database *sdb, facet_limits_t facet_limits, WRBUF w_pqf, CCL_bibset ccl_map, @@ -1368,10 +1393,8 @@ static int apply_limit(struct session_database *sdb, struct ccl_rpn_node *cn; wrbuf_rewind(ccl_w); wrbuf_puts(ccl_w, ccl); - wrbuf_puts(ccl_w, "=\""); - wrbuf_puts(ccl_w, values[i]); - wrbuf_puts(ccl_w, "\""); - + wrbuf_putc(ccl_w, '='); + ccl_quote_map_term(ccl_map, ccl_w, values[i]); cn = ccl_find_str(ccl_map, wrbuf_cstr(ccl_w), &cerror, &cpos); if (cn)