summarylogtreecommitdiffstats
path: root/00-wchar-libiconv-1.14.patch
diff options
context:
space:
mode:
Diffstat (limited to '00-wchar-libiconv-1.14.patch')
-rw-r--r--00-wchar-libiconv-1.14.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/00-wchar-libiconv-1.14.patch b/00-wchar-libiconv-1.14.patch
new file mode 100644
index 000000000000..77df3719fb46
--- /dev/null
+++ b/00-wchar-libiconv-1.14.patch
@@ -0,0 +1,103 @@
+diff -urN origsrc//libiconv-1.14/libcharset/lib/localcharset.c src//libiconv-1.14/libcharset/lib/localcharset.c
+--- origsrc//libiconv-1.14/libcharset/lib/localcharset.c 2011-02-28 17:43:35.000000000 -0500
++++ src//libiconv-1.14/libcharset/lib/localcharset.c 2011-08-28 00:16:57.238000000 -0400
+@@ -54,10 +54,6 @@
+ # include <locale.h>
+ # endif
+ # endif
+-# ifdef __CYGWIN__
+-# define WIN32_LEAN_AND_MEAN
+-# include <windows.h>
+-# endif
+ #elif defined WIN32_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+@@ -124,7 +120,7 @@
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
++#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE)
+ const char *dir;
+ const char *base = "charset.alias";
+ char *file_name;
+@@ -309,7 +305,7 @@
+ "DECKOREAN" "\0" "EUC-KR" "\0";
+ # endif
+
+-# if defined WIN32_NATIVE || defined __CYGWIN__
++# if defined WIN32_NATIVE
+ /* To avoid the troubles of installing a separate file in the same
+ directory as the DLL and of retrieving the DLL's directory at
+ runtime, simply inline the aliases here. */
+@@ -365,64 +361,12 @@
+
+ # 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;
+- }
+- }
+- }
+-
+- /* Woe32 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));
+
+ # else
+