tConvert config variable strings from UTF-8 to the locale's codeset when writin… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5df905e8ef3931c4f1c3e66b6c1d5ce333617f2b | |
parent aae2d4fec33b36d3dd3cee90a40092ed5685bd32 | |
Author: Ben Webb <[email protected]> | |
Date: Wed, 31 Jul 2002 16:31:01 +0000 | |
Convert config variable strings from UTF-8 to the locale's codeset when | |
writing the configuration file, so that the GTK+2.0 client works consistently | |
in non-UTF8 locales. | |
Diffstat: | |
M src/configfile.c | 30 +++++++++++++++++++++++++++++- | |
1 file changed, 29 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/src/configfile.c b/src/configfile.c | |
t@@ -77,6 +77,30 @@ static void PrintEscaped(FILE *fp, gchar *str) | |
} | |
/* | |
+ * Converts the given string from UTF-8 to the locale's codeset. If the | |
+ * locale codeset already is UTF-8, returns a copy of the original | |
+ * string. The returned string is dynamically allocated, and should be | |
+ * later g_free'd by the caller. | |
+ */ | |
+static gchar *ToLocaleCodeset(const gchar *origstr) | |
+{ | |
+#ifdef HAVE_GLIB2 | |
+ if (!g_get_charset(NULL)) { | |
+ gchar *convstr = g_locale_from_utf8(origstr, -1, NULL, NULL, NULL); | |
+ if (convstr) { | |
+ return convstr; | |
+ } else { | |
+ return g_strdup("[Could not convert string from UTF8]"); | |
+ } | |
+ } else { | |
+ return g_strdup(origstr); | |
+ } | |
+#else | |
+ return g_strdup(origstr); | |
+#endif | |
+} | |
+ | |
+/* | |
* Writes a single configuration file variable (identified by GlobalIndex | |
* and StructIndex) to the specified file, in a format suitable for reading | |
* back in (via. ParseNextConfig and friends). | |
t@@ -106,8 +130,12 @@ static void WriteConfigValue(FILE *fp, int GlobalIndex, i… | |
fprintf(fp, "%s = %s\n", GlobalName, prstr); | |
g_free(prstr); | |
} else if (Globals[GlobalIndex].StringVal) { | |
+ gchar *convstr; | |
+ | |
fprintf(fp, "%s = \"", GlobalName); | |
- PrintEscaped(fp, *GetGlobalString(GlobalIndex, StructIndex)); | |
+ convstr = ToLocaleCodeset(*GetGlobalString(GlobalIndex, StructIndex)); | |
+ PrintEscaped(fp, convstr); | |
+ g_free(convstr); | |
fprintf(fp, "\"\n"); | |
} else if (Globals[GlobalIndex].StringList) { | |
int i; |