You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2007/03/06 09:18:32 UTC
svn commit: r515017 - in
/xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders:
IconvFBSD/IconvFBSDTransService.cpp IconvGNU/IconvGNUTransService.cpp
Author: amassari
Date: Tue Mar 6 00:18:31 2007
New Revision: 515017
URL: http://svn.apache.org/viewvc?view=rev&rev=515017
Log:
IconvGNU and IconvFBSD transcoders override application-set locale, XERCESC-1660 (patch by Boris Kolpackov)
Modified:
xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp?view=diff&rev=515017&r1=515016&r2=515017
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp Tue Mar 6 00:18:31 2007
@@ -532,9 +532,26 @@
}
#endif
- // Try to obtain local (host) characterset through the environment
- char* fLocalCP = setlocale (LC_CTYPE, "");
- if (fLocalCP == NULL)
+ // Try to obtain local (host) characterset from the setlocale
+ // and through the environment. Do not call setlocale(LC_*, "")!
+ // Using an empty string instead of NULL, will modify the libc
+ // behavior.
+ //
+ char* fLocalCP = setlocale (LC_CTYPE, NULL);
+ if (fLocalCP == NULL || *fLocalCP == 0 ||
+ strcmp (fLocalCP, "C") == 0 ||
+ strcmp (fLocalCP, "POSIX") == 0) {
+ fLocalCP = getenv ("LC_ALL");
+ if (fLocalCP == NULL) {
+ fLocalCP = getenv ("LC_CTYPE");
+ if (fLocalCP == NULL)
+ fLocalCP = getenv ("LANG");
+ }
+ }
+
+ if (fLocalCP == NULL || *fLocalCP == 0 ||
+ strcmp (fLocalCP, "C") == 0 ||
+ strcmp (fLocalCP, "POSIX") == 0)
fLocalCP = "iso-8859-1"; // fallback locale
else {
char *ptr = strchr (fLocalCP, '.');
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp?view=diff&rev=515017&r1=515016&r2=515017
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp Tue Mar 6 00:18:31 2007
@@ -446,9 +446,26 @@
}
#endif
- // Try to obtain local (host) characterset through the environment
- char* fLocalCP = setlocale (LC_CTYPE, "");
- if (fLocalCP == NULL)
+ // Try to obtain local (host) characterset from the setlocale
+ // and through the environment. Do not call setlocale(LC_*, "")!
+ // Using an empty string instead of NULL, will modify the libc
+ // behavior.
+ //
+ char* fLocalCP = setlocale (LC_CTYPE, NULL);
+ if (fLocalCP == NULL || *fLocalCP == 0 ||
+ strcmp (fLocalCP, "C") == 0 ||
+ strcmp (fLocalCP, "POSIX") == 0) {
+ fLocalCP = getenv ("LC_ALL");
+ if (fLocalCP == NULL) {
+ fLocalCP = getenv ("LC_CTYPE");
+ if (fLocalCP == NULL)
+ fLocalCP = getenv ("LANG");
+ }
+ }
+
+ if (fLocalCP == NULL || *fLocalCP == 0 ||
+ strcmp (fLocalCP, "C") == 0 ||
+ strcmp (fLocalCP, "POSIX") == 0)
fLocalCP = "iso-8859-1"; // fallback locale
else {
char *ptr = strchr (fLocalCP, '.');
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org