Small fixes to locale code
authorNick Wellnhofer <wellnhofer@aevum.de>
Mon, 8 Nov 2010 10:09:25 +0000 (11:09 +0100)
committerDaniel Veillard <veillard@redhat.com>
Mon, 8 Nov 2010 10:09:25 +0000 (11:09 +0100)
libxslt/xsltlocale.c

index ec03cde..2caa2ec 100644 (file)
@@ -26,9 +26,9 @@
 #define LC_COLLATE_MASK (1 << LC_COLLATE)
 #endif
 
-#define ISALPHA(c) ((c & 0xc0) == 0x40 && (unsigned)((c & 0x1f) - 1) < 26)
 #define TOUPPER(c) (c & ~0x20)
 #define TOLOWER(c) (c | 0x20)
+#define ISALPHA(c) ((unsigned)(TOUPPER(c) - 'A') < 26)
 
 /*without terminating null character*/
 #define XSLTMAX_ISO639LANGLEN          8
@@ -97,11 +97,11 @@ xsltNewLocale(const xmlChar *languageTag) {
        return(NULL);
     
     llen = i;
-    *q++ = '_';
     
     if (*p) {
        if (*p++ != '-')
            return(NULL);
+        *q++ = '_';
        
        for (i=0; i<XSLTMAX_ISO3166CNTRYLEN && ISALPHA(*p); ++i)
            *q++ = TOUPPER(*p++);
@@ -116,7 +116,7 @@ xsltNewLocale(const xmlChar *languageTag) {
         
         /* Continue without using country code */
         
-        q = localeName + llen + 1;
+        q = localeName + llen;
     }
     
     /* Try locale without territory, e.g. for Esperanto (eo) */
@@ -135,7 +135,8 @@ xsltNewLocale(const xmlChar *languageTag) {
     if (region == NULL)
         return(NULL);
      
-    q = localeName + llen + 1;
+    q = localeName + llen;
+    *q++ = '_';
     *q++ = region[0];
     *q++ = region[1];
     memcpy(q, ".utf8", 6);