Make libpq_gettext save and restore errno in a Windows-compatible way.
authorTom Lane <[email protected]>
Fri, 8 Jul 2005 15:24:53 +0000 (15:24 +0000)
committerTom Lane <[email protected]>
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);