]> granicus.if.org Git - postgresql/commitdiff
Allow unrecognized encoding names in locales, as long as they're the same.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 31 Jan 2014 07:03:30 +0000 (02:03 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 31 Jan 2014 07:03:52 +0000 (02:03 -0500)
The buildfarm says commit 58274728fb8e087049df67c0eee903d9743fdeda doesn't
work so well on Windows.  This is because the encoding part of Windows
locale names can be just a code page number, eg "1252", which we don't
consider to be a valid encoding name.  Add a check to accept encoding
parts that are case-insensitively string equal; this at least ensures
that the new code doesn't reject any cases that the old code allowed.

contrib/pg_upgrade/check.c

index d52051a6e9981ece81ec66655182c2bb800d0bde..f04707f9c6f510349ad3375d47ebf18a8cf04ee8 100644 (file)
@@ -437,8 +437,14 @@ equivalent_locale(const char *loca, const char *locb)
        if (!chara || !charb)
                return (pg_strcasecmp(loca, locb) == 0);
 
-       /* Compare the encoding parts. */
-       if (!equivalent_encoding(chara + 1, charb + 1))
+       /*
+        * Compare the encoding parts.  Windows tends to use code page numbers for
+        * the encoding part, which equivalent_encoding() won't like, so accept if
+        * the strings are case-insensitive equal; otherwise use
+        * equivalent_encoding() to compare.
+        */
+       if (pg_strcasecmp(chara + 1, charb + 1) != 0 &&
+               !equivalent_encoding(chara + 1, charb + 1))
                return false;
 
        /*