On May 16 18:10, Yaakov (Cygwin/X) wrote: > On Mon, 2011-05-16 at 12:43 +0200, Corinna Vinschen wrote: > > Thanks for this patch. It looks good to me with two exceptions: > > [...] > Revised patch attached.
Thank you. You can apply it, but while I was looking into it, this occured to me: > + FILETIME creation_time, exit_time, kernel_time, user_time; > + long long x; > + [...] > + GetProcessTimes (hProcess, &creation_time, &exit_time, &kernel_time, > + &user_time); > + > + x = ((long long) kernel_time.dwHighDateTime << 32) > + + ((unsigned) kernel_time.dwLowDateTime) > + + ((long long) user_time.dwHighDateTime << 32) > + + ((unsigned) user_time.dwLowDateTime); > + tp->tv_sec = x / (long long) NSPERSEC; > + tp->tv_nsec = (x % (long long) NSPERSEC) * 100LL; This conversion arithmetic from FILETIME to long long happens a lot in times.cc, even though it's absolutely not necessary. The FILETIME struct is actually a LARGE_INTEGER in which just the QuadPart member is missing, unfortunately. What we can do is to replace the bit shifting stuff with a simple cast: x = ((PLARGE_INTEGER) &kernel_time)->QuadPart + ((PLARGE_INTEGER) &user_time)->QuadPart; Alternatively we can define kernel_time etc as LARGE_INTEGER and cast in the call to GetProcessTimes or just call NtQueryInformationProcess. What do you think? If you don't care, just apply your patch as is. Thanks, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat