From e529ed18a6825f980bb16b230e56c6d53743ced1 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 6 Dec 2013 11:17:11 +0100 Subject: [PATCH] wrbuf: new utility wrbuf_iconv_write2 which is a better wrbuf_iconv_write_x .. --- include/yaz/wrbuf.h | 27 +++++++++++++++++++++++---- src/opac_to_xml.c | 5 +++-- src/wrbuf.c | 49 +++++++++++++++++-------------------------------- 3 files changed, 43 insertions(+), 38 deletions(-) diff --git a/include/yaz/wrbuf.h b/include/yaz/wrbuf.h index 3864c3e..b583ce2 100644 --- a/include/yaz/wrbuf.h +++ b/include/yaz/wrbuf.h @@ -139,7 +139,22 @@ YAZ_EXPORT void wrbuf_printf(WRBUF b, const char *fmt, ...) #endif ; -/** \brief general writer of string using iconv and cdata +/** \brief General writer of string using iconv and cdata + \param b WRBUF + \param cd iconv handle (0 for no conversion) + \param buf buffer + \param size size of buffer + \param wfunc write handler (that takes WRBUF only) + \returns -1 if invalid sequence was encountered (truncation in effect) + \returns 0 if buffer could be converted and written +*/ +int wrbuf_iconv_write2(WRBUF b, yaz_iconv_t cd, const char *buf, + size_t size, + void (*wfunc)(WRBUF, const char *, size_t)); + +/** \brief writer of string using iconv and cdata + + Obsolete: use wrbuf_iconv_write2 instead. \param b WRBUF \param cd iconv handle (0 for no conversion) \param buf buffer @@ -149,9 +164,13 @@ YAZ_EXPORT void wrbuf_printf(WRBUF b, const char *fmt, ...) \returns 0 if buffer could be converted and written */ int wrbuf_iconv_write_x(WRBUF b, yaz_iconv_t cd, const char *buf, - size_t size, int cdata); + size_t size, int cdata) +#ifdef __GNUC__ + __attribute__ ((deprecated)) +#endif + ; -/** \brief iconv converts buffer and appends to WRBUF +/** \brief Converts buffer using iconv and appends to WRBUF \param b WRBUF \param cd iconv handle \param buf buffer @@ -160,7 +179,7 @@ int wrbuf_iconv_write_x(WRBUF b, yaz_iconv_t cd, const char *buf, YAZ_EXPORT void wrbuf_iconv_write(WRBUF b, yaz_iconv_t cd, const char *buf, size_t size); -/** \brief iconv converts buffer and appends to WRBUF as XML CDATA +/** \brief Converts buffer using iconv and appends to WRBUF as XML CDATA \param b WRBUF \param cd iconv handle \param buf buffer diff --git a/src/opac_to_xml.c b/src/opac_to_xml.c index 2e37091..b96010d 100644 --- a/src/opac_to_xml.c +++ b/src/opac_to_xml.c @@ -31,10 +31,11 @@ static void opac_element_str(WRBUF wrbuf, yaz_iconv_t cd1, yaz_iconv_t cd2, wrbuf_puts(wrbuf, ">"); pos = wrbuf->pos; /* save position */ - if (wrbuf_iconv_write_x(wrbuf, cd1, data, strlen(data), 1) && cd2) + if (wrbuf_iconv_write2(wrbuf, cd1, data, strlen(data), wrbuf_xmlputs_n) + && cd2) { wrbuf->pos = pos; /* rewind to pos */ - wrbuf_iconv_write_x(wrbuf, cd2, data, strlen(data), 1); + wrbuf_iconv_write2(wrbuf, cd2, data, strlen(data), wrbuf_xmlputs_n); } wrbuf_puts(wrbuf, "