rewrite, based on bug #52328 from Anders

2001-03-20  Havoc Pennington  <hp@redhat.com>

	* gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
	Anders
This commit is contained in:
Havoc Pennington 2001-03-20 21:30:40 +00:00 committed by Havoc Pennington
parent fad8693b76
commit 767800fcb3
10 changed files with 94 additions and 24 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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;
}

39
gutf8.c
View 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;
}