256 lines
8.6 KiB
Diff
256 lines
8.6 KiB
Diff
|
diff -ru Python-3.3.5/Modules/Setup.dist Python-3.3.5-android/Modules/Setup.dist
|
||
|
--- Python-3.3.5/Modules/Setup.dist 2014-03-09 09:40:23.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Modules/Setup.dist 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -118,7 +118,7 @@
|
||
|
itertools itertoolsmodule.c # Functions creating iterators for efficient looping
|
||
|
|
||
|
# access to ISO C locale support
|
||
|
-_locale _localemodule.c # -lintl
|
||
|
+#_locale _localemodule.c # -lintl
|
||
|
|
||
|
# Standard I/O baseline
|
||
|
_io -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c
|
||
|
diff -ru Python-3.3.5/Modules/_decimal/libmpdec/io.c Python-3.3.5-android/Modules/_decimal/libmpdec/io.c
|
||
|
--- Python-3.3.5/Modules/_decimal/libmpdec/io.c 2014-03-09 09:40:25.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Modules/_decimal/libmpdec/io.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -868,10 +868,17 @@
|
||
|
}
|
||
|
spec->type = *cp++;
|
||
|
spec->type = (spec->type == 'N') ? 'G' : 'g';
|
||
|
+#ifdef __ANDROID__
|
||
|
+ spec->dot = ".";
|
||
|
+ spec->sep = ",";
|
||
|
+ spec->grouping = "\3";
|
||
|
+#else
|
||
|
lc = localeconv();
|
||
|
spec->dot = lc->decimal_point;
|
||
|
spec->sep = lc->thousands_sep;
|
||
|
spec->grouping = lc->grouping;
|
||
|
+#endif
|
||
|
+
|
||
|
if (mpd_validate_lconv(spec) < 0) {
|
||
|
return 0; /* GCOV_NOT_REACHED */
|
||
|
}
|
||
|
diff -ru Python-3.3.5/Modules/_localemodule.c Python-3.3.5-android/Modules/_localemodule.c
|
||
|
--- Python-3.3.5/Modules/_localemodule.c 2014-03-09 09:40:26.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Modules/_localemodule.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -38,6 +38,13 @@
|
||
|
#include <windows.h>
|
||
|
#endif
|
||
|
|
||
|
+#if __ANDROID__
|
||
|
+/* Android's locale support is pretty much unusable, it's better to have the
|
||
|
+ higher-level module fall back to C locale emulation. */
|
||
|
+#error "Android's locale support is too incomplete to create a usable module."
|
||
|
+#endif
|
||
|
+
|
||
|
+
|
||
|
PyDoc_STRVAR(locale__doc__, "Support for POSIX locales.");
|
||
|
|
||
|
static PyObject *Error;
|
||
|
@@ -141,6 +148,11 @@
|
||
|
if (!result)
|
||
|
return NULL;
|
||
|
|
||
|
+#ifdef __ANDROID__
|
||
|
+ /* Don't even try on Android's broken locale.h. */
|
||
|
+ goto failed;
|
||
|
+#else
|
||
|
+
|
||
|
/* if LC_NUMERIC is different in the C library, use saved value */
|
||
|
l = localeconv();
|
||
|
|
||
|
@@ -189,6 +201,7 @@
|
||
|
RESULT_INT(p_sign_posn);
|
||
|
RESULT_INT(n_sign_posn);
|
||
|
return result;
|
||
|
+#endif // __ANDROID__
|
||
|
|
||
|
failed:
|
||
|
Py_XDECREF(result);
|
||
|
diff -ru Python-3.3.5/Modules/main.c Python-3.3.5-android/Modules/main.c
|
||
|
--- Python-3.3.5/Modules/main.c 2014-03-09 09:40:27.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Modules/main.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -522,7 +522,7 @@
|
||
|
oldloc = strdup(setlocale(LC_ALL, NULL));
|
||
|
setlocale(LC_ALL, "");
|
||
|
for (p = strtok(buf, ","); p != NULL; p = strtok(NULL, ",")) {
|
||
|
-#ifdef __APPLE__
|
||
|
+#if defined(__APPLE__) || defined(__ANDROID__)
|
||
|
/* Use utf-8 on Mac OS X */
|
||
|
unicode = PyUnicode_FromString(p);
|
||
|
#else
|
||
|
diff -ru Python-3.3.5/Objects/unicodeobject.c Python-3.3.5-android/Objects/unicodeobject.c
|
||
|
--- Python-3.3.5/Objects/unicodeobject.c 2014-03-09 09:40:30.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Objects/unicodeobject.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -3295,13 +3295,22 @@
|
||
|
static int
|
||
|
locale_error_handler(const char *errors, int *surrogateescape)
|
||
|
{
|
||
|
+
|
||
|
if (errors == NULL) {
|
||
|
+#ifdef __ANDROID__
|
||
|
+ *surrogateescape = 1;
|
||
|
+#else
|
||
|
*surrogateescape = 0;
|
||
|
+#endif
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (strcmp(errors, "strict") == 0) {
|
||
|
+#ifdef __ANDROID__
|
||
|
+ *surrogateescape = 1;
|
||
|
+#else
|
||
|
*surrogateescape = 0;
|
||
|
+#endif
|
||
|
return 0;
|
||
|
}
|
||
|
if (strcmp(errors, "surrogateescape") == 0) {
|
||
|
@@ -3429,7 +3438,7 @@
|
||
|
{
|
||
|
#ifdef HAVE_MBCS
|
||
|
return PyUnicode_EncodeCodePage(CP_ACP, unicode, NULL);
|
||
|
-#elif defined(__APPLE__)
|
||
|
+#elif defined(__APPLE__) || defined(__ANDROID__)
|
||
|
return _PyUnicode_AsUTF8String(unicode, "surrogateescape");
|
||
|
#else
|
||
|
PyInterpreterState *interp = PyThreadState_GET()->interp;
|
||
|
@@ -3709,7 +3718,7 @@
|
||
|
{
|
||
|
#ifdef HAVE_MBCS
|
||
|
return PyUnicode_DecodeMBCS(s, size, NULL);
|
||
|
-#elif defined(__APPLE__)
|
||
|
+#elif defined(__APPLE__) || defined(__ANDROID__)
|
||
|
return PyUnicode_DecodeUTF8Stateful(s, size, "surrogateescape", NULL);
|
||
|
#else
|
||
|
PyInterpreterState *interp = PyThreadState_GET()->interp;
|
||
|
@@ -4835,7 +4844,7 @@
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
-#ifdef __APPLE__
|
||
|
+#if defined(__APPLE__) || defined(__ANDROID__)
|
||
|
|
||
|
/* Simplified UTF-8 decoder using surrogateescape error handler,
|
||
|
used to decode the command line arguments on Mac OS X.
|
||
|
diff -ru Python-3.3.5/Python/bltinmodule.c Python-3.3.5-android/Python/bltinmodule.c
|
||
|
--- Python-3.3.5/Python/bltinmodule.c 2014-03-09 09:40:32.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Python/bltinmodule.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -24,7 +24,7 @@
|
||
|
#ifdef HAVE_MBCS
|
||
|
const char *Py_FileSystemDefaultEncoding = "mbcs";
|
||
|
int Py_HasFileSystemDefaultEncoding = 1;
|
||
|
-#elif defined(__APPLE__)
|
||
|
+#elif defined(__APPLE__) || defined(__ANDROID__)
|
||
|
const char *Py_FileSystemDefaultEncoding = "utf-8";
|
||
|
int Py_HasFileSystemDefaultEncoding = 1;
|
||
|
#else
|
||
|
diff -ru Python-3.3.5/Python/fileutils.c Python-3.3.5-android/Python/fileutils.c
|
||
|
--- Python-3.3.5/Python/fileutils.c 2014-03-09 09:40:32.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Python/fileutils.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -10,7 +10,7 @@
|
||
|
#include <langinfo.h>
|
||
|
#endif
|
||
|
|
||
|
-#ifdef __APPLE__
|
||
|
+#if defined(__APPLE__) || defined(__ANDROID__)
|
||
|
extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size);
|
||
|
#endif
|
||
|
|
||
|
@@ -44,7 +44,7 @@
|
||
|
Py_RETURN_NONE;
|
||
|
}
|
||
|
|
||
|
-#if !defined(__APPLE__) && !defined(MS_WINDOWS)
|
||
|
+#if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(MS_WINDOWS)
|
||
|
extern int _Py_normalize_encoding(const char *, char *, size_t);
|
||
|
|
||
|
/* Workaround FreeBSD and OpenIndiana locale encoding issue with the C locale.
|
||
|
@@ -194,7 +194,7 @@
|
||
|
}
|
||
|
#endif /* !defined(__APPLE__) && !defined(MS_WINDOWS) */
|
||
|
|
||
|
-#if !defined(__APPLE__) && (!defined(MS_WINDOWS) || !defined(HAVE_MBRTOWC))
|
||
|
+#if !defined(__APPLE__) && !defined(__ANDROID__) && (!defined(MS_WINDOWS) || !defined(HAVE_MBRTOWC))
|
||
|
static wchar_t*
|
||
|
decode_ascii_surrogateescape(const char *arg, size_t *size)
|
||
|
{
|
||
|
@@ -241,7 +241,7 @@
|
||
|
wchar_t*
|
||
|
_Py_char2wchar(const char* arg, size_t *size)
|
||
|
{
|
||
|
-#ifdef __APPLE__
|
||
|
+#if defined(__APPLE__) || defined(__ANDROID__)
|
||
|
wchar_t *wstr;
|
||
|
wstr = _Py_DecodeUTF8_surrogateescape(arg, strlen(arg));
|
||
|
if (size != NULL) {
|
||
|
@@ -384,7 +384,7 @@
|
||
|
char*
|
||
|
_Py_wchar2char(const wchar_t *text, size_t *error_pos)
|
||
|
{
|
||
|
-#ifdef __APPLE__
|
||
|
+#if defined(__APPLE__) || defined(__ANDROID__)
|
||
|
Py_ssize_t len;
|
||
|
PyObject *unicode, *bytes = NULL;
|
||
|
char *cpath;
|
||
|
diff -ru Python-3.3.5/Python/formatter_unicode.c Python-3.3.5-android/Python/formatter_unicode.c
|
||
|
--- Python-3.3.5/Python/formatter_unicode.c 2014-03-09 09:40:32.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Python/formatter_unicode.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -665,6 +665,7 @@
|
||
|
{
|
||
|
switch (type) {
|
||
|
case LT_CURRENT_LOCALE: {
|
||
|
+#ifndef __ANDROID__
|
||
|
struct lconv *locale_data = localeconv();
|
||
|
locale_info->decimal_point = PyUnicode_DecodeLocale(
|
||
|
locale_data->decimal_point,
|
||
|
@@ -680,6 +681,7 @@
|
||
|
}
|
||
|
locale_info->grouping = locale_data->grouping;
|
||
|
break;
|
||
|
+#endif // __ANDROID__
|
||
|
}
|
||
|
case LT_DEFAULT_LOCALE:
|
||
|
locale_info->decimal_point = PyUnicode_FromOrdinal('.');
|
||
|
diff -ru Python-3.3.5/Python/pystrtod.c Python-3.3.5-android/Python/pystrtod.c
|
||
|
--- Python-3.3.5/Python/pystrtod.c 2014-03-09 09:40:33.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Python/pystrtod.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -177,8 +177,12 @@
|
||
|
|
||
|
fail_pos = NULL;
|
||
|
|
||
|
+#ifdef __ANDROID__
|
||
|
+ decimal_point = ".";
|
||
|
+#else
|
||
|
locale_data = localeconv();
|
||
|
decimal_point = locale_data->decimal_point;
|
||
|
+#endif
|
||
|
decimal_point_len = strlen(decimal_point);
|
||
|
|
||
|
assert(decimal_point_len != 0);
|
||
|
@@ -378,8 +382,12 @@
|
||
|
Py_LOCAL_INLINE(void)
|
||
|
change_decimal_from_locale_to_dot(char* buffer)
|
||
|
{
|
||
|
+#ifdef __ANDROID__
|
||
|
+ const char *decimal_point = ".";
|
||
|
+#else
|
||
|
struct lconv *locale_data = localeconv();
|
||
|
const char *decimal_point = locale_data->decimal_point;
|
||
|
+#endif
|
||
|
|
||
|
if (decimal_point[0] != '.' || decimal_point[1] != 0) {
|
||
|
size_t decimal_point_len = strlen(decimal_point);
|
||
|
diff -ru Python-3.3.5/Python/pythonrun.c Python-3.3.5-android/Python/pythonrun.c
|
||
|
--- Python-3.3.5/Python/pythonrun.c 2014-03-09 09:40:33.000000000 +0100
|
||
|
+++ Python-3.3.5-android/Python/pythonrun.c 2014-08-04 22:16:29.000000000 +0200
|
||
|
@@ -188,6 +188,8 @@
|
||
|
return NULL;
|
||
|
}
|
||
|
return get_codec_name(codeset);
|
||
|
+#elif __ANDROID__
|
||
|
+ return get_codec_name("UTF-8");
|
||
|
#else
|
||
|
PyErr_SetNone(PyExc_NotImplementedError);
|
||
|
return NULL;
|