Skip to content

Commit beb4480

Browse files
committed
Refactor get_collation_current_version().
The code paths for three different OSes finished up with three different ways of excluding C[.xxx] and POSIX from consideration. Merge them. Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/20210117215940.GE8560%40telsasoft.com
1 parent 9cf184c commit beb4480

File tree

1 file changed

+4
-30
lines changed

1 file changed

+4
-30
lines changed

src/backend/utils/adt/pg_locale.c

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1636,37 +1636,17 @@ get_collation_current_version(char collprovider, const char *collcollate)
16361636
}
16371637
else
16381638
#endif
1639-
if (collprovider == COLLPROVIDER_LIBC)
1639+
if (collprovider == COLLPROVIDER_LIBC &&
1640+
pg_strcasecmp("C", collcollate) != 0 &&
1641+
pg_strncasecmp("C.", collcollate, 2) != 0 &&
1642+
pg_strcasecmp("POSIX", collcollate) != 0)
16401643
{
16411644
#if defined(__GLIBC__)
1642-
char *copy = pstrdup(collcollate);
1643-
char *copy_suffix = strstr(copy, ".");
1644-
bool need_version = true;
1645-
1646-
/*
1647-
* Check for names like C.UTF-8 by chopping off the encoding suffix on
1648-
* our temporary copy, so we can skip the version.
1649-
*/
1650-
if (copy_suffix)
1651-
*copy_suffix = '\0';
1652-
if (pg_strcasecmp("c", copy) == 0 ||
1653-
pg_strcasecmp("posix", copy) == 0)
1654-
need_version = false;
1655-
pfree(copy);
1656-
if (!need_version)
1657-
return NULL;
1658-
16591645
/* Use the glibc version because we don't have anything better. */
16601646
collversion = pstrdup(gnu_get_libc_version());
16611647
#elif defined(LC_VERSION_MASK)
16621648
locale_t loc;
16631649

1664-
/* C[.encoding] and POSIX never change. */
1665-
if (strcmp("C", collcollate) == 0 ||
1666-
strncmp("C.", collcollate, 2) == 0 ||
1667-
strcmp("POSIX", collcollate) == 0)
1668-
return NULL;
1669-
16701650
/* Look up FreeBSD collation version. */
16711651
loc = newlocale(LC_COLLATE, collcollate, NULL);
16721652
if (loc)
@@ -1687,12 +1667,6 @@ get_collation_current_version(char collprovider, const char *collcollate)
16871667
NLSVERSIONINFOEX version = {sizeof(NLSVERSIONINFOEX)};
16881668
WCHAR wide_collcollate[LOCALE_NAME_MAX_LENGTH];
16891669

1690-
/* These would be invalid arguments, but have no version. */
1691-
if (pg_strcasecmp("c", collcollate) == 0 ||
1692-
pg_strcasecmp("posix", collcollate) == 0)
1693-
return NULL;
1694-
1695-
/* For all other names, ask the OS. */
16961670
MultiByteToWideChar(CP_ACP, 0, collcollate, -1, wide_collcollate,
16971671
LOCALE_NAME_MAX_LENGTH);
16981672
if (!GetNLSVersionEx(COMPARE_STRING, wide_collcollate, &version))

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy