mirror of
https://github.com/postgres/postgres.git
synced 2025-08-05 07:41:25 +03:00
Add collation versions for FreeBSD.
On FreeBSD 13, use querylocale() to read the current version of libc collations. Similar to commits352f6f2d
for Windows andd5ac14f9
for GNU/Linux. Discussion: https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com
This commit is contained in:
@@ -973,7 +973,8 @@ CREATE COLLATION ignore_accents (provider = icu, locale = 'und-u-ks-level1-kc-tr
|
|||||||
Version information is available from the
|
Version information is available from the
|
||||||
<literal>icu</literal> provider on all operating systems. For the
|
<literal>icu</literal> provider on all operating systems. For the
|
||||||
<literal>libc</literal> provider, versions are currently only available
|
<literal>libc</literal> provider, versions are currently only available
|
||||||
on systems using the GNU C library (most Linux systems) and Windows.
|
on systems using the GNU C library (most Linux systems), FreeBSD and
|
||||||
|
Windows.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
|
@@ -1684,6 +1684,26 @@ get_collation_actual_version(char collprovider, const char *collcollate)
|
|||||||
|
|
||||||
/* Use the glibc version because we don't have anything better. */
|
/* Use the glibc version because we don't have anything better. */
|
||||||
collversion = pstrdup(gnu_get_libc_version());
|
collversion = pstrdup(gnu_get_libc_version());
|
||||||
|
#elif defined(LC_VERSION_MASK)
|
||||||
|
locale_t loc;
|
||||||
|
|
||||||
|
/* C[.encoding] and POSIX never change. */
|
||||||
|
if (strcmp("C", collcollate) == 0 ||
|
||||||
|
strncmp("C.", collcollate, 2) == 0 ||
|
||||||
|
strcmp("POSIX", collcollate) == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Look up FreeBSD collation version. */
|
||||||
|
loc = newlocale(LC_COLLATE, collcollate, NULL);
|
||||||
|
if (loc)
|
||||||
|
{
|
||||||
|
collversion =
|
||||||
|
pstrdup(querylocale(LC_COLLATE_MASK | LC_VERSION_MASK, loc));
|
||||||
|
freelocale(loc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ereport(ERROR,
|
||||||
|
(errmsg("could not load locale \"%s\"", collcollate)));
|
||||||
#elif defined(WIN32) && _WIN32_WINNT >= 0x0600
|
#elif defined(WIN32) && _WIN32_WINNT >= 0x0600
|
||||||
/*
|
/*
|
||||||
* If we are targeting Windows Vista and above, we can ask for a name
|
* If we are targeting Windows Vista and above, we can ask for a name
|
||||||
|
Reference in New Issue
Block a user