Index: contrib/pg_upgrade/file.c
===================================================================
RCS file: /cvsroot/pgsql/contrib/pg_upgrade/file.c,v
retrieving revision 1.13
diff -c -c -r1.13 file.c
*** contrib/pg_upgrade/file.c	6 Jul 2010 19:18:55 -0000	1.13
--- contrib/pg_upgrade/file.c	9 Jul 2010 16:41:46 -0000
***************
*** 170,175 ****
--- 170,177 ----
  
  		if (nbytes < 0)
  		{
+ 			int save_errno = errno;
+ 			
  			if (buffer != NULL)
  				free(buffer);
  
***************
*** 179,184 ****
--- 181,187 ----
  			if (dest_fd != 0)
  				close(dest_fd);
  
+ 			errno = save_errno;
  			return -1;
  		}
  
***************
*** 190,197 ****
  		if (write(dest_fd, buffer, nbytes) != nbytes)
  		{
  			/* if write didn't set errno, assume problem is no disk space */
! 			if (errno == 0)
! 				errno = ENOSPC;
  
  			if (buffer != NULL)
  				free(buffer);
--- 193,199 ----
  		if (write(dest_fd, buffer, nbytes) != nbytes)
  		{
  			/* if write didn't set errno, assume problem is no disk space */
! 			int save_errno = errno ? errno : ENOSPC;
  
  			if (buffer != NULL)
  				free(buffer);
***************
*** 202,207 ****
--- 204,210 ----
  			if (dest_fd != 0)
  				close(dest_fd);
  
+ 			errno = save_errno;
  			return -1;
  		}
  	}
