From 99382f45815d2720196e6d2510391d5781d0f46c Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 6 Jul 2005 16:25:59 +0000
Subject: [PATCH] Save and restore errno across bindtextdomain call, per
 discussion.

---
 src/interfaces/libpq/fe-misc.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
index 66ad325c52..6d3b814a9d 100644
--- a/src/interfaces/libpq/fe-misc.c
+++ b/src/interfaces/libpq/fe-misc.c
@@ -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.114 2005/06/12 00:00:21 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.115 2005/07/06 16:25:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1128,13 +1128,21 @@ 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);
+		errno = save_errno;
 	}
 
 	return dgettext("libpq", msgid);