X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficu_utf16.c;h=466f7af80ec73d5871d46f5cc39a99b6275361a3;hp=65298c255b20643580e6d6ff6c8f5a2f9790ac75;hb=8e4840a9a7b6117d92d9d97fdb4048a7f8b9ce09;hpb=9f85f4de3ec88e4b76240c9fdb112a3dbbb6e34e diff --git a/src/icu_utf16.c b/src/icu_utf16.c index 65298c2..466f7af 100644 --- a/src/icu_utf16.c +++ b/src/icu_utf16.c @@ -22,6 +22,7 @@ #include #include #include +#include #include /* some more string fcns*/ #include /* char names */ @@ -68,17 +69,14 @@ struct icu_buf_utf16 * icu_buf_utf16_resize(struct icu_buf_utf16 * buf16, else buf16->utf16 = (UChar *) xrealloc(buf16->utf16, sizeof(UChar) * capacity); - - icu_buf_utf16_clear(buf16); - buf16->utf16_cap = capacity; } else { xfree(buf16->utf16); buf16->utf16 = 0; buf16->utf16_len = 0; - buf16->utf16_cap = 0; } + buf16->utf16_cap = capacity; return buf16; } @@ -98,6 +96,27 @@ struct icu_buf_utf16 * icu_buf_utf16_copy(struct icu_buf_utf16 * dest16, return dest16; } + +struct icu_buf_utf16 *icu_buf_utf16_append(struct icu_buf_utf16 *dest16, + const struct icu_buf_utf16 * src16) +{ + assert(dest16); + if (!src16) + return dest16; + if (dest16 == src16) + return 0; + + if (dest16->utf16_cap <= src16->utf16_len + dest16->utf16_len) + icu_buf_utf16_resize(dest16, dest16->utf16_len + src16->utf16_len * 2); + + u_strncpy(dest16->utf16 + dest16->utf16_len, + src16->utf16, src16->utf16_len); + dest16->utf16_len += src16->utf16_len; + + return dest16; +} + + void icu_buf_utf16_destroy(struct icu_buf_utf16 * buf16) { if (buf16) @@ -105,6 +124,21 @@ void icu_buf_utf16_destroy(struct icu_buf_utf16 * buf16) xfree(buf16); } +void icu_buf_utf16_log(const char *lead, struct icu_buf_utf16 *src16) +{ + if (src16) + { + struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0); + UErrorCode status = U_ZERO_ERROR; + icu_utf16_to_utf8(dst8, src16, &status); + yaz_log(YLOG_LOG, "%s=%s", lead, dst8->utf8); + icu_buf_utf8_destroy(dst8); + } + else + { + yaz_log(YLOG_LOG, "%s=NULL", lead); + } +} #endif /* YAZ_HAVE_ICU */