xref: /haiku/src/system/libroot/posix/unistd/sleep.c (revision 820dca4df6c7bf955c46e8f6521b9408f50b2900)
1 /*
2 ** Copyright 2001, Manuel J. Petit. All rights reserved.
3 ** Distributed under the terms of the NewOS License.
4 */
5 
6 #include <unistd.h>
7 
8 #include <pthread.h>
9 
10 #include <syscalls.h>
11 
12 
13 unsigned
14 sleep(unsigned seconds)
15 {
16 	bigtime_t usecs;
17 	bigtime_t start;
18 	int err;
19 
20 	start = system_time();
21 
22 	usecs = 1000000;
23 	usecs *= (bigtime_t) seconds;
24 
25 	err = snooze_until(start + usecs, B_SYSTEM_TIMEBASE);
26 
27 	pthread_testcancel();
28 
29 	if (err)
30 		return seconds - (unsigned)((system_time() - start) / 1000000);
31 
32 	return 0;
33 }
34