diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-03-30 11:14:58 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-03-30 11:14:58 -0400 |
commit | 4bc3a16677be061e60abd8d9e732c434784566db (patch) | |
tree | 23cc327565af4c6f0edfabae020fece8109c7bb9 /src/backend/utils/adt/genfile.c | |
parent | 550041728d65c78a58fe76f89e68b75d56c39645 (diff) | |
download | postgresql-4bc3a16677be061e60abd8d9e732c434784566db.tar.gz postgresql-4bc3a16677be061e60abd8d9e732c434784566db.zip |
Be more careful about extracting encoding from locale strings on Windows.
GetLocaleInfoEx() can fail on strings that setlocale() was perfectly
happy with. A common way for that to happen is if the locale string
is actually a Unix-style string, say "et_EE.UTF-8". In that case,
what's after the dot is an encoding name, not a Windows codepage number;
blindly treating it as a codepage number led to failure, with a fairly
silly error message. Hence, check to see if what's after the dot is
all digits, and if not, treat it as a literal encoding name rather than
a codepage number. This will do the right thing with many Unix-style
locale strings, and produce a more sensible error message otherwise.
Somewhat independently of that, treat a zero (CP_ACP) result from
GetLocaleInfoEx() as meaning that we must use UTF-8 encoding.
Back-patch to all supported branches.
Juan José SantamarÃa Flecha
Discussion: https://postgr.es/m/24905.1585445371@sss.pgh.pa.us
Diffstat (limited to 'src/backend/utils/adt/genfile.c')
0 files changed, 0 insertions, 0 deletions