mirror of
https://github.com/python/cpython.git
synced 2024-12-12 03:04:15 +08:00
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:
parent
8052f8921e
commit
60c8a3aba8
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user