]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Make libpq_gettext save and restore errno in a Windows-compatible way.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Jul 2005 15:24:53 +0000 (15:24 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Jul 2005 15:24:53 +0000 (15:24 +0000)
Also, back-patch fix into back branches.

src/interfaces/libpq/fe-misc.c

index f3691c783b513bfb945c69358a75212dca8ca8f9..3571af7b911392d0344377e8b15d37ee5658dba7 100644 (file)
@@ -23,7 +23,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * 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 *
 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);