Fix the pthread compiler flag detection.
authorMatthias Clasen <mclasen@redhat.com>
Sat, 26 Aug 2006 03:44:45 +0000 (03:44 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 26 Aug 2006 03:44:45 +0000 (03:44 +0000)
2006-08-25  Matthias Clasen  <mclasen@redhat.com>

* configure.in: Fix the pthread compiler flag detection.

* glib/gunicode.h:
* glib/gutf8.c (_g_utf8_make_valid): Rename make_valid_utf8
from gconvert.c, move it to gutf8.c, and export it privately.

* glib/gconvert.c (g_filename_display_name): Adjust callers.

* glib/gkeyfile.c: Use _g_utf8_make_valid() in a number of
places to ensure error messages are valid UTF-8.  (#351853,
Simon Budig)

ChangeLog
configure.in
glib/gconvert.c
glib/gkeyfile.c
glib/gunicode.h
glib/gutf8.c

index 8499c10..4dd1cee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2006-08-25  Matthias Clasen  <mclasen@redhat.com>
+
+       * configure.in: Fix the pthread compiler flag detection.
+
+       * glib/gunicode.h: 
+       * glib/gutf8.c (_g_utf8_make_valid): Rename make_valid_utf8
+       from gconvert.c, move it to gutf8.c, and export it privately.
+
+       * glib/gconvert.c (g_filename_display_name): Adjust callers.
+
+       * glib/gkeyfile.c: Use _g_utf8_make_valid() in a number of
+       places to ensure error messages are valid UTF-8.  (#351853,
+       Simon Budig)
+
 2006-08-22  Matthias Clasen <mclasen@redhat.com>
 
        * Branch for 2.12
index 0625eb5..4f78684 100644 (file)
@@ -856,6 +856,12 @@ AC_MSG_RESULT(unsigned $glib_size_type)
 
 # Check for some functions
 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf setenv unsetenv getc_unlocked readlink symlink)
+AC_CHECK_FUNCS(clock_gettime, [], [
+  AC_CHECK_LIB(rt, clock_gettime, [
+    AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
+    LIBS="$LIBS -lrt"
+  ])
+])
 
 AC_CHECK_HEADERS(crt_externs.h)
 AC_CHECK_FUNCS(_NSGetEnviron)
@@ -1539,6 +1545,7 @@ dnl
 dnl Test program for basic POSIX threads functionality
 dnl
 m4_define([glib_thread_test],[
+#include <stdlib.h>
 #include <pthread.h> 
 int check_me = 0;
 void* func(void* data) {check_me = 42; return &check_me;}
index 3f562d1..c5e4f50 100644 (file)
@@ -31,6 +31,7 @@
 #include "glib.h"
 #include "gprintfint.h"
 #include "gthreadprivate.h"
+#include "gunicode.h"
 
 #ifdef G_PLATFORM_WIN32
 #define STRICT
@@ -1972,44 +1973,6 @@ g_uri_list_extract_uris (const gchar *uri_list)
   return result;
 }
 
-static gchar *
-make_valid_utf8 (const gchar *name)
-{
-  GString *string;
-  const gchar *remainder, *invalid;
-  gint remaining_bytes, valid_bytes;
-  
-  string = NULL;
-  remainder = name;
-  remaining_bytes = strlen (name);
-  
-  while (remaining_bytes != 0) 
-    {
-      if (g_utf8_validate (remainder, remaining_bytes, &invalid)) 
-       break;
-      valid_bytes = invalid - remainder;
-    
-      if (string == NULL) 
-       string = g_string_sized_new (remaining_bytes);
-
-      g_string_append_len (string, remainder, valid_bytes);
-      /* append U+FFFD REPLACEMENT CHARACTER */
-      g_string_append (string, "\357\277\275");
-      
-      remaining_bytes -= valid_bytes + 1;
-      remainder = invalid + 1;
-    }
-  
-  if (string == NULL)
-    return g_strdup (name);
-  
-  g_string_append (string, remainder);
-
-  g_assert (g_utf8_validate (string->str, -1, NULL));
-  
-  return g_string_free (string, FALSE);
-}
-
 /**
  * g_filename_display_basename:
  * @filename: an absolute pathname in the GLib file name encoding
@@ -2110,7 +2073,7 @@ g_filename_display_name (const gchar *filename)
    * by a question mark
    */
   if (!display_name) 
-    display_name = make_valid_utf8 (filename);
+    display_name = _g_utf8_make_valid (filename);
 
   return display_name;
 }
index ef05dd0..3ab7823 100644 (file)
@@ -690,10 +690,14 @@ g_key_file_parse_line (GKeyFile     *key_file,
                                     &parse_error);
   else
     {
+      gchar *line_utf8 = _g_utf8_make_valid (line);
       g_set_error (error, G_KEY_FILE_ERROR,
                    G_KEY_FILE_ERROR_PARSE,
                    _("Key file contains line '%s' which is not "
-                     "a key-value pair, group, or comment"), line);
+                     "a key-value pair, group, or comment"), 
+                  line_utf8);
+      g_free (line_utf8);
+
       return;
     }
 
@@ -801,9 +805,12 @@ g_key_file_parse_key_value_pair (GKeyFile     *key_file,
     {
       if (g_ascii_strcasecmp (value, "UTF-8") != 0)
         {
+         gchar *value_utf8 = _g_utf8_make_valid (value);
           g_set_error (error, G_KEY_FILE_ERROR,
                        G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
-                       _("Key file contains unsupported encoding '%s'"), value);
+                       _("Key file contains unsupported "
+                        "encoding '%s'"), value_utf8);
+         g_free (value_utf8);
 
           g_free (key);
           g_free (value);
@@ -1280,11 +1287,14 @@ g_key_file_get_string (GKeyFile     *key_file,
 
   if (!g_utf8_validate (value, -1, NULL))
     {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
       g_set_error (error, G_KEY_FILE_ERROR,
                    G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
                    _("Key file contains key '%s' with value '%s' "
-                     "which is not UTF-8"), key, value);
+                     "which is not UTF-8"), key, value_utf8);
+      g_free (value_utf8);
       g_free (value);
+
       return NULL;
     }
 
@@ -1389,11 +1399,14 @@ g_key_file_get_string_list (GKeyFile     *key_file,
 
   if (!g_utf8_validate (value, -1, NULL))
     {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
       g_set_error (error, G_KEY_FILE_ERROR,
                    G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
                    _("Key file contains key '%s' with value '%s' "
-                     "which is not UTF-8"), key, value);
+                     "which is not UTF-8"), key, value_utf8);
+      g_free (value_utf8);
       g_free (value);
+
       return NULL;
     }
 
@@ -1587,7 +1600,7 @@ g_key_file_get_locale_string (GKeyFile     *key_file,
                                                candidate_key, NULL);
       g_free (candidate_key);
 
-      if (translated_value && g_utf8_validate (translated_value, -1, NULL))
+      if (translated_value)
        break;
 
       g_free (translated_value);
@@ -3432,19 +3445,27 @@ g_key_file_parse_value_as_integer (GKeyFile     *key_file,
 
   if (*value == '\0' || *end_of_valid_int != '\0')
     {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
       g_set_error (error, G_KEY_FILE_ERROR,
                   G_KEY_FILE_ERROR_INVALID_VALUE,
-                  _("Value '%s' cannot be interpreted as a number."), value);
+                  _("Value '%s' cannot be interpreted "
+                    "as a number."), value_utf8);
+      g_free (value_utf8);
+
       return 0;
     }
 
   int_value = long_value;
   if (int_value != long_value || errno == ERANGE)
     {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
       g_set_error (error,
                   G_KEY_FILE_ERROR, 
                   G_KEY_FILE_ERROR_INVALID_VALUE,
-                  _("Integer value '%s' out of range"), value);
+                  _("Integer value '%s' out of range"), 
+                  value_utf8);
+      g_free (value_utf8);
+
       return 0;
     }
   
@@ -3470,9 +3491,15 @@ g_key_file_parse_value_as_double  (GKeyFile     *key_file,
   double_value = g_ascii_strtod (value, &end_of_valid_d);
 
   if (*end_of_valid_d != '\0' || end_of_valid_d == value)
-    g_set_error (error, G_KEY_FILE_ERROR,
-                 G_KEY_FILE_ERROR_INVALID_VALUE,
-                 _("Value '%s' cannot be interpreted as a float number."), value);
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error, G_KEY_FILE_ERROR,
+                  G_KEY_FILE_ERROR_INVALID_VALUE,
+                  _("Value '%s' cannot be interpreted "
+                    "as a float number."), 
+                  value_utf8);
+      g_free (value_utf8);
+    }
 
   return double_value;
 }
@@ -3482,6 +3509,8 @@ g_key_file_parse_value_as_boolean (GKeyFile     *key_file,
                                   const gchar  *value,
                                   GError      **error)
 {
+  gchar *value_utf8;
+
   if (value)
     {
       if (strcmp (value, "true") == 0 || strcmp (value, "1") == 0)
@@ -3490,9 +3519,12 @@ g_key_file_parse_value_as_boolean (GKeyFile     *key_file,
         return FALSE;
     }
 
+  value_utf8 = _g_utf8_make_valid (value);
   g_set_error (error, G_KEY_FILE_ERROR,
                G_KEY_FILE_ERROR_INVALID_VALUE,
-               _("Value '%s' cannot be interpreted as a boolean."), value);
+               _("Value '%s' cannot be interpreted "
+                "as a boolean."), value_utf8);
+  g_free (value_utf8);
 
   return FALSE;
 }
index 35e2d1d..a358dc1 100644 (file)
@@ -292,6 +292,11 @@ gchar *g_utf8_collate_key_for_filename (const gchar *str,
 gboolean g_unichar_get_mirror_char (gunichar ch,
                                     gunichar *mirrored_ch);
 
+/* private */
+
+gchar *_g_utf8_make_valid (const gchar *name);
+
+
 G_END_DECLS
 
 #endif /* __G_UNICODE_H__ */
index e9c70c7..84d3552 100644 (file)
@@ -1799,5 +1799,45 @@ g_utf8_strreverse (const gchar *str,
   return result;
 }
 
+
+gchar *
+_g_utf8_make_valid (const gchar *name)
+{
+  GString *string;
+  const gchar *remainder, *invalid;
+  gint remaining_bytes, valid_bytes;
+  
+  string = NULL;
+  remainder = name;
+  remaining_bytes = strlen (name);
+  
+  while (remaining_bytes != 0) 
+    {
+      if (g_utf8_validate (remainder, remaining_bytes, &invalid)) 
+       break;
+      valid_bytes = invalid - remainder;
+    
+      if (string == NULL) 
+       string = g_string_sized_new (remaining_bytes);
+
+      g_string_append_len (string, remainder, valid_bytes);
+      /* append U+FFFD REPLACEMENT CHARACTER */
+      g_string_append (string, "\357\277\275");
+      
+      remaining_bytes -= valid_bytes + 1;
+      remainder = invalid + 1;
+    }
+  
+  if (string == NULL)
+    return g_strdup (name);
+  
+  g_string_append (string, remainder);
+
+  g_assert (g_utf8_validate (string->str, -1, NULL));
+  
+  return g_string_free (string, FALSE);
+}
+
+
 #define __G_UTF8_C__
 #include "galiasdef.c"