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_unix/sys/src/cmd/unix/drawterm/libc/time.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
 
5
/*
6
 *  After a fork with fd's copied, both fd's are pointing to
7
 *  the same Chan structure.  Since the offset is kept in the Chan
8
 *  structure, the seek's and read's in the two processes can
9
 *  compete at moving the offset around.  Hence the unusual loop
10
 *  in the middle of this routine.
11
 */
12
static long
13
oldtime(long *tp)
14
{
15
	char b[20];
16
	static int f = -1;
17
	int i, retries;
18
	long t;
19
 
20
	memset(b, 0, sizeof(b));
21
	for(retries = 0; retries < 100; retries++){
22
		if(f < 0)
23
			f = open("/dev/time", OREAD|OCEXEC);
24
		if(f < 0)
25
			break;
26
		if(seek(f, 0, 0) < 0 || (i = read(f, b, sizeof(b))) < 0){
27
			close(f);
28
			f = -1;
29
		} else {
30
			if(i != 0)
31
				break;
32
		}
33
	}
34
	t = atol(b);
35
	if(tp)
36
		*tp = t;
37
	return t;
38
}
39
 
40
long
41
time(long *tp)
42
{
43
	vlong t;
44
 
45
	t = nsec()/((vlong)1000000000);
46
	if(t == 0)
47
		t = oldtime(0);
48
	if(tp != nil)
49
		*tp = t;
50
	return t;
51
}