GNU readline() mistakenly sets the LC_CTYPE locale.

This is evil.  Only the user or the app's main() should do this!
We must save and restore the locale around the rl_initialize() call.
This commit is contained in:
Guido van Rossum 2002-10-09 21:27:33 +00:00
parent 8052f8921e
commit 60c8a3aba8

View File

@ -12,6 +12,15 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
/* GNU readline() mistakenly sets the LC_CTYPE locale.
* This is evil. Only the user or the app's main() should do this!
* We must save and restore the locale around the rl_initialize() call.
*/
#define SAVE_LOCALE
#include <locale.h>
#endif
/* GNU readline definitions */ /* GNU readline definitions */
#undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */ #undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
#include <readline/readline.h> #include <readline/readline.h>
@ -538,6 +547,10 @@ flex_complete(char *text, int start, int end)
static void static void
setup_readline(void) setup_readline(void)
{ {
#ifdef SAVE_LOCALE
char *saved_locale = setlocale(LC_CTYPE, NULL);
#endif
using_history(); using_history();
rl_readline_name = "python"; rl_readline_name = "python";
@ -571,6 +584,10 @@ setup_readline(void)
* inside this function. Nothing we can do about it. * inside this function. Nothing we can do about it.
*/ */
rl_initialize(); rl_initialize();
#ifdef SAVE_LOCALE
setlocale(LC_CTYPE, saved_locale); /* Restore locale */
#endif
} }