unistr/u8-mbsnlen: Fix return value for incomplete character.
authorBruno Haible <bruno@clisp.org>
Sun, 10 Jan 2010 15:29:23 +0000 (16:29 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 10 Jan 2010 15:29:23 +0000 (16:29 +0100)
ChangeLog
lib/unistr/u16-mbsnlen.c
lib/unistr/u8-mbsnlen.c
modules/unistr/u16-mbsnlen
modules/unistr/u8-mbsnlen

index bc9107f37ea419a3c4f4335754e4f52a7330e4a6..38dfa1f52ee8c1e078d97638c82b0926ae45907e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-01-10  Bruno Haible  <bruno@clisp.org>
+
+       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  <bruno@clisp.org>
 
        wchar: Fix compilation error when <wchar.h> is used from coreutils.
index 1bc99690fa28c1233019e9bea500df699313528c..601d81d6e195a60e1c0af6098959eb004776883a 100644 (file)
@@ -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;
 }
index 913bbf0d234b2655994bbe24a07ada98ef0c4580..9ddc42ea2f0c4a74b24189a3ef26c440f7e24f11 100644 (file)
@@ -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;
 }
index ae5713dbfb07dbcbb837d8cd268563b33b83645c..6d8ba47e1b6efb1b2c47a19e3ebf4fc492b6b83b 100644 (file)
@@ -6,7 +6,7 @@ lib/unistr/u16-mbsnlen.c
 
 Depends-on:
 unistr/base
-unistr/u16-mblen
+unistr/u16-mbtoucr
 
 configure.ac:
 
index 4508817e36b35cccf92f53d5660e23a21cf9b216..eaa6e1f51f240191097c2056bd5af6a31b61bc5c 100644 (file)
@@ -6,7 +6,7 @@ lib/unistr/u8-mbsnlen.c
 
 Depends-on:
 unistr/base
-unistr/u8-mblen
+unistr/u8-mbtoucr
 
 configure.ac: