postgresql/src/port
Heikki Linnakangas aa1d2fc5e9 Another attempt at fixing Windows Norwegian locale.
Previous fix mapped "Norwegian (Bokmål)" locale, which contains a non-ASCII
character, to the pure ASCII alias "norwegian-bokmal". However, it turns
out that more recent versions of the CRT library, in particular MSVCR110
(Visual Studio 2012), changed the behaviour of setlocale() so that if
you pass "norwegian-bokmal" to setlocale, it returns "Norwegian_Norway".

That meant trouble, when setlocale(..., NULL) first returned
"Norwegian (Bokmål)_Norway", which we mapped to "norwegian-bokmal_Norway",
but another call to setlocale(..., "norwegian-bokmal_Norway") returned
"Norwegian_Norway". That caused PostgreSQL to think that they are different
locales, and therefore not compatible. That caused initdb to fail at
CREATE DATABASE.

Older CRT versions seem to accept "Norwegian_Norway" too, so change the
mapping to return "Norwegian_Norway" instead of "norwegian-bokmal".

Backpatch to 9.2 like the previous attempt. We haven't made a release that
includes the previous fix yet, so we don't need to worry about changing the
locale of existing clusters from "norwegian-bokmal" to "Norwegian_Norway".
(Doing any mapping like this at all requires changing the locale of
existing databases; the release notes need to include instructions for
that).
2015-01-16 13:28:19 +02:00
..
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
chklocale.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
crypt.c Suppress dead, unportable src/port/crypt.c code. 2014-10-12 23:27:06 -04:00
dirent.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
dirmod.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
erand48.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
fls.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
fseeko.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
getaddrinfo.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
gethostname.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
getopt.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
getopt_long.c Add support for optional_argument to our own getopt_long() implementation. 2014-09-10 17:21:50 +02:00
getpeereid.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
getrusage.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
gettimeofday.c Windows: use GetSystemTimePreciseAsFileTime if available 2014-12-08 23:36:06 +09:00
inet_aton.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
inet_net_ntop.c Pgindent run before 9.1 beta2. 2011-06-09 14:32:50 -04:00
isinf.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
kill.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
Makefile Move username lookup functions from /port to /common 2014-01-10 18:03:28 -05:00
mkdtemp.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
noblock.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
open.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
path.c Fix libpq's behavior when /etc/passwd isn't readable. 2015-01-11 12:35:44 -05:00
pg_crc.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
pgcheckdir.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
pgmkdirp.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
pgsleep.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
pgstrcasecmp.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
pqsignal.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
pthread-win32.h Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
qsort.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
qsort_arg.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
quotes.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
random.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
README Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
rint.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
snprintf.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
sprompt.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
srandom.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
strerror.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
strlcat.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
strlcpy.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
system.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
tar.c Don't include file type bits in tar archive's mode field. 2014-12-05 13:54:21 +02:00
thread.c Remove configure test for nonstandard variants of getpwuid_r(). 2015-01-11 12:52:37 -05:00
unsetenv.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
win32.ico Revert binary change in copyright year adjustment. 2012-01-01 19:40:13 -05:00
win32env.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
win32error.c Update copyright for 2015 2015-01-06 11:43:47 -05:00
win32setlocale.c Another attempt at fixing Windows Norwegian locale. 2015-01-16 13:28:19 +02:00
win32ver.rc Update copyright for 2015 2015-01-06 11:43:47 -05:00

src/port/README

libpgport
=========

libpgport must have special behavior.  It supplies functions to both
libraries and applications.  However, there are two complexities:

1)  Libraries need to use object files that are compiled with exactly
the same flags as the library.  libpgport might not use the same flags,
so it is necessary to recompile the object files for individual
libraries.  This is done by removing -lpgport from the link line:

        # Need to recompile any libpgport object files
        LIBS := $(filter-out -lpgport, $(LIBS))

and adding infrastructure to recompile the object files:

        OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
                connect.o misc.o path.o exec.o \
                $(filter snprintf.o, $(LIBOBJS))

The problem is that there is no testing of which object files need to be
added, but missing functions usually show up when linking user
applications.

2) For applications, we use -lpgport before -lpq, so the static files
from libpgport are linked first.  This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq.  libpq's libpgport usage changes over time, so such a
dependency is a problem.  Win32, Linux, and Darwin use an export list to
control the symbols exported by libpq.