Use (unsigned char) cast in argument of pg_tolower(). Maybe it works on
authorTom Lane
Fri, 3 Apr 2009 23:27:17 +0000 (23:27 +0000)
committerTom Lane
Fri, 3 Apr 2009 23:27:17 +0000 (23:27 +0000)
Windows without that, but we shouldn't put bad examples where people might
copy them.  Also, reformat slightly to improve the odds that pgindent
won't go nuts on this.

src/port/path.c

index bf3547a2cd18bd94895b14de72a29b007950fa06..7aa39c3195d774c4222865b1318c8612ea0c5b9a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/port/path.c,v 1.77 2009/04/03 11:52:08 mha Exp $
+ *   $PostgreSQL: pgsql/src/port/path.c,v 1.78 2009/04/03 23:27:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -420,20 +420,22 @@ get_progname(const char *argv0)
 
 
 /*
- * dir_strcmp: strcmp except any two DIR_SEP characters are considered equal
+ * dir_strcmp: strcmp except any two DIR_SEP characters are considered equal,
+ * and we honor filesystem case insensitivity if known
  */
 static int
 dir_strcmp(const char *s1, const char *s2)
 {
    while (*s1 && *s2)
    {
+       if (
 #ifndef WIN32
-       if (*s1 != *s2 &&
+           *s1 != *s2
 #else
            /* On windows, paths are case-insensitive */
-       if (pg_tolower(*s1) != pg_tolower(*s2) &&
+           pg_tolower((unsigned char) *s1) != pg_tolower((unsigned char) *s2)
 #endif
-           !(IS_DIR_SEP(*s1) && IS_DIR_SEP(*s2)))
+           && !(IS_DIR_SEP(*s1) && IS_DIR_SEP(*s2)))
            return (int) *s1 - (int) *s2;
        s1++, s2++;
    }