rewrite, based on bug #52328 from Anders
authorHavoc Pennington <hp@redhat.com>
Tue, 20 Mar 2001 21:30:40 +0000 (21:30 +0000)
committerHavoc Pennington <hp@src.gnome.org>
Tue, 20 Mar 2001 21:30:40 +0000 (21:30 +0000)
2001-03-20  Havoc Pennington  <hp@redhat.com>

* gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
Anders

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gutf8.c
gutf8.c

index 5c40cd1..995f57a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 5c40cd1..995f57a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+       * gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+       Anders
+
 2001-03-19  Havoc Pennington  <hp@redhat.com>
 
        * gutf8.c (g_unichar_validate): added this function
index 464ccab..74d053f 100644 (file)
@@ -206,20 +206,35 @@ g_utf8_strlen (const gchar *p, gint max)
 {
   int len = 0;
   const gchar *start = p;
-  /* special case for the empty string */
-  if (!*p) 
-    return 0;
-  /* Note that the test here and the test in the loop differ subtly.
-     In the loop we want to see if we've passed the maximum limit --
-     for instance if the buffer ends mid-character.  Here at the top
-     of the loop we want to see if we've just reached the last byte.  */
-  while (max < 0 || p - start < max)
+
+  if (max < 0)
     {
-      p = g_utf8_next_char (p);
-      ++len;
-      if (! *p || (max > 0 && p - start > max))
-       break;
+      while (*p)
+        {
+          p = g_utf8_next_char (p);
+          ++len;
+        }
+    }
+  else
+    {
+      if (max == 0 || !*p)
+        return 0;
+      
+      p = g_utf8_next_char (p);          
+
+      while (p - start < max && *p)
+        {
+          ++len;
+          p = g_utf8_next_char (p);          
+        }
+
+      /* only do the last len increment if we got a complete
+       * char (don't count partial chars)
+       */
+      if (p - start == max)
+        ++len;
     }
+
   return len;
 }
 
diff --git a/gutf8.c b/gutf8.c
index 464ccab..74d053f 100644 (file)
--- a/gutf8.c
+++ b/gutf8.c
@@ -206,20 +206,35 @@ g_utf8_strlen (const gchar *p, gint max)
 {
   int len = 0;
   const gchar *start = p;
-  /* special case for the empty string */
-  if (!*p) 
-    return 0;
-  /* Note that the test here and the test in the loop differ subtly.
-     In the loop we want to see if we've passed the maximum limit --
-     for instance if the buffer ends mid-character.  Here at the top
-     of the loop we want to see if we've just reached the last byte.  */
-  while (max < 0 || p - start < max)
+
+  if (max < 0)
     {
-      p = g_utf8_next_char (p);
-      ++len;
-      if (! *p || (max > 0 && p - start > max))
-       break;
+      while (*p)
+        {
+          p = g_utf8_next_char (p);
+          ++len;
+        }
+    }
+  else
+    {
+      if (max == 0 || !*p)
+        return 0;
+      
+      p = g_utf8_next_char (p);          
+
+      while (p - start < max && *p)
+        {
+          ++len;
+          p = g_utf8_next_char (p);          
+        }
+
+      /* only do the last len increment if we got a complete
+       * char (don't count partial chars)
+       */
+      if (p - start == max)
+        ++len;
     }
+
   return len;
 }