Index: src/port/getrusage.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/port/getrusage.c,v
retrieving revision 1.6
diff -c -r1.6 getrusage.c
*** src/port/getrusage.c	29 Aug 2004 04:13:12 -0000	1.6
--- src/port/getrusage.c	2 Sep 2004 17:44:08 -0000
***************
*** 26,31 ****
--- 26,32 ----
   *		solaris_sparc
   *		svr4
   *		hpux 9.*
+  *		win32
   * which currently is all the supported platforms that don't have a
   * native version of getrusage().  So, if configure decides to compile
   * this file at all, we just use this version unconditionally.
***************
*** 35,42 ****
  getrusage(int who, struct rusage * rusage)
  {
  #ifdef WIN32
! 	if (rusage)
! 		memset(rusage, 0, sizeof(rusage));
  #else
  	struct tms	tms;
  	int			tick_rate = CLK_TCK;	/* ticks per second */
--- 36,69 ----
  getrusage(int who, struct rusage * rusage)
  {
  #ifdef WIN32
! 	FILETIME starttime;
! 	FILETIME exittime;
! 	FILETIME kerneltime;
! 	FILETIME usertime;
! 	ULARGE_INTEGER li;
!
! 	if (rusage == (struct rusage *)NULL)
! 	{
! 		errno = EFAULT;
! 		return -1;
! 	}
! 	memset(rusage, 0, sizeof(struct rusage));
! 	if (GetProcessTimes(GetCurrentProcess(), &starttime, &exittime, &kerneltime, &usertime) == 0)
! 	{
! 		_dosmaperr(GetLastError());
! 		return -1;
! 	}
!
! 	/* Convert FILETIMEs (0.1 us) to struct timeval */
! 	memcpy(&li, &kerneltime, sizeof(FILETIME));
! 	li.QuadPart /= 10L; /* Convert to microseconds */
! 	rusage->ru_stime.tv_sec  = li.QuadPart / 1000000L;
! 	rusage->ru_stime.tv_usec = li.QuadPart % 1000000L;
!
! 	memcpy(&li, &usertime, sizeof(FILETIME));
! 	li.QuadPart /= 10L; /* Convert to microseconds */
! 	rusage->ru_utime.tv_sec  = li.QuadPart / 1000000L;
! 	rusage->ru_utime.tv_usec = li.QuadPart % 1000000L;
  #else
  	struct tms	tms;
  	int			tick_rate = CLK_TCK;	/* ticks per second */
