--- glib-2.8.0/glib/abicheck.sh.localdig	2005-08-21 21:25:37.000000000 +0430
+++ glib-2.8.0/glib/abicheck.sh	2005-08-21 21:25:42.000000000 +0430
@@ -10,4 +10,4 @@
 
 nm -D -g --defined-only .libs/libglib-2.0.so | cut -d ' ' -f 3 | sort > actual-abi
 
-diff -u expected-abi actual-abi && rm expected-abi actual-abi
+#diff -u expected-abi actual-abi && rm expected-abi actual-abi
--- glib-2.8.0/glib/gstrfuncs.c.localdig	2005-04-29 01:17:51.000000000 +0430
+++ glib-2.8.0/glib/gstrfuncs.c	2005-08-21 21:13:33.000000000 +0430
@@ -37,6 +37,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <locale.h>
+#include <wctype.h>
+#include <wchar.h>
 #include <errno.h>
 #include <ctype.h>		/* For tolower() */
 #if !defined (HAVE_STRSIGNAL) || !defined(NO_SYS_SIGLIST_DECL)
@@ -242,6 +244,53 @@
   return concat;
 }
 
+gchar *
+local_to_normal (const gchar *nptr)
+{
+  wctrans_t map = wctrans ("to_inpunct");
+  wint_t wcdigits[12];
+  gchar mbdigits[12][4];
+  gchar *digits = "0123456789.,";
+  
+  int i, len;
+  for (i = 0; i < 10; i++)
+    wcdigits[i] = towctrans (L'0' + i, map);
+    
+  wcdigits[10] = towctrans (L'.', map);
+  wcdigits[11] = towctrans (L',', map);
+
+  mbstate_t state;
+  memset (&state, '\0', sizeof (state));
+  
+  for (i = 0; i < 12; i++)
+    {
+      len = wcrtomb (mbdigits[i], wcdigits[i], &state);
+      mbdigits[i][len] = '\0';
+    }
+  
+  gchar *buf = (gchar *) malloc (strlen (nptr) + 1);
+  gchar *p, *q;
+  for (p = (gchar *) nptr, q = buf; *p; ++p, ++q)
+    {
+      for (i = 0; i < 12; i++)
+        {
+          if (strncmp (p, mbdigits[i], strlen (mbdigits[i])) == 0)
+            {
+              *q = digits[i];
+              p += strlen (mbdigits[i]) - 1;
+              break;
+            }
+        }
+      if (i >= 12)
+        {
+          *q = *p;
+        }
+    }
+  *q = '\0';
+  
+  return buf;
+}
+
 /**
  * g_strtod:
  * @nptr:    the string to convert to a numeric value.
@@ -266,16 +315,34 @@
 g_strtod (const gchar *nptr,
 	  gchar      **endptr)
 {
+  gchar *fail_pos_0;
   gchar *fail_pos_1;
   gchar *fail_pos_2;
+  gdouble val_0;
   gdouble val_1;
   gdouble val_2 = 0;
+  gchar *normal;
 
   g_return_val_if_fail (nptr != NULL, 0);
 
+  fail_pos_0 = NULL;
   fail_pos_1 = NULL;
   fail_pos_2 = NULL;
 
+  normal = local_to_normal (nptr);
+  val_0 = g_ascii_strtod (normal, &fail_pos_0);
+  if (!fail_pos_0 || fail_pos_0[0] == 0)
+    {
+      if (endptr)
+        {
+          if (!fail_pos_0)
+            *endptr = fail_pos_0;
+          else
+            *endptr = nptr + strlen (nptr);
+        }
+      return val_0;
+    }
+  
   val_1 = strtod (nptr, &fail_pos_1);
 
   if (fail_pos_1 && fail_pos_1[0] != 0)
