Index: src/bin/psql/common.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/common.c,v
retrieving revision 1.87
diff -c -c -r1.87 common.c
*** src/bin/psql/common.c	23 May 2004 22:20:10 -0000	1.87
--- src/bin/psql/common.c	18 Aug 2004 02:48:08 -0000
***************
*** 1078,1090 ****
  	if (**filename == '~')
  	{
  		char	   *fn;
- 		char	   *home;
  		char		oldp,
  				   *p;
  		struct passwd *pw;
  
  		fn = *filename;
! 		home = NULL;
  
  		p = fn + 1;
  		while (*p != '/' && *p != '\0')
--- 1078,1090 ----
  	if (**filename == '~')
  	{
  		char	   *fn;
  		char		oldp,
  				   *p;
  		struct passwd *pw;
+ 		char		home[MAXPGPATH];
  
  		fn = *filename;
! 		*home = '\0';
  
  		p = fn + 1;
  		while (*p != '/' && *p != '\0')
***************
*** 1094,1105 ****
  		*p = '\0';
  
  		if (*(fn + 1) == '\0')
! 			home = getenv("HOME");
  		else if ((pw = getpwnam(fn + 1)) != NULL)
! 			home = pw->pw_dir;
  
  		*p = oldp;
! 		if (home)
  		{
  			char	   *newfn;
  
--- 1094,1105 ----
  		*p = '\0';
  
  		if (*(fn + 1) == '\0')
! 			get_home_path(home);
  		else if ((pw = getpwnam(fn + 1)) != NULL)
! 			StrNCpy(home, pw->pw_dir, MAXPGPATH);
  
  		*p = oldp;
! 		if (strlen(home) != 0)
  		{
  			char	   *newfn;
  
Index: src/bin/psql/input.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/input.c,v
retrieving revision 1.34
diff -c -c -r1.34 input.c
*** src/bin/psql/input.c	25 Jan 2004 03:07:22 -0000	1.34
--- src/bin/psql/input.c	18 Aug 2004 02:48:08 -0000
***************
*** 171,177 ****
  #ifdef USE_READLINE
  	if (flags & 1)
  	{
! 		const char *home;
  
  		useReadline = true;
  		initialize_readline();
--- 171,177 ----
  #ifdef USE_READLINE
  	if (flags & 1)
  	{
! 		char home[MAXPGPATH];
  
  		useReadline = true;
  		initialize_readline();
***************
*** 180,187 ****
  		if (GetVariable(pset.vars, "HISTSIZE") == NULL)
  			SetVariable(pset.vars, "HISTSIZE", "500");
  		using_history();
! 		home = getenv("HOME");
! 		if (home)
  		{
  			char *psql_history;
  
--- 180,186 ----
  		if (GetVariable(pset.vars, "HISTSIZE") == NULL)
  			SetVariable(pset.vars, "HISTSIZE", "500");
  		using_history();
! 		if (get_home_path(home))
  		{
  			char *psql_history;
  
***************
*** 231,240 ****
  #ifdef USE_READLINE
  	if (useHistory)
  	{
! 		char	   *home;
  
! 		home = getenv("HOME");
! 		if (home)
  		{
  			char	*psql_history;
  			int		 hist_size;
--- 230,238 ----
  #ifdef USE_READLINE
  	if (useHistory)
  	{
! 		char	   home[MAXPGPATH];
  
! 		if (get_home_path(home))
  		{
  			char	*psql_history;
  			int		 hist_size;
Index: src/bin/psql/startup.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.95
diff -c -c -r1.95 startup.c
*** src/bin/psql/startup.c	3 Jun 2004 00:07:37 -0000	1.95
--- src/bin/psql/startup.c	18 Aug 2004 02:48:09 -0000
***************
*** 570,577 ****
  static void
  process_psqlrc(char *argv0)
  {
- 	char	   *home;
  	char	   *psqlrc;
  	char	   global_file[MAXPGPATH];
  	char	   my_exec_path[MAXPGPATH];
  	char	   etc_path[MAXPGPATH];
--- 570,577 ----
  static void
  process_psqlrc(char *argv0)
  {
  	char	   *psqlrc;
+ 	char	   home[MAXPGPATH];
  	char	   global_file[MAXPGPATH];
  	char	   my_exec_path[MAXPGPATH];
  	char	   etc_path[MAXPGPATH];
***************
*** 582,588 ****
  	snprintf(global_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(global_file);
  
! 	if ((home = getenv("HOME")) != NULL)
  	{
  		psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1);
  		sprintf(psqlrc, "%s/%s", home, PSQLRC);
--- 582,588 ----
  	snprintf(global_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(global_file);
  
! 	if (get_home_path(home))
  	{
  		psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1);
  		sprintf(psqlrc, "%s/%s", home, PSQLRC);
Index: src/include/port.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port.h,v
retrieving revision 1.53
diff -c -c -r1.53 port.h
*** src/include/port.h	17 Aug 2004 14:38:38 -0000	1.53
--- src/include/port.h	18 Aug 2004 02:48:10 -0000
***************
*** 50,55 ****
--- 50,56 ----
  extern void get_pkglib_path(const char *my_exec_path, char *ret_path);
  extern void get_locale_path(const char *my_exec_path, char *ret_path);
  extern void set_pglocale_pgservice(const char *argv0, const char *app);
+ extern bool get_home_path(char *ret_path);
  
  /*
   *	is_absolute_path
***************
*** 74,82 ****
  #endif
  
  
- 
- 
- 
  /* Portable way to find binaries */
  extern int find_my_exec(const char *argv0, char *retpath);
  extern int find_other_exec(const char *argv0, const char *target,
--- 75,80 ----
***************
*** 104,109 ****
--- 102,113 ----
  #define SYSTEMQUOTE ""
  #endif
  
+ #ifdef WIN32
+ #define HOMEDIR	"USERPROFILE"
+ #else
+ #define HOMEDIR	"HOME"
+ #endif
+ 
  /* Portable delay handling */
  extern void pg_usleep(long microsec);
  
Index: src/interfaces/libpq/fe-connect.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.280
diff -c -c -r1.280 fe-connect.c
*** src/interfaces/libpq/fe-connect.c	17 Aug 2004 04:24:23 -0000	1.280
--- src/interfaces/libpq/fe-connect.c	18 Aug 2004 02:48:16 -0000
***************
*** 3093,3099 ****
  {
  	FILE	   *fp;
  	char	   *pgpassfile;
! 	char	   *home;
  	struct stat stat_buf;
  
  #define LINELEN NAMEDATALEN*5
--- 3093,3099 ----
  {
  	FILE	   *fp;
  	char	   *pgpassfile;
! 	char	   home[MAXPGPATH];
  	struct stat stat_buf;
  
  #define LINELEN NAMEDATALEN*5
***************
*** 3112,3119 ****
  		port = DEF_PGPORT_STR;
  
  	/* Look for it in the home dir */
! 	home = getenv("HOME");
! 	if (!home)
  		return NULL;
  
  	pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1);
--- 3112,3118 ----
  		port = DEF_PGPORT_STR;
  
  	/* Look for it in the home dir */
! 	if (!get_home_path(home))
  		return NULL;
  
  	pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1);
Index: src/port/path.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/path.c,v
retrieving revision 1.30
diff -c -c -r1.30 path.c
*** src/port/path.c	13 Aug 2004 14:47:23 -0000	1.30
--- src/port/path.c	18 Aug 2004 02:48:20 -0000
***************
*** 371,376 ****
--- 371,397 ----
  
  
  /*
+  *	get_include_path
+  */
+ bool
+ get_home_path(char *ret_path)
+ {
+ 	if (getenv(HOMEDIR) == NULL)
+ 	{
+ 		*ret_path = '\0';
+ 		return false;
+ 	}
+ 	else
+ 	{
+ 		StrNCpy(ret_path, getenv(HOMEDIR), MAXPGPATH);
+ 		canonicalize_path(ret_path);
+ 		return true;
+ 	}
+ }
+ 
+ 
+ 
+ /*
   *	make_relative - adjust path to be relative to bin/
   */
  static void
