1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-18 12:22:09 +03:00

Make libpq_gettext save and restore errno in a Windows-compatible way.

Also, back-patch fix into back branches.
This commit is contained in:
Tom Lane
2005-07-08 15:24:53 +00:00
parent 75aed9f0c2
commit a646e4874a

View File

@@ -23,7 +23,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.112 2004/12/31 22:03:50 pgsql Exp $ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.112.4.1 2005/07/08 15:24:53 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@@ -1127,13 +1127,25 @@ PQenv2encoding(void)
char * char *
libpq_gettext(const char *msgid) libpq_gettext(const char *msgid)
{ {
static int already_bound = 0; static bool already_bound = false;
if (!already_bound) 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 */ /* 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); return dgettext("libpq", msgid);