X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficu_sortkey.c;h=ceffa5974f0e51e36544dc68ea7075322bfdff3c;hp=813005520190e46536f12a29787f36408fc9c681;hb=1d3538f5ffc0a38434e421ae3f2c34618b50d392;hpb=88d3bedf772316f87e1996f655ccf8d1e2589755 diff --git a/src/icu_sortkey.c b/src/icu_sortkey.c index 8130055..ceffa59 100644 --- a/src/icu_sortkey.c +++ b/src/icu_sortkey.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2010 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ @@ -27,17 +27,20 @@ #include /* char names */ void icu_sortkey8_from_utf16(UCollator *coll, - struct icu_buf_utf8 * dest8, - struct icu_buf_utf16 * src16, + struct icu_buf_utf8 *dest8, + struct icu_buf_utf16 *src16, UErrorCode * status) -{ +{ int32_t sortkey_len = 0; + /* we'll fake a capacity of one less, because it turns out + that ucol_getSortKey writes ONE character too much */ + int32_t cap = dest8->utf8_cap ? dest8->utf8_cap - 1 : 0; sortkey_len = ucol_getSortKey(coll, src16->utf16, src16->utf16_len, - dest8->utf8, dest8->utf8_cap); + dest8->utf8, cap); /* check for buffer overflow, resize and retry */ - if (sortkey_len > dest8->utf8_cap) + if (sortkey_len > cap) { icu_buf_utf8_resize(dest8, sortkey_len * 2); sortkey_len = ucol_getSortKey(coll, src16->utf16, src16->utf16_len, @@ -47,7 +50,7 @@ void icu_sortkey8_from_utf16(UCollator *coll, if (U_SUCCESS(*status) && sortkey_len > 0) dest8->utf8_len = sortkey_len; - else + else icu_buf_utf8_clear(dest8); }