mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-22 14:45:27 +00:00
cygwin: libiconv and gettext for x86_64
This commit is contained in:
parent
ebf6d98fc2
commit
b658196c6c
|
@ -12,11 +12,13 @@ stdenv.mkDerivation (rec {
|
||||||
|
|
||||||
configureFlags = [ "--disable-csharp" "--with-xz" ]
|
configureFlags = [ "--disable-csharp" "--with-xz" ]
|
||||||
++ (stdenv.lib.optionals stdenv.isCygwin
|
++ (stdenv.lib.optionals stdenv.isCygwin
|
||||||
[ # We have a static libiconv, so we can only build the static lib.
|
[ "--disable-java"
|
||||||
"--disable-shared" "--enable-static"
|
"--disable-native-java"
|
||||||
|
|
||||||
# Share the cache among the various `configure' runs.
|
# Share the cache among the various `configure' runs.
|
||||||
"--config-cache"
|
"--config-cache"
|
||||||
|
"--with-included-gettext"
|
||||||
|
"--with-included-glib"
|
||||||
|
"--with-included-libcroco"
|
||||||
]);
|
]);
|
||||||
|
|
||||||
# On cross building, gettext supposes that the wchar.h from libc
|
# On cross building, gettext supposes that the wchar.h from libc
|
||||||
|
@ -28,6 +30,8 @@ stdenv.mkDerivation (rec {
|
||||||
echo gl_cv_func_wcwidth_works=yes > cachefile
|
echo gl_cv_func_wcwidth_works=yes > cachefile
|
||||||
configureFlags="$configureFlags --cache-file=`pwd`/cachefile"
|
configureFlags="$configureFlags --cache-file=`pwd`/cachefile"
|
||||||
fi
|
fi
|
||||||
|
'' + stdenv.lib.optionalString stdenv.isCygwin ''
|
||||||
|
sed -i -e "s/\(am_libgettextlib_la_OBJECTS = \)error.lo/\\1/" gettext-tools/gnulib-lib/Makefile.in
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildInputs = [ xz ] ++ stdenv.lib.optional (!stdenv.isLinux) libiconv;
|
buildInputs = [ xz ] ++ stdenv.lib.optional (!stdenv.isLinux) libiconv;
|
||||||
|
|
|
@ -10,11 +10,16 @@ stdenv.mkDerivation rec {
|
||||||
sha256 = "04q6lgl3kglmmhw59igq1n7v3rp1rpkypl366cy1k1yn2znlvckj";
|
sha256 = "04q6lgl3kglmmhw59igq1n7v3rp1rpkypl366cy1k1yn2znlvckj";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
patches = if stdenv.isCygwin then [
|
||||||
|
./libiconv-1.14-reloc.patch
|
||||||
|
./libiconv-1.14-wchar.patch
|
||||||
|
] else null;
|
||||||
|
|
||||||
# On Cygwin, Libtool produces a `.dll.a', which is not a "real" DLL
|
# On Cygwin, Libtool produces a `.dll.a', which is not a "real" DLL
|
||||||
# (Windows' linker would need to be used somehow to produce an actual
|
# (Windows' linker would need to be used somehow to produce an actual
|
||||||
# DLL.) Thus, build the static library too, and this is what Gettext
|
# DLL.) Thus, build the static library too, and this is what Gettext
|
||||||
# will actually use.
|
# will actually use.
|
||||||
configureFlags = stdenv.lib.optional stdenv.isCygwin [ "--enable-static" ];
|
configureFlags = if stdenv.isCygwin then [ "--enable-static" ] else null;
|
||||||
|
|
||||||
crossAttrs = {
|
crossAttrs = {
|
||||||
# Disable stripping to avoid "libiconv.a: Archive has no index" (MinGW).
|
# Disable stripping to avoid "libiconv.a: Archive has no index" (MinGW).
|
||||||
|
|
269
pkgs/development/libraries/libiconv/libiconv-1.14-reloc.patch
Normal file
269
pkgs/development/libraries/libiconv/libiconv-1.14-reloc.patch
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
--- libiconv-1.14/lib/relocatable.c 2011-08-07 13:48:03.000000000 -0400
|
||||||
|
+++ libiconv-1.14/lib/relocatable.c 2011-10-15 03:14:13.195133600 -0400
|
||||||
|
@@ -2,20 +2,18 @@
|
||||||
|
Copyright (C) 2003-2006, 2008-2011 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
- This program is free software; you can redistribute it and/or modify it
|
||||||
|
- under the terms of the GNU Library General Public License as published
|
||||||
|
- by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
- any later version.
|
||||||
|
+ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
+ (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- Library General Public License for more details.
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
- You should have received a copy of the GNU Library General Public
|
||||||
|
- License along with this program; if not, write to the Free Software
|
||||||
|
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
- USA. */
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public License
|
||||||
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Tell glibc's <stdio.h> to provide a prototype for getline().
|
||||||
|
@@ -87,6 +85,19 @@
|
||||||
|
# define FILE_SYSTEM_PREFIX_LEN(P) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Whether to enable the more costly support for relocatable libraries.
|
||||||
|
+ It allows libraries to be have been installed with a different original
|
||||||
|
+ prefix than the program. But it is quite costly, especially on Cygwin
|
||||||
|
+ platforms, see below. Therefore we enable it by default only on native
|
||||||
|
+ Win32 platforms. */
|
||||||
|
+#ifndef ENABLE_COSTLY_RELOCATABLE
|
||||||
|
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 1
|
||||||
|
+# else
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 0
|
||||||
|
+# endif
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Original installation prefix. */
|
||||||
|
static char *orig_prefix;
|
||||||
|
static size_t orig_prefix_len;
|
||||||
|
@@ -156,7 +167,7 @@
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
|
||||||
|
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
|
||||||
|
|
||||||
|
/* Convenience function:
|
||||||
|
Computes the current installation prefix, based on the original
|
||||||
|
@@ -286,7 +297,7 @@
|
||||||
|
|
||||||
|
#endif /* !IN_LIBRARY || PIC */
|
||||||
|
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
|
||||||
|
/* Full pathname of shared library, or NULL. */
|
||||||
|
static char *shared_library_fullname;
|
||||||
|
@@ -332,7 +343,9 @@
|
||||||
|
#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
|
||||||
|
/* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
|
||||||
|
function.
|
||||||
|
- Cygwin >= 1.5 has /proc/self/maps and the getline() function too. */
|
||||||
|
+ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
|
||||||
|
+ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
|
||||||
|
+ Cygwin 1.7. */
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
/* Open the current process' maps file. It describes one VMA per line. */
|
||||||
|
@@ -405,7 +418,7 @@
|
||||||
|
const char *
|
||||||
|
relocate (const char *pathname)
|
||||||
|
{
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
static int initialized;
|
||||||
|
|
||||||
|
/* Initialization code for a shared library. */
|
||||||
|
--- libiconv-1.14/libcharset/lib/relocatable.c 2011-08-07 13:48:03.000000000 -0400
|
||||||
|
+++ libiconv-1.14/libcharset/lib/relocatable.c 2011-10-15 03:14:27.878133600 -0400
|
||||||
|
@@ -2,20 +2,18 @@
|
||||||
|
Copyright (C) 2003-2006, 2008-2011 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
- This program is free software; you can redistribute it and/or modify it
|
||||||
|
- under the terms of the GNU Library General Public License as published
|
||||||
|
- by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
- any later version.
|
||||||
|
+ This program is free software: you can redistribute it and/or modify
|
||||||
|
+ it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
+ (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
- Library General Public License for more details.
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
- You should have received a copy of the GNU Library General Public
|
||||||
|
- License along with this program; if not, write to the Free Software
|
||||||
|
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
- USA. */
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public License
|
||||||
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Tell glibc's <stdio.h> to provide a prototype for getline().
|
||||||
|
@@ -87,6 +85,19 @@
|
||||||
|
# define FILE_SYSTEM_PREFIX_LEN(P) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Whether to enable the more costly support for relocatable libraries.
|
||||||
|
+ It allows libraries to be have been installed with a different original
|
||||||
|
+ prefix than the program. But it is quite costly, especially on Cygwin
|
||||||
|
+ platforms, see below. Therefore we enable it by default only on native
|
||||||
|
+ Win32 platforms. */
|
||||||
|
+#ifndef ENABLE_COSTLY_RELOCATABLE
|
||||||
|
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 1
|
||||||
|
+# else
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 0
|
||||||
|
+# endif
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Original installation prefix. */
|
||||||
|
static char *orig_prefix;
|
||||||
|
static size_t orig_prefix_len;
|
||||||
|
@@ -156,7 +167,7 @@
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
|
||||||
|
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
|
||||||
|
|
||||||
|
/* Convenience function:
|
||||||
|
Computes the current installation prefix, based on the original
|
||||||
|
@@ -286,7 +297,7 @@
|
||||||
|
|
||||||
|
#endif /* !IN_LIBRARY || PIC */
|
||||||
|
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
|
||||||
|
/* Full pathname of shared library, or NULL. */
|
||||||
|
static char *shared_library_fullname;
|
||||||
|
@@ -332,7 +343,9 @@
|
||||||
|
#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
|
||||||
|
/* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
|
||||||
|
function.
|
||||||
|
- Cygwin >= 1.5 has /proc/self/maps and the getline() function too. */
|
||||||
|
+ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
|
||||||
|
+ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
|
||||||
|
+ Cygwin 1.7. */
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
/* Open the current process' maps file. It describes one VMA per line. */
|
||||||
|
@@ -405,7 +418,7 @@
|
||||||
|
const char *
|
||||||
|
relocate (const char *pathname)
|
||||||
|
{
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
static int initialized;
|
||||||
|
|
||||||
|
/* Initialization code for a shared library. */
|
||||||
|
--- libiconv-1.14/srclib/relocatable.c 2011-08-07 09:42:06.000000000 -0400
|
||||||
|
+++ libiconv-1.14/srclib/relocatable.c 2011-10-15 03:14:37.739133600 -0400
|
||||||
|
@@ -3,16 +3,16 @@
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
- it under the terms of the GNU General Public License as published by
|
||||||
|
- the Free Software Foundation; either version 3 of the License, or
|
||||||
|
+ it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
- GNU General Public License for more details.
|
||||||
|
+ GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
- You should have received a copy of the GNU General Public License
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
@@ -85,6 +85,19 @@
|
||||||
|
# define FILE_SYSTEM_PREFIX_LEN(P) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Whether to enable the more costly support for relocatable libraries.
|
||||||
|
+ It allows libraries to be have been installed with a different original
|
||||||
|
+ prefix than the program. But it is quite costly, especially on Cygwin
|
||||||
|
+ platforms, see below. Therefore we enable it by default only on native
|
||||||
|
+ Win32 platforms. */
|
||||||
|
+#ifndef ENABLE_COSTLY_RELOCATABLE
|
||||||
|
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 1
|
||||||
|
+# else
|
||||||
|
+# define ENABLE_COSTLY_RELOCATABLE 0
|
||||||
|
+# endif
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Original installation prefix. */
|
||||||
|
static char *orig_prefix;
|
||||||
|
static size_t orig_prefix_len;
|
||||||
|
@@ -154,7 +167,7 @@
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
|
||||||
|
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
|
||||||
|
|
||||||
|
/* Convenience function:
|
||||||
|
Computes the current installation prefix, based on the original
|
||||||
|
@@ -284,7 +297,7 @@
|
||||||
|
|
||||||
|
#endif /* !IN_LIBRARY || PIC */
|
||||||
|
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
|
||||||
|
/* Full pathname of shared library, or NULL. */
|
||||||
|
static char *shared_library_fullname;
|
||||||
|
@@ -330,7 +343,9 @@
|
||||||
|
#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
|
||||||
|
/* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
|
||||||
|
function.
|
||||||
|
- Cygwin >= 1.5 has /proc/self/maps and the getline() function too. */
|
||||||
|
+ Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
|
||||||
|
+ But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
|
||||||
|
+ Cygwin 1.7. */
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
/* Open the current process' maps file. It describes one VMA per line. */
|
||||||
|
@@ -403,7 +418,7 @@
|
||||||
|
const char *
|
||||||
|
relocate (const char *pathname)
|
||||||
|
{
|
||||||
|
-#if defined PIC && defined INSTALLDIR
|
||||||
|
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
|
||||||
|
static int initialized;
|
||||||
|
|
||||||
|
/* Initialization code for a shared library. */
|
||||||
|
--- libiconv-1.14/srcm4/gnulib-comp.m4 2011-08-07 09:42:12.000000000 -0400
|
||||||
|
+++ libiconv-1.14/srcm4/gnulib-comp.m4 2011-08-30 02:40:45.597317000 -0400
|
||||||
|
@@ -164,6 +164,7 @@ gl_UNISTD_MODULE_INDICATOR([readlink])
|
||||||
|
gl_RELOCATABLE([$gl_source_base])
|
||||||
|
if test $RELOCATABLE = yes; then
|
||||||
|
AC_LIBOBJ([progreloc])
|
||||||
|
+ AC_LIBOBJ([relocatable])
|
||||||
|
fi
|
||||||
|
gl_FUNC_READLINK_SEPARATE
|
||||||
|
gl_CANONICALIZE_LGPL_SEPARATE
|
102
pkgs/development/libraries/libiconv/libiconv-1.14-wchar.patch
Normal file
102
pkgs/development/libraries/libiconv/libiconv-1.14-wchar.patch
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
--- 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
|
||||||
|
|
Loading…
Reference in a new issue