From 7e3a6be6572caa34ceaa5e2694e2e4ad8bbb8540 Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Fri, 12 Nov 1993 20:08:22 +0000 Subject: [PATCH] Fixed getrusage stub to correctly compute the microseconds. --- lisp/hpux-os.c | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/lisp/hpux-os.c b/lisp/hpux-os.c index b144b0f40..30a8ffb16 100644 --- a/lisp/hpux-os.c +++ b/lisp/hpux-os.c @@ -1,5 +1,5 @@ /* - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/hpux-os.c,v 1.3 1993/08/02 20:20:35 hallgren Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/hpux-os.c,v 1.4 1993/11/12 20:08:22 wlott Exp $ * * OS-dependent routines. This file (along with os.h) exports an * OS-independent interface to the operating system VM facilities. @@ -39,6 +39,7 @@ the particular section in. #include "interrupt.h" #include <netdb.h> #include <sys/times.h> +#include <errno.h> os_vm_size_t os_vm_page_size=(-1); @@ -306,28 +307,41 @@ os_reallocate(os_vm_address_t addr, os_vm_size_t old_len, return addr; } -void -getrusage(int who,struct rusage *rusage) +int getrusage(int who,struct rusage *rusage) { - long clk_tck; + static long ticks_per_sec = 0; + static long usec_per_tick = 0; struct tms buf; + clock_t uticks, sticks; + bzero(rusage,sizeof(struct rusage)); - clk_tck=sysconf(_SC_CLK_TCK); - if(times(&buf) == -1) { - perror("times"); - return; + if (ticks_per_sec == 0) { + ticks_per_sec = sysconf(_SC_CLK_TCK); + usec_per_tick = 1000000 / ticks_per_sec; } + + if(times(&buf) == -1) + return -1; + if(who == RUSAGE_SELF) { - rusage->ru_utime.tv_sec=buf.tms_utime/clk_tck; - rusage->ru_utime.tv_usec=(buf.tms_utime%clk_tck) * 100000; - rusage->ru_stime.tv_sec=buf.tms_stime/clk_tck; - rusage->ru_stime.tv_usec=(buf.tms_stime%clk_tck) * 100000; - } else if(who == RUSAGE_CHILDREN) { - rusage->ru_utime.tv_sec=buf.tms_cutime/clk_tck; - rusage->ru_utime.tv_usec=(buf.tms_cutime%clk_tck) * 100000; - rusage->ru_stime.tv_sec=buf.tms_cstime/clk_tck; - rusage->ru_stime.tv_usec=(buf.tms_cstime%clk_tck) * 100000; + uticks = buf.tms_utime; + sticks = buf.tms_stime; } + else if(who == RUSAGE_CHILDREN) { + uticks = buf.tms_utime; + sticks = buf.tms_stime; + } + else { + errno = EINVAL; + return -1; + } + + rusage->ru_utime.tv_sec = uticks / ticks_per_sec; + rusage->ru_utime.tv_usec = (uticks % ticks_per_sec) * usec_per_tick; + rusage->ru_stime.tv_sec = sticks / ticks_per_sec; + rusage->ru_stime.tv_usec = (sticks % ticks_per_sec) * usec_per_tick; + + return 0; } int -- GitLab