Files
MSYS2-packages/libiconv/libiconv-1.14-wchar.patch
2018-05-01 21:43:59 -04:00

103 lines
3.8 KiB
Diff

--- old/libiconv-1.15/libcharset/lib/localcharset.c.orig 2018-05-01 03:53:41.205796300 -0400
+++ new/libiconv-1.15/libcharset/lib/localcharset.c 2018-05-01 04:02:53.944507100 -0400
@@ -53,10 +53,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>
@@ -128,7 +124,7 @@ get_charset_aliases (void)
cp = charset_aliases;
if (cp == NULL)
{
-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined OS2)
const char *dir;
const char *base = "charset.alias";
char *file_name;
@@ -313,7 +309,7 @@ get_charset_aliases (void)
"DECKOREAN" "\0" "EUC-KR" "\0";
# endif
-# if defined WINDOWS_NATIVE || defined __CYGWIN__
+# if defined WINDOWS_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. */
@@ -399,64 +395,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[65];
+ codeset_buf[0] = '\0';
+ codeset = strncat (codeset_buf, nl_langinfo (CODESET), sizeof (codeset_buf - 1));
# else