Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature-vt/sys/src/libc/9sys/times.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
 
4
static
5
char*
6
skip(char *p)
7
{
8
 
9
	while(*p == ' ')
10
		p++;
11
	while(*p != ' ' && *p != 0)
12
		p++;
13
	return p;
14
}
15
 
16
/*
17
 *  after a fork with fd's copied, both fd's are pointing to
18
 *  the same Chan structure.  Since the offset is kept in the Chan
19
 *  structure, the seek's and read's in the two processes can be
20
 *  are competing moving the offset around.  Hence the unusual loop
21
 *  in the middle of this routine.
22
 */
23
long
24
times(long *t)
25
{
26
	char b[200], *p;
27
	static int f = -1;
28
	int i, retries;
29
	ulong r;
30
 
31
	memset(b, 0, sizeof(b));
32
	for(retries = 0; retries < 100; retries++){
33
		if(f < 0)
34
			f = open("/dev/cputime", OREAD|OCEXEC);
35
		if(f < 0)
36
			break;
37
		if(seek(f, 0, 0) < 0 || (i = read(f, b, sizeof(b))) < 0){
38
			close(f);
39
			f = -1;
40
		} else {
41
			if(i != 0)
42
				break;
43
		}
44
	}
45
	p = b;
46
	if(t)
47
		t[0] = atol(p);
48
	p = skip(p);
49
	if(t)
50
		t[1] = atol(p);
51
	p = skip(p);
52
	r = atol(p);
53
	if(t){
54
		p = skip(p);
55
		t[2] = atol(p);
56
		p = skip(p);
57
		t[3] = atol(p);
58
	}
59
	return r;
60
}