]> granicus.if.org Git - postgresql/commitdiff
Use libc version as a collation version on glibc systems.
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 9 Oct 2019 19:17:47 +0000 (21:17 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 9 Oct 2019 19:17:47 +0000 (21:17 +0200)
Using glibc's version number to detect potential collation definition
changes is not 100% reliable, but it's better than nothing.

Author: Thomas Munro
Reviewed-by: Peter Eisentraut
Discussion: https://postgr.es/m/4b76c6d4-ae5e-0dc6-7d0d-b5c796a07e34%402ndquadrant.com

src/backend/utils/adt/pg_locale.c

index 2a076a3dfd19522d23c13536cd3f1990524569af..fcdbaae37b9db6d2090aac1196e9b6f2118f2380 100644 (file)
 #include <unicode/ucnv.h>
 #endif
 
+#ifdef __GLIBC__
+#include <gnu/libc-version.h>
+#endif
+
 #ifdef WIN32
 /*
  * This Windows file defines StrNCpy. We don't need it here, so we undefine
@@ -1499,7 +1503,7 @@ pg_newlocale_from_collation(Oid collid)
 char *
 get_collation_actual_version(char collprovider, const char *collcollate)
 {
-       char       *collversion;
+       char       *collversion = NULL;
 
 #ifdef USE_ICU
        if (collprovider == COLLPROVIDER_ICU)
@@ -1523,7 +1527,13 @@ get_collation_actual_version(char collprovider, const char *collcollate)
        }
        else
 #endif
-               collversion = NULL;
+       if (collprovider == COLLPROVIDER_LIBC)
+       {
+#if defined(__GLIBC__)
+               /* Use the glibc version because we don't have anything better. */
+               collversion = pstrdup(gnu_get_libc_version());
+#endif
+       }
 
        return collversion;
 }