xref: /plan9/sys/src/ape/lib/ap/plan9/times.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
13e12c5d1SDavid du Colombier #include <sys/types.h>
23e12c5d1SDavid du Colombier #include <sys/stat.h>
33e12c5d1SDavid du Colombier #include <fcntl.h>
43e12c5d1SDavid du Colombier #include <sys/times.h>
53e12c5d1SDavid du Colombier #include <unistd.h>
63e12c5d1SDavid du Colombier #include <errno.h>
73e12c5d1SDavid du Colombier #include <string.h>
83e12c5d1SDavid du Colombier #include <stdlib.h>
93e12c5d1SDavid du Colombier 
103e12c5d1SDavid du Colombier static
113e12c5d1SDavid du Colombier char*
skip(char * p)123e12c5d1SDavid du Colombier skip(char *p)
133e12c5d1SDavid du Colombier {
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier 	while(*p == ' ')
163e12c5d1SDavid du Colombier 		p++;
173e12c5d1SDavid du Colombier 	while(*p != ' ' && *p != 0)
183e12c5d1SDavid du Colombier 		p++;
193e12c5d1SDavid du Colombier 	return p;
203e12c5d1SDavid du Colombier }
213e12c5d1SDavid du Colombier 
223e12c5d1SDavid du Colombier clock_t
times(struct tms * buf)233e12c5d1SDavid du Colombier times(struct tms *buf)
243e12c5d1SDavid du Colombier {
253e12c5d1SDavid du Colombier 	char b[200], *p;
26*9a747e4fSDavid du Colombier 	int f;
273e12c5d1SDavid du Colombier 	unsigned long r;
283e12c5d1SDavid du Colombier 
293e12c5d1SDavid du Colombier 	memset(b, 0, sizeof(b));
303e12c5d1SDavid du Colombier 	f = open("/dev/cputime", O_RDONLY);
313e12c5d1SDavid du Colombier 	if(f >= 0) {
323e12c5d1SDavid du Colombier 		lseek(f, SEEK_SET, 0);
333e12c5d1SDavid du Colombier 		read(f, b, sizeof(b));
34*9a747e4fSDavid du Colombier 		close(f);
353e12c5d1SDavid du Colombier 	}
363e12c5d1SDavid du Colombier 	p = b;
373e12c5d1SDavid du Colombier 	if(buf)
383e12c5d1SDavid du Colombier 		buf->tms_utime = atol(p);
393e12c5d1SDavid du Colombier 	p = skip(p);
403e12c5d1SDavid du Colombier 	if(buf)
413e12c5d1SDavid du Colombier 		buf->tms_stime = atol(p);
423e12c5d1SDavid du Colombier 	p = skip(p);
433e12c5d1SDavid du Colombier 	r = atol(p);
443e12c5d1SDavid du Colombier 	if(buf){
453e12c5d1SDavid du Colombier 		p = skip(p);
463e12c5d1SDavid du Colombier 		buf->tms_cutime = atol(p);
473e12c5d1SDavid du Colombier 		p = skip(p);
483e12c5d1SDavid du Colombier 		buf->tms_cstime = atol(p);
493e12c5d1SDavid du Colombier 	}
503e12c5d1SDavid du Colombier 	return r;
513e12c5d1SDavid du Colombier }
52