Re: glib patches



Mark Murnane <Mark Murnane Sun COM> writes:

>    /*
>     * We use a two pass approach to keep memory management simple
>     */
> -  len = real_toupper (str, len, NULL, locale_type);
> -  result = g_malloc (len + 1);
> -  real_toupper (str, len, result, locale_type);
> +  length = real_toupper (str, len, NULL, locale_type);
> +  result = g_malloc (length + 1);
> +  real_toupper (str, length, result, locale_type);
>    result[len] = '\0';

As some consolation to me for screwing this up in the first place, all
four (!) patches received for this problem contained the same bug
above -- the second call to real_toupper() needs to still use the
original length not the new length. Aside from that, and variable
names, the patch I'm applying doesn't differ substantially.

Regards,
                                        Owen

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/glib/ChangeLog,v
retrieving revision 1.750
diff -u -r1.750 ChangeLog
--- ChangeLog	2001/07/10 22:37:06	1.750
+++ ChangeLog	2001/07/11 15:25:17
@@ -1,3 +1,12 @@
+Wed Jul 11 11:13:50 2001  Owen Taylor  <otaylor redhat com>
+
+	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gunicomp.h
+	(Reported by Sven Neumann).
+
+	* glib/guniprop.c (g_utf8_str/updown) glib/gunicollate.c
+	(g_utf8_collate_key): Fix shadowing problems reported by
+	many (D. Adler, S. Neumann, M. Murmane, L. Peter)
+
 Fri Jul  6 00:02:41 2001  Tim Janik  <timj gtk org>
 
 	* glib/gmessages.c (printf_string_upper_bound): fix negative exponent
Index: glib/Makefile.am
===================================================================
RCS file: /cvs/gnome/glib/glib/Makefile.am,v
retrieving revision 1.87
diff -u -r1.87 Makefile.am
--- glib/Makefile.am	2001/07/02 00:49:20	1.87
+++ glib/Makefile.am	2001/07/11 15:25:17
@@ -50,6 +50,7 @@
 	gunibreak.c		\
 	gunichartables.h	\
 	gunicollate.c		\
+	gunicomp.h		\
 	gunidecomp.h		\
 	gunidecomp.c		\
 	gutils.c
Index: glib/gunicollate.c
===================================================================
RCS file: /cvs/gnome/glib/glib/gunicollate.c,v
retrieving revision 1.2
diff -u -r1.2 gunicollate.c
--- glib/gunicollate.c	2001/07/07 02:42:47	1.2
+++ glib/gunicollate.c	2001/07/11 15:25:17
@@ -165,7 +165,7 @@
 		    gssize       len)
 {
   gchar *result;
-  size_t len;
+  size_t xfrm_len;
   
 #ifdef __STDC_ISO_10646__
 
@@ -176,16 +176,16 @@
 
   setlocale (LC_COLLATE, "");
 
-  len = wcsxfrm (NULL, (wchar_t *)str_norm, 0);
-  result_wc = g_new (wchar_t, len + 1);
-  wcsxfrm (result_wc, (wchar_t *)str_norm, len + 1);
+  xfrm_len = wcsxfrm (NULL, (wchar_t *)str_norm, 0);
+  result_wc = g_new (wchar_t, xfrm_len + 1);
+  wcsxfrm (result_wc, (wchar_t *)str_norm, xfrm_len + 1);
 
-  for (i=0; i < len; i++)
+  for (i=0; i < xfrm_len; i++)
     result_len += utf8_encode (NULL, result_wc[i]);
 
   result = g_malloc (result_len + 1);
   result_len = 0;
-  for (i=0; i < len; i++)
+  for (i=0; i < xfrm_len; i++)
     result_len += utf8_encode (result + result_len, result_wc[i]);
 
   result[result_len] = '\0';
@@ -201,9 +201,9 @@
 
   if (g_get_charset (&charset))
     {
-      len = strxfrm (NULL, str_norm, 0);
-      result = g_malloc (len + 1);
-      strxfrm (result, str_norm, len + 1);
+      xfrm_len = strxfrm (NULL, str_norm, 0);
+      result = g_malloc (xfrm_len + 1);
+      strxfrm (result, str_norm, xfrm_len + 1);
     }
   else
     {
@@ -211,22 +211,21 @@
 
       if (str_locale)
 	{
-	  len = strxfrm (NULL, str_locale, 0);
-	  result = g_malloc (len + 2);
+	  xfrm_len = strxfrm (NULL, str_locale, 0);
+	  result = g_malloc (xfrm_len + 2);
 	  result[0] = 'A';
-	  strxfrm (result + 1, str_locale, len + 1);
+	  strxfrm (result + 1, str_locale, xfrm_len + 1);
 	  
 	  g_free (str_locale);
 	}
       else
 	{
-	  len = strlen (str_norm);
-	  result = g_malloc (len + 2);
+	  xfrm_len = strlen (str_norm);
+	  result = g_malloc (xfrm_len + 2);
 	  result[0] = 'B';
-	  memcpy (result + 1, str_norm, len);
-	  result[len+1] = '\0';
+	  memcpy (result + 1, str_norm, xfrm_len);
+	  result[xfrm_len+1] = '\0';
 	}
-
     }
 
   g_free (str_norm);
Index: glib/guniprop.c
===================================================================
RCS file: /cvs/gnome/glib/glib/guniprop.c,v
retrieving revision 1.9
diff -u -r1.9 guniprop.c
--- glib/guniprop.c	2001/07/07 02:42:47	1.9
+++ glib/guniprop.c	2001/07/11 15:25:17
@@ -711,7 +711,7 @@
 g_utf8_strup (const gchar *str,
 	      gssize       len)
 {
-  gsize len;
+  gsize result_len;
   LocaleType locale_type;
   gchar *result;
 
@@ -722,10 +722,10 @@
   /*
    * We use a two pass approach to keep memory management simple
    */
-  len = real_toupper (str, len, NULL, locale_type);
-  result = g_malloc (len + 1);
+  result_len = real_toupper (str, len, NULL, locale_type);
+  result = g_malloc (result_len + 1);
   real_toupper (str, len, result, locale_type);
-  result[len] = '\0';
+  result[result_len] = '\0';
 
   return result;
 }
@@ -827,7 +827,7 @@
 g_utf8_strdown (const gchar *str,
 		gssize       len)
 {
-  gsize len;
+  gsize result_len;
   LocaleType locale_type;
   gchar *result;
 
@@ -838,10 +838,10 @@
   /*
    * We use a two pass approach to keep memory management simple
    */
-  len = real_tolower (str, len, NULL, locale_type);
-  result = g_malloc (len + 1);
+  result_len = real_tolower (str, len, NULL, locale_type);
+  result = g_malloc (result_len + 1);
   real_tolower (str, len, result, locale_type);
-  result[len] = '\0';
+  result[result_len] = '\0';
 
   return result;
 }




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]