From def3dc005778168fb07fa3d9febe3608700715bf Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 10 Jan 2010 16:29:23 +0100 Subject: [PATCH] unistr/u8-mbsnlen: Fix return value for incomplete character. --- ChangeLog | 12 ++++++++++++ lib/unistr/u16-mbsnlen.c | 7 +++++-- lib/unistr/u8-mbsnlen.c | 7 +++++-- modules/unistr/u16-mbsnlen | 2 +- modules/unistr/u8-mbsnlen | 2 +- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc9107f37..38dfa1f52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 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. * lib/wchar.in.h: Treat __need_wint_t like __need_mbstate_t. Reported by Brian Gough and diff --git a/lib/unistr/u16-mbsnlen.c b/lib/unistr/u16-mbsnlen.c index 1bc99690f..601d81d6e 100644 --- a/lib/unistr/u16-mbsnlen.c +++ b/lib/unistr/u16-mbsnlen.c @@ -28,12 +28,15 @@ u16_mbsnlen (const uint16_t *s, size_t n) 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 index 913bbf0d2..9ddc42ea2 100644 --- a/lib/unistr/u8-mbsnlen.c +++ b/lib/unistr/u8-mbsnlen.c @@ -28,12 +28,15 @@ u8_mbsnlen (const uint8_t *s, size_t n) 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 index ae5713dbf..6d8ba47e1 100644 --- a/modules/unistr/u16-mbsnlen +++ b/modules/unistr/u16-mbsnlen @@ -6,7 +6,7 @@ lib/unistr/u16-mbsnlen.c Depends-on: unistr/base -unistr/u16-mblen +unistr/u16-mbtoucr configure.ac: diff --git a/modules/unistr/u8-mbsnlen b/modules/unistr/u8-mbsnlen index 4508817e3..eaa6e1f51 100644 --- a/modules/unistr/u8-mbsnlen +++ b/modules/unistr/u8-mbsnlen @@ -6,7 +6,7 @@ lib/unistr/u8-mbsnlen.c Depends-on: unistr/base -unistr/u8-mblen +unistr/u8-mbtoucr configure.ac: -- 2.11.0