Mercurial > gub
diff patches/guile-2.0.7-mingw-localcharset.patch @ 6512:ccc20ae889ca default tip guix
mingw::guile-2.0.7 builds.
author | Jan Nieuwenhuizen <janneke@gnu.org> |
---|---|
date | Thu, 24 Mar 2016 08:03:39 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/guile-2.0.7-mingw-localcharset.patch Thu Mar 24 08:03:39 2016 +0100 @@ -0,0 +1,194 @@ +--- guile-2.0.7/lib/localcharset.c 2010-12-07 03:32:46.000000000 +0100 ++++ guile-2.0.7/lib/localcharset.c 2012-11-21 23:33:30.000000000 +0100 +@@ -30,11 +29,11 @@ + #include <stdlib.h> + + #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +-# define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */ ++# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ + #endif + + #if defined _WIN32 || defined __WIN32__ +-# define WIN32_NATIVE ++# define WINDOWS_NATIVE + #endif + + #if defined __EMX__ +@@ -44,7 +43,7 @@ + # endif + #endif + +-#if !defined WIN32_NATIVE ++#if !defined WINDOWS_NATIVE + # include <unistd.h> + # if HAVE_LANGINFO_CODESET + # include <langinfo.h> +@@ -57,7 +56,7 @@ + # define WIN32_LEAN_AND_MEAN + # include <windows.h> + # endif +-#elif defined WIN32_NATIVE ++#elif defined WINDOWS_NATIVE + # define WIN32_LEAN_AND_MEAN + # include <windows.h> + #endif +@@ -83,7 +82,7 @@ + #endif + + #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ +- /* Win32, Cygwin, OS/2, DOS */ ++ /* Native Windows, Cygwin, OS/2, DOS */ + # define ISSLASH(C) ((C) == '/' || (C) == '\\') + #endif + +@@ -123,7 +122,7 @@ + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) ++#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -228,8 +227,7 @@ + { + /* Out of memory. */ + res_size = 0; +- if (old_res_ptr != NULL) +- free (old_res_ptr); ++ free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); +@@ -309,7 +307,7 @@ + "DECKOREAN" "\0" "EUC-KR" "\0"; + # endif + +-# if defined WIN32_NATIVE || defined __CYGWIN__ ++# if defined WINDOWS_NATIVE || defined __CYGWIN__ + /* 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. */ +@@ -361,7 +359,7 @@ + const char *codeset; + const char *aliases; + +-#if !(defined WIN32_NATIVE || defined OS2) ++#if !(defined WINDOWS_NATIVE || defined OS2) + + # if HAVE_LANGINFO_CODESET + +@@ -408,10 +406,10 @@ + } + } + +- /* 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). ++ /* 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 +@@ -454,12 +452,12 @@ + + # endif + +-#elif defined WIN32_NATIVE ++#elif defined WINDOWS_NATIVE + + static char buf[2 + 10 + 1]; + +- /* Woe32 has a function returning the locale's codepage as a number: +- GetACP(). ++ /* The Windows API has a function returning the locale's codepage as a ++ number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. +@@ -544,5 +542,82 @@ + if (codeset[0] == '\0') + codeset = "ASCII"; + ++#ifdef DARWIN7 ++ /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" ++ (the default codeset) does not work when MB_CUR_MAX is 1. */ ++ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1) ++ codeset = "ASCII"; ++#endif ++ ++ return codeset; ++} ++ ++/* A variant of the above, without calls to `setlocale', `nl_langinfo', ++ etc. */ ++const char * ++environ_locale_charset (void) ++{ ++ static char buf[2 + 10 + 1]; ++ const char *codeset, *aliases; ++ const char *locale = NULL; ++ ++ 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; ++ } ++ } ++ else if (strcmp (locale, "C") == 0) ++ { ++ strcpy (buf, "ASCII"); ++ return buf; ++ } ++ else ++ codeset = ""; ++ } ++ else ++ codeset = ""; ++ ++ /* Resolve alias. */ ++ for (aliases = get_charset_aliases (); ++ *aliases != '\0'; ++ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) ++ if (strcmp (codeset, aliases) == 0 ++ || (aliases[0] == '*' && aliases[1] == '\0')) ++ { ++ codeset = aliases + strlen (aliases) + 1; ++ break; ++ } ++ ++ /* Don't return an empty string. GNU libc and GNU libiconv interpret ++ the empty string as denoting "the locale's character encoding", ++ thus GNU libiconv would call this function a second time. */ ++ if (codeset[0] == '\0') ++ /* Default to Latin-1, for backward compatibility with Guile 1.8. */ ++ codeset = "ISO-8859-1"; ++ + return codeset; + }