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:54 UTC

svn commit: r515018 - in /xerces/c/trunk/src/xercesc/util/Transcoders: IconvFBSD/IconvFBSDTransService.cpp IconvGNU/IconvGNUTransService.cpp

Author: amassari
Date: Tue Mar  6 00:18:53 2007
New Revision: 515018

URL: http://svn.apache.org/viewvc?view=rev&rev=515018
Log:
IconvGNU and IconvFBSD transcoders override application-set locale, XERCESC-1660 (patch by Boris Kolpackov)

Modified:
    xerces/c/trunk/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
    xerces/c/trunk/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp

Modified: xerces/c/trunk/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp?view=diff&rev=515018&r1=515017&r2=515018
==============================================================================
--- xerces/c/trunk/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp Tue Mar  6 00:18:53 2007
@@ -509,9 +509,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/trunk/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp?view=diff&rev=515018&r1=515017&r2=515018
==============================================================================
--- xerces/c/trunk/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp Tue Mar  6 00:18:53 2007
@@ -417,9 +417,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