From: Bruno Haible Date: Sun, 10 Jan 2010 15:29:23 +0000 (+0100) Subject: unistr/u8-mbsnlen: Fix return value for incomplete character. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=def3dc005778168fb07fa3d9febe3608700715bf;p=pspp unistr/u8-mbsnlen: Fix return value for incomplete character. --- diff --git a/ChangeLog b/ChangeLog index bc9107f37e..38dfa1f52e 100644 --- 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 index 1bc99690fa..601d81d6e1 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 913bbf0d23..9ddc42ea2f 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 ae5713dbfb..6d8ba47e1b 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 4508817e36..eaa6e1f51f 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: