1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2011 Index Data
3 * See the file LICENSE for details.
5 /** \file query-charset.c
6 \brief converts General Terms in RPN queries
15 #include <yaz/query-charset.h>
16 #include <yaz/wrbuf.h>
18 static int yaz_query_charset_convert_buf(char *buf_in, int len_in,
19 char **buf_out, int *len_out,
20 ODR o, WRBUF wrbuf, yaz_iconv_t cd)
24 wrbuf_iconv_write(wrbuf, cd, buf_in, len_in);
25 wrbuf_iconv_reset(wrbuf, cd);
27 *len_out = wrbuf_len(wrbuf);
29 { /* we assume conversion failed */
37 *buf_out = (char*) odr_malloc(o, *len_out);
38 memcpy(*buf_out, wrbuf_buf(wrbuf), *len_out);
43 static int yaz_query_charset_convert_term(Z_Term *q,
44 ODR o, WRBUF wrbuf, yaz_iconv_t cd)
50 r = yaz_query_charset_convert_buf(
51 (char *) q->u.general->buf, q->u.general->len,
52 (char **) &q->u.general->buf, &q->u.general->len, o, wrbuf, cd);
58 static int yaz_query_charset_convert_operand(Z_Operand *q,
59 ODR o, WRBUF wrbuf, yaz_iconv_t cd)
65 r = yaz_query_charset_convert_term(q->u.attributesPlusTerm->term,
68 case Z_Operand_resultSetId:
70 case Z_Operand_resultAttr:
76 static int yaz_query_charset_convert_structure(Z_RPNStructure *q,
83 case Z_RPNStructure_simple:
84 r = yaz_query_charset_convert_operand(q->u.simple, o, wrbuf, cd);
86 case Z_RPNStructure_complex:
87 r = yaz_query_charset_convert_structure(q->u.complex->s1, o, wrbuf, cd);
89 r = yaz_query_charset_convert_structure(
90 q->u.complex->s2, o, wrbuf, cd);
96 int yaz_query_charset_convert_rpnquery_check(Z_RPNQuery *q,
97 ODR o, yaz_iconv_t cd)
100 WRBUF wrbuf = wrbuf_alloc();
101 r = yaz_query_charset_convert_structure(q->RPNStructure, o, wrbuf, cd);
102 wrbuf_destroy(wrbuf);
106 void yaz_query_charset_convert_rpnquery(Z_RPNQuery *q,
107 ODR o, yaz_iconv_t cd)
109 WRBUF wrbuf = wrbuf_alloc();
110 yaz_query_charset_convert_structure(q->RPNStructure, o, wrbuf, cd);
111 wrbuf_destroy(wrbuf);
114 void yaz_query_charset_convert_apt(Z_AttributesPlusTerm *apt,
115 ODR o, yaz_iconv_t cd)
117 WRBUF wrbuf = wrbuf_alloc();
118 yaz_query_charset_convert_term(apt->term, o, wrbuf, cd);
119 wrbuf_destroy(wrbuf);
125 * c-file-style: "Stroustrup"
126 * indent-tabs-mode: nil
128 * vim: shiftwidth=4 tabstop=8 expandtab