X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fi18n.c;h=f8e5e396e865efe267155f29f02aa29fb024649f;hb=9a331fe64eb814ae5c1322e21717a04fb254bf65;hp=db851217c80be27ae129a9c6252824929af51785;hpb=a1efcf97ca2f75f4be6a0389ff2372c03ed2d4e1;p=pspp-builds.git diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c index db851217..f8e5e396 100644 --- a/src/libpspp/i18n.c +++ b/src/libpspp/i18n.c @@ -35,8 +35,8 @@ #endif -static char *locale = 0; -static const char *charset; +static char *locale; +static char *charset; static iconv_t convertor[n_CONV]; @@ -165,16 +165,17 @@ void set_pspp_locale (const char *l) { char *current_locale; - const char *current_charset; + char *current_charset; free(locale); locale = strdup(l); - current_locale = setlocale (LC_CTYPE, 0); - current_charset = locale_charset (); + current_locale = strdup (setlocale (LC_CTYPE, 0)); + current_charset = strdup (locale_charset ()); setlocale (LC_CTYPE, locale); - charset = locale_charset (); + free (charset); + charset = strdup (locale_charset ()); setlocale (LC_CTYPE, current_locale); iconv_close (convertor[CONV_PSPP_TO_UTF8]); @@ -185,6 +186,9 @@ set_pspp_locale (const char *l) iconv_close (convertor[CONV_UTF8_TO_PSPP]); convertor[CONV_UTF8_TO_PSPP] = create_iconv (charset, "UTF-8"); + + free (current_locale); + free (current_charset); } void @@ -194,7 +198,9 @@ i18n_init (void) locale = strdup (setlocale (LC_CTYPE, NULL)); setlocale (LC_CTYPE, locale); - charset = locale_charset (); + + free (charset); + charset = strdup (locale_charset ()); convertor[CONV_PSPP_TO_UTF8] = create_iconv ("UTF-8", charset); convertor[CONV_SYSTEM_TO_PSPP] = create_iconv (charset, charset); @@ -227,7 +233,7 @@ get_system_decimal (void) { char radix_char; - char *ol = setlocale (LC_NUMERIC, NULL); + char *ol = strdup (setlocale (LC_NUMERIC, NULL)); setlocale (LC_NUMERIC, ""); #if HAVE_NL_LANGINFO @@ -243,6 +249,7 @@ get_system_decimal (void) /* We MUST leave LC_NUMERIC untouched, since it would otherwise interfere with data_{in,out} */ setlocale (LC_NUMERIC, ol); + free (ol); return radix_char; }