103 lines
3.7 KiB
Diff
103 lines
3.7 KiB
Diff
|
--- libiconv-1.14/libcharset/lib/localcharset.c 2011-02-28 17:43:35.000000000 -0500
|
||
|
+++ 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
|
||
|
|