X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficu_utf8.c;h=ee670a17912a0100737bc38032bd14c6b80c23d3;hp=dda623154eb2508cb766a5702ff8ff1414a9726d;hb=5f5ce1a79c4061098904a01ff9c9e723e9d6e7b9;hpb=9c0e939209ea21db376876168faa4e6563d3ac16 diff --git a/src/icu_utf8.c b/src/icu_utf8.c index dda6231..ee670a1 100644 --- a/src/icu_utf8.c +++ b/src/icu_utf8.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ @@ -28,23 +28,22 @@ struct icu_buf_utf8 *icu_buf_utf8_create(size_t capacity) { - struct icu_buf_utf8 * buf8 + struct icu_buf_utf8 *buf8 = (struct icu_buf_utf8 *) xmalloc(sizeof(struct icu_buf_utf8)); - buf8->utf8 = 0; buf8->utf8_len = 0; - buf8->utf8_cap = 0; - + buf8->utf8_cap = capacity; if (capacity > 0) { buf8->utf8 = (uint8_t *) xmalloc(sizeof(uint8_t) * capacity); buf8->utf8[0] = (uint8_t) 0; - buf8->utf8_cap = capacity; } + else + buf8->utf8 = 0; return buf8; } -struct icu_buf_utf8 * icu_buf_utf8_clear(struct icu_buf_utf8 * buf8) +struct icu_buf_utf8 *icu_buf_utf8_clear(struct icu_buf_utf8 *buf8) { if (buf8) { @@ -55,29 +54,29 @@ struct icu_buf_utf8 * icu_buf_utf8_clear(struct icu_buf_utf8 * buf8) return buf8; } -struct icu_buf_utf8 * icu_buf_utf8_resize(struct icu_buf_utf8 * buf8, - size_t capacity) +struct icu_buf_utf8 *icu_buf_utf8_resize(struct icu_buf_utf8 *buf8, + size_t capacity) { if (!buf8) return 0; - if (capacity > 0) + if (capacity > 0) { if (0 == buf8->utf8) buf8->utf8 = (uint8_t *) xmalloc(sizeof(uint8_t) * capacity); else - buf8->utf8 + buf8->utf8 = (uint8_t *) xrealloc(buf8->utf8, sizeof(uint8_t) * capacity); - + buf8->utf8_cap = capacity; - } - else { + } + else + { xfree(buf8->utf8); buf8->utf8 = 0; - buf8->utf8_len = 0; buf8->utf8_cap = 0; } - + return buf8; } @@ -94,27 +93,27 @@ const char *icu_buf_utf8_to_cstr(struct icu_buf_utf8 *src8) return (const char *) src8->utf8; } -void icu_buf_utf8_destroy(struct icu_buf_utf8 * buf8) +void icu_buf_utf8_destroy(struct icu_buf_utf8 *buf8) { if (buf8) xfree(buf8->utf8); xfree(buf8); } -UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 * dest16, - const char * src8cstr, - UErrorCode * status) +UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 *dest16, + const char *src8cstr, + UErrorCode *status) { size_t src8cstr_len = 0; int32_t utf16_len = 0; *status = U_ZERO_ERROR; src8cstr_len = strlen(src8cstr); - + u_strFromUTF8(dest16->utf16, dest16->utf16_cap, &utf16_len, src8cstr, src8cstr_len, status); - + /* check for buffer overflow, resize and retry */ if (*status == U_BUFFER_OVERFLOW_ERROR) { @@ -125,25 +124,24 @@ UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 * dest16, src8cstr, src8cstr_len, status); } - if (U_SUCCESS(*status) - && utf16_len <= dest16->utf16_cap) + if (U_SUCCESS(*status) && utf16_len <= dest16->utf16_cap) dest16->utf16_len = utf16_len; - else + else icu_buf_utf16_clear(dest16); - + return *status; } UErrorCode icu_utf16_to_utf8(struct icu_buf_utf8 *dest8, const struct icu_buf_utf16 *src16, - UErrorCode * status) + UErrorCode *status) { int32_t utf8_len = 0; - + u_strToUTF8((char *) dest8->utf8, dest8->utf8_cap, &utf8_len, src16->utf16, src16->utf16_len, status); - + /* check for buffer overflow, resize and retry */ if (*status == U_BUFFER_OVERFLOW_ERROR) { @@ -154,12 +152,11 @@ UErrorCode icu_utf16_to_utf8(struct icu_buf_utf8 *dest8, src16->utf16, src16->utf16_len, status); } - if (U_SUCCESS(*status) - && utf8_len <= dest8->utf8_cap) + if (U_SUCCESS(*status) && utf8_len <= dest8->utf8_cap) dest8->utf8_len = utf8_len; - else + else icu_buf_utf8_clear(dest8); - + return *status; }