0
0
mirror of https://github.com/termux/termux-packages.git synced 2024-12-12 00:10:52 +00:00
termux-packages/packages/sed/fix-locale.patch
2023-04-01 21:27:46 +09:00

48 lines
1.5 KiB
Diff

This may seem to disregard commit a328a50407c41d634d48c886c4c198465b817d4a.
As stated in the commit message, `setlocale()` can behave in an unexpeced
manner when an empty string (`""`) is specified as its second argument.
Such usage in `sed` program is strictly avoided by the following patch,
and there is no intention to disrespect the aforementioned commit at all.
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1117,3 +1117,9 @@
#endif /* _@GUARD_PREFIX@_STDLIB_H */
#endif /* _@GUARD_PREFIX@_STDLIB_H */
#endif
+
+#if defined __ANDROID__ && defined __TERMUX__
+# undef MB_CUR_MAX
+# define MB_CUR_MAX __ctype_get_mb_cur_max()
+size_t __ctype_get_mb_cur_max(void);
+#endif
--- a/sed/sed.c
+++ b/sed/sed.c
@@ -247,7 +247,26 @@ main (int argc, char **argv)
initialize_main (&argc, &argv);
#if HAVE_SETLOCALE
/* Set locale according to user's wishes. */
+# ifndef __ANDROID__
setlocale (LC_ALL, "");
+# else /* __ANDROID__ */
+ {
+ const char *locale;
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ if (locale == NULL)
+ locale = "";
+ }
+ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
+ setlocale (LC_CTYPE, "C");
+ else
+ setlocale (LC_CTYPE, "C.UTF-8");
+ }
+# endif /* __ANDROID__ */
#endif
initialize_mbcs ();
init_localeinfo (&localeinfo);