summaryrefslogtreecommitdiffstats
path: root/libiconv-1.16-wchar.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libiconv-1.16-wchar.patch')
-rw-r--r--libiconv-1.16-wchar.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/libiconv-1.16-wchar.patch b/libiconv-1.16-wchar.patch
new file mode 100644
index 0000000..ed51800
--- /dev/null
+++ b/libiconv-1.16-wchar.patch
@@ -0,0 +1,92 @@
+commit 6a8348e65546fab85e79cea7da5c5b44c3ac80c9
+Author: Lemures Lemniscati <lemures.lemniscati@gmail.com>
+Date: Sat Jul 11 10:11:35 2020 +0900
+
+ 1.16-wchar.patch
+
+diff --git a/libcharset/lib/localcharset.c b/libcharset/lib/localcharset.c
+index 3effe1d..462aade 100644
+--- a/libcharset/lib/localcharset.c
++++ b/libcharset/lib/localcharset.c
+@@ -51,10 +51,6 @@
+ # include <locale.h>
+ # endif
+ # endif
+-# ifdef __CYGWIN__
+-# define WIN32_LEAN_AND_MEAN
+-# include <windows.h>
+-# endif
+ #elif defined WINDOWS_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+@@ -692,64 +688,12 @@ locale_charset (void)
+
+ # if HAVE_LANGINFO_CODESET
+
+- /* Most systems support nl_langinfo (CODESET) nowadays. */
+- codeset = nl_langinfo (CODESET);
+-
+-# ifdef __CYGWIN__
+- /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always
+- returns "US-ASCII". Return the suffix of the locale name from the
+- environment variables (if present) or the codepage as a number. */
+- if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+- {
+- const char *locale;
+- static char buf[2 + 10 + 1];
+-
+- 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[0] != '\0')
+- {
+- /* If the locale name contains an encoding after the dot, return
+- it. */
+- const char *dot = strchr (locale, '.');
+-
+- if (dot != NULL)
+- {
+- const char *modifier;
+-
+- dot++;
+- /* Look for the possible @... trailer and remove it, if any. */
+- modifier = strchr (dot, '@');
+- if (modifier == NULL)
+- return dot;
+- if (modifier - dot < sizeof (buf))
+- {
+- memcpy (buf, dot, modifier - dot);
+- buf [modifier - dot] = '\0';
+- return buf;
+- }
+- }
+- }
+-
+- /* The Windows API has a function returning the locale's codepage as a
+- number: GetACP(). This encoding is used by Cygwin, unless the user
+- has set the environment variable CYGWIN=codepage:oem (which very few
+- people do).
+- Output directed to console windows needs to be converted (to
+- GetOEMCP() if the console is using a raster font, or to
+- GetConsoleOutputCP() if it is using a TrueType font). Cygwin does
+- this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+- converting to GetConsoleOutputCP(). This leads to correct results,
+- except when SetConsoleOutputCP has been called and a raster font is
+- in use. */
+- sprintf (buf, "CP%u", GetACP ());
+- codeset = buf;
+- }
+-# endif
++ /* Most systems support nl_langinfo (CODESET) nowadays.
++ POSIX allows that the returned pointer may point to a static area that
++ may be overwritten by subsequent calls to setlocale or nl_langinfo. */
++ static char codeset_buf[64];
++ codeset_buf[0] = '\0';
++ codeset = strncat (codeset_buf, nl_langinfo (CODESET), sizeof (codeset_buf));
+
+ if (codeset == NULL)
+ /* The canonical name cannot be determined. */