diff options
author | Benjamin Peterson <benjamin@python.org> | 2014-09-29 19:12:44 -0400 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2014-09-29 19:12:44 -0400 |
commit | d9f9f1dbca05325ba55e87351f8d4e7b8078c899 (patch) | |
tree | 81f5e08fc1c3dd2c1bd3b0b9f3f41f4b31f01c0a /Python/pythonrun.c | |
parent | 59fde797106e76ff93b72c435657174271545eef (diff) | |
parent | 2d21af3ea61d854f2f2dcf376e0a380a7cc2709e (diff) | |
download | cpython-d9f9f1dbca05325ba55e87351f8d4e7b8078c899.tar.gz |
merge 3.4
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 0327830247..bac39c23b4 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -15,6 +15,7 @@ #include "ast.h" #include "marshal.h" #include "osdefs.h" +#include <locale.h> #ifdef HAVE_SIGNAL_H #include <signal.h> @@ -25,7 +26,6 @@ #endif #ifdef HAVE_LANGINFO_H -#include <locale.h> #include <langinfo.h> #endif @@ -452,7 +452,8 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) if (_PyFaulthandler_Init()) Py_FatalError("Py_Initialize: can't initialize faulthandler"); - _PyTime_Init(); + if (_PyTime_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize time"); if (initfsencoding(interp) < 0) Py_FatalError("Py_Initialize: unable to load the file system codec"); @@ -1160,6 +1161,15 @@ initstdio(void) encoding = _Py_StandardStreamEncoding; errors = _Py_StandardStreamErrors; if (!encoding || !errors) { + if (!errors) { + /* When the LC_CTYPE locale is the POSIX locale ("C locale"), + stdin and stdout use the surrogateescape error handler by + default, instead of the strict error handler. */ + char *loc = setlocale(LC_CTYPE, NULL); + if (loc != NULL && strcmp(loc, "C") == 0) + errors = "surrogateescape"; + } + pythonioencoding = Py_GETENV("PYTHONIOENCODING"); if (pythonioencoding) { char *err; @@ -1172,7 +1182,7 @@ initstdio(void) if (err) { *err = '\0'; err++; - if (*err && !errors) { + if (*err && !_Py_StandardStreamErrors) { errors = err; } } @@ -1729,7 +1739,7 @@ print_error_text(PyObject *f, int offset, PyObject *text_obj) return; if (offset >= 0) { - if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') + if (offset > 0 && (size_t)offset == strlen(text) && text[offset - 1] == '\n') offset--; for (;;) { nl = strchr(text, '\n'); |