summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Bray <erik.m.bray@gmail.com>2017-10-27 09:46:03 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2017-10-27 09:46:03 (GMT)
commit031c4bfadb69feeda82ce886d6b0cadc638d2e1e (patch)
treebf96902f4e6b6de17f916c3763c2dcf8ce0391c0
parent2f3d6993d7ca4a4d218e0d63b126c94bc00a03b8 (diff)
downloadcpython-031c4bfadb69feeda82ce886d6b0cadc638d2e1e.zip
cpython-031c4bfadb69feeda82ce886d6b0cadc638d2e1e.tar.gz
cpython-031c4bfadb69feeda82ce886d6b0cadc638d2e1e.tar.bz2
bpo-31877: Add _Py_LegacyLocaleDetected and _PyCoerceLegacyLocale to pylifecycle.h (GH-4134)
Only declaring these as interns inside the CLI's main C module caused build problems on some platforms (notably Cygwin), so this switches them to a regular underscore prefixed "private" C API declaration.
-rw-r--r--Include/pylifecycle.h6
-rw-r--r--Programs/python.c24
2 files changed, 16 insertions, 14 deletions
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
index e1737b5..8bbce7f 100644
--- a/Include/pylifecycle.h
+++ b/Include/pylifecycle.h
@@ -133,6 +133,12 @@ PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size);
PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size);
#endif /* !Py_LIMITED_API */
+/* Legacy locale support */
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(void) _Py_CoerceLegacyLocale(void);
+PyAPI_FUNC(int) _Py_LegacyLocaleDetected(void);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/Programs/python.c b/Programs/python.c
index 03f8295..4f6b919 100644
--- a/Programs/python.c
+++ b/Programs/python.c
@@ -15,20 +15,6 @@ wmain(int argc, wchar_t **argv)
}
#else
-/* Access private pylifecycle helper API to better handle the legacy C locale
- *
- * The legacy C locale assumes ASCII as the default text encoding, which
- * causes problems not only for the CPython runtime, but also other
- * components like GNU readline.
- *
- * Accordingly, when the CLI detects it, it attempts to coerce it to a
- * more capable UTF-8 based alternative.
- *
- * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
- *
- */
-extern int _Py_LegacyLocaleDetected(void);
-extern void _Py_CoerceLegacyLocale(void);
int
main(int argc, char **argv)
@@ -78,6 +64,16 @@ main(int argc, char **argv)
setlocale(LC_ALL, "");
#endif
+ /* The legacy C locale assumes ASCII as the default text encoding, which
+ * causes problems not only for the CPython runtime, but also other
+ * components like GNU readline.
+ *
+ * Accordingly, when the CLI detects it, it attempts to coerce it to a
+ * more capable UTF-8 based alternative.
+ *
+ * See the documentation of the PYTHONCOERCECLOCALE setting for more
+ * details.
+ */
if (_Py_LegacyLocaleDetected()) {
_Py_CoerceLegacyLocale();
}