mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
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)
This commit is contained in:
parent
c2441aea68
commit
8f05c1da81
14
ChangeLog
14
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
|
||||
|
@ -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__ */
|
||||
|
40
glib/gutf8.c
40
glib/gutf8.c
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user