# HG changeset patch # User Bruno Haible # Date 1263137363 -3600 # Node ID 50397cca5c76e9fbf59547c39ca5649dd52a3984 # Parent c2fcdc831f5b093aca42c11f34a93143c8aace3b unistr/u8-mbsnlen: Fix return value for incomplete character. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-01-10 Bruno Haible + + unistr/u8-mbsnlen: Fix return value for incomplete character. + * lib/unistr/u8-mbsnlen.c (u8_mbsnlen): Use u8_mbtoucr instead of + u8_mblen. + * modules/unistr/u8-mbsnlen (Depends-on): Add unistr/u8-mbtoucr. + Remove unistr/u8-mblen. + * lib/unistr/u16-mbsnlen.c (u16_mbsnlen): Use u16_mbtoucr instead of + u16_mblen. + * modules/unistr/u16-mbsnlen (Depends-on): Add unistr/u16-mbtoucr. + Remove unistr/u16-mblen. + 2010-01-10 Bruno Haible wchar: Fix compilation error when is used from coreutils. diff --git a/lib/unistr/u16-mbsnlen.c b/lib/unistr/u16-mbsnlen.c --- a/lib/unistr/u16-mbsnlen.c +++ b/lib/unistr/u16-mbsnlen.c @@ -28,12 +28,15 @@ characters = 0; while (n > 0) { - int count = u16_mblen (s, n); + ucs4_t uc; + int count = u16_mbtoucr (&uc, s, n); + characters++; + if (count == -2) + break; if (count <= 0) count = 1; s += count; n -= count; - characters++; } return characters; } diff --git a/lib/unistr/u8-mbsnlen.c b/lib/unistr/u8-mbsnlen.c --- a/lib/unistr/u8-mbsnlen.c +++ b/lib/unistr/u8-mbsnlen.c @@ -28,12 +28,15 @@ characters = 0; while (n > 0) { - int count = u8_mblen (s, n); + ucs4_t uc; + int count = u8_mbtoucr (&uc, s, n); + characters++; + if (count == -2) + break; if (count <= 0) count = 1; s += count; n -= count; - characters++; } return characters; } diff --git a/modules/unistr/u16-mbsnlen b/modules/unistr/u16-mbsnlen --- a/modules/unistr/u16-mbsnlen +++ b/modules/unistr/u16-mbsnlen @@ -6,7 +6,7 @@ Depends-on: unistr/base -unistr/u16-mblen +unistr/u16-mbtoucr configure.ac: diff --git a/modules/unistr/u8-mbsnlen b/modules/unistr/u8-mbsnlen --- a/modules/unistr/u8-mbsnlen +++ b/modules/unistr/u8-mbsnlen @@ -6,7 +6,7 @@ Depends-on: unistr/base -unistr/u8-mblen +unistr/u8-mbtoucr configure.ac: