GitLab repository storage has been migrated to hashed layout. Please contact Infrastructure team if you notice any issues with repositories or hooks.

Commit 8f05c1da authored by Matthias Clasen's avatar Matthias Clasen Committed by Matthias Clasen

Fix the pthread compiler flag detection.

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)
parent c2441aea
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
......
......@@ -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;}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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__ */
......@@ -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"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment