From: Tom Lane Date: Fri, 8 Jul 2005 15:24:53 +0000 (+0000) Subject: Make libpq_gettext save and restore errno in a Windows-compatible way. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=8808137983b46b77e381be803f28153aa66defad;p=users%2Fbernd%2Fpostgres.git Make libpq_gettext save and restore errno in a Windows-compatible way. Also, back-patch fix into back branches. --- diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index 5de3360db9..94f620acd1 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -1127,13 +1127,25 @@ PQenv2encoding(void) char * libpq_gettext(const char *msgid) { - static int already_bound = 0; + static bool already_bound = false; if (!already_bound) { - already_bound = 1; + /* dgettext() preserves errno, but bindtextdomain() doesn't */ + int save_errno = errno; + const char *ldir; + + already_bound = true; /* No relocatable lookup here because the binary could be anywhere */ - bindtextdomain("libpq", getenv("PGLOCALEDIR") ? getenv("PGLOCALEDIR") : LOCALEDIR); + ldir = getenv("PGLOCALEDIR"); + if (!ldir) + ldir = LOCALEDIR; + bindtextdomain("libpq", ldir); +#ifdef WIN32 + SetLastError(save_errno); +#else + errno = save_errno; +#endif } return dgettext("libpq", msgid);