From 154bb241f0e0ca4b682014f82253101468ad7a5e Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Sat, 19 Mar 2011 16:05:35 -0600 Subject: [PATCH] Fleshed out getrusage() stub for Windows --- src/lib/w32/getrusage.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/lib/w32/getrusage.c b/src/lib/w32/getrusage.c index 1733f2fbe..810a42e69 100644 --- a/src/lib/w32/getrusage.c +++ b/src/lib/w32/getrusage.c @@ -29,6 +29,7 @@ * * Known contributors to this file: * Markus Armbruster, 2011 + * Ron Koenderink, 2011 (some of this code was taken from MinGW) */ #include @@ -44,8 +45,27 @@ getrusage(int who, struct rusage *rus) return -1; } - /* FIXME stub */ - rus->ru_utime.tv_sec = rus->ru_utime.tv_usec = 0; - rus->ru_stime.tv_sec = rus->ru_stime.tv_usec = 0; + if (who == RUSAGE_SELF) { + HANDLE hProcess; + FILETIME ftCreation, ftExit, ftUser, ftKernel; + _int64 itmp; + + hProcess = GetCurrentProcess (); + + GetProcessTimes (hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); + + itmp = (_int64)ftUser.dwLowDateTime + + ((_int64)ftUser.dwHighDateTime * (_int64)0x100000000); + rus->ru_utime.tv_sec = (long)(itmp / 10000000U); + rus->ru_utime.tv_usec = (long)((itmp % 10000000U) / 10.); + + itmp = (_int64)ftKernel.dwLowDateTime + + ((_int64)ftKernel.dwHighDateTime * (_int64)0x100000000); + rus->ru_stime.tv_sec = (long)(itmp / 10000000U); + rus->ru_stime.tv_usec = (long)((itmp % 10000000U) / 10.); + } else { + rus->ru_utime.tv_sec = rus->ru_utime.tv_usec = 0; + rus->ru_stime.tv_sec = rus->ru_stime.tv_usec = 0; + } return 0; } -- 2.43.0