diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 1c76fd97708764df04b3ad52d61eed42fdf97f57..c102cdd7aa2783e46481b9eabf16a649a06f4b7e 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -13,7 +13,7 @@
  *
  *	Copyright (c) 2001-2003, PostgreSQL Global Development Group
  *
- *	$PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.69 2004/05/13 22:45:02 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.70 2004/05/18 03:36:30 momjian Exp $
  * ----------
  */
 #include "postgres.h"
@@ -487,7 +487,7 @@ pgstat_forkexec(STATS_PROCESS_TYPE procType)
 	/* + the pstat file names, and postgres pathname */
 	snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",pgStat_tmpfname);
 	snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",pgStat_fname);
-	snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",my_exec_path); /* used? */
+	snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",postgres_exec_path);
 	snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",DataDir);
 
 	/* Add to the arg list */
@@ -500,9 +500,9 @@ pgstat_forkexec(STATS_PROCESS_TYPE procType)
 
 	/* Fire off execv in child */
 #ifdef WIN32
-	pid = win32_forkexec(my_exec_path, av);
+	pid = win32_forkexec(postgres_exec_path, av);
 #else
-	if ((pid = fork()) == 0 && (execv(my_exec_path, av) == -1))
+	if ((pid = fork()) == 0 && (execv(postgres_exec_path, av) == -1))
 		/* FIXME: [fork/exec] suggestions for what to do here? Can't call elog... */
 		abort();
 #endif
@@ -532,7 +532,7 @@ pgstat_parseArgs(PGSTAT_FORK_ARGS)
 	MaxBackends		= atoi(argv[argc++]);
 	StrNCpy(pgStat_tmpfname,argv[argc++],MAXPGPATH);
 	StrNCpy(pgStat_fname,	argv[argc++],MAXPGPATH);
-	StrNCpy(my_exec_path,	argv[argc++],MAXPGPATH);
+	StrNCpy(postgres_exec_path,	argv[argc++],MAXPGPATH);
 	DataDir			= strdup(argv[argc++]);
 
 	read_nondefault_variables();
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index d94130a1b0aad6ca1e70ec8b6164f9a127d83648..a3d13b9cedc68059ce4a1ddcaac0585929bc54bc 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.86 2004/05/17 14:35:32 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.87 2004/05/18 03:36:36 momjian Exp $
  *
  * NOTES
  *	  Globals used all over the place should be declared here and not
@@ -46,6 +46,7 @@ char	   *DataDir = NULL;
 char		OutputFileName[MAXPGPATH];
 
 char		my_exec_path[MAXPGPATH];	/* full path to postgres executable */
+char		postgres_exec_path[MAXPGPATH];	/* full path to backend executable */
 char		pkglib_path[MAXPGPATH];	/* full path to lib directory */
 
 BackendId	MyBackendId;
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 5aae743f0f584e0eeb1ff50c80300d35191b3d43..85d65ab459c65cf7255197bbf3b99546b4f978b1 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -39,7 +39,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.31 2004/05/17 14:35:33 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.32 2004/05/18 03:36:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1957,6 +1957,8 @@ main(int argc, char *argv[])
 		get_share_path(backend_exec, share_path);
 	}
 
+	canonicalize_path(share_path);
+
 	if ((short_version = get_short_version()) == NULL)
 	{
 		fprintf(stderr, _("%s: could not determine valid short version string\n"), progname);
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index a97caf0fac2f71d628f66eb1aee97f0e1769a3ca..03491f2ee564435f498cebb6f121736732cb4346 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.159 2004/05/17 14:35:33 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.160 2004/05/18 03:36:44 momjian Exp $
  *
  * NOTES
  *	  some of the information in this file should be moved to
@@ -143,6 +143,7 @@ extern long MyCancelKey;
 
 extern char OutputFileName[];
 extern char my_exec_path[];
+extern char postgres_exec_path[];
 extern char pkglib_path[];
 
 /*
diff --git a/src/port/exec.c b/src/port/exec.c
index 02defe9a8ddcfa5bc066392a299e677a967e3d9d..f98acda3984870188e755be39ad44b33e153d2d2 100644
--- a/src/port/exec.c
+++ b/src/port/exec.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/port/exec.c,v 1.6 2004/05/17 14:35:34 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/port/exec.c,v 1.7 2004/05/18 03:36:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -345,7 +345,7 @@ win32_make_absolute(char *path)
 	if (_fullpath(abspath, path, MAXPGPATH) == NULL)
 	{
 		log_debug("Win32 path expansion failed:  %s", strerror(errno));
-		return path;
+		StrNCpy(abspath, path, MAXPGPATH);
 	}
 	canonicalize_path(abspath);
 
diff --git a/src/port/path.c b/src/port/path.c
index f5fccca278741b8dd1e58da150ec8285d3612af5..565f496173ae96f76990b8b649a946f84eaed023 100644
--- a/src/port/path.c
+++ b/src/port/path.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/port/path.c,v 1.8 2004/05/17 14:35:34 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/port/path.c,v 1.9 2004/05/18 03:36:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -234,7 +234,7 @@ relative_path(const char *path1, const char *path2)
 		(!isalpha(*path2) || !path2[1] == ':'))
 		return false;
 	if ((!isalpha(*path1) || !path1[1] == ':') &&
-		(isalpha(*path2) && path2[1] == ':')
+		(isalpha(*path2) && path2[1] == ':'))
 		return false;
 	if (isalpha(*path1) && path1[1] == ':' &&
 		isalpha(*path2) && path2[1] == ':')
diff --git a/src/timezone/pgtz.c b/src/timezone/pgtz.c
index 3cb3849434d42b8c4743112b2565c138bf5ca9d2..c51e3b0382b5e868229ddd6479e6e2c28941ffb4 100644
--- a/src/timezone/pgtz.c
+++ b/src/timezone/pgtz.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.8 2004/05/17 14:35:34 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.9 2004/05/18 03:36:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -17,15 +17,14 @@
 
 static char tzdir[MAXPGPATH];
 static int	done_tzdir = 0;
+
 char *
 pg_TZDIR(void)
 {
-	char	   *p;
-
 	if (done_tzdir)
 		return tzdir;
 
-	get_share_dir(my_exec_path, tzdir);
+	get_share_path(my_exec_path, tzdir);
 	strcat(tzdir, "/timezone");
 
 	done_tzdir = 1;