xref: /haiku/src/build/libroot/misc.cpp (revision 1a76488fc88584bf66b9751d7fb9b6527ac20d87)
1 
2 #include <BeOSBuildCompatibility.h>
3 
4 #include <errno.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <sys/stat.h>
9 #include <sys/time.h>
10 
11 #include <Debug.h>
12 #include <image.h>
13 #include <OS.h>
14 
15 mode_t __gUmask = 022;
16 
17 // debugger
18 void
19 debugger(const char *message)
20 {
21 	fprintf(stderr, "debugger() called: %s\n", message);
22 	exit(1);
23 }
24 
25 // _debuggerAssert
26 int
27 _debuggerAssert(const char *file, int line, const char *expression)
28 {
29 	char buffer[2048];
30 	snprintf(buffer, sizeof(buffer), "%s:%d: %s\n", file, line, expression);
31 	debugger(buffer);
32 	return 0;
33 }
34 
35 #ifndef HAIKU_HOST_PLATFORM_HAIKU
36 // system_time
37 bigtime_t
38 system_time(void)
39 {
40 	struct timeval tm;
41 	gettimeofday(&tm, NULL);
42 	return (int64)tm.tv_sec * 1000000LL + (int64)tm.tv_usec;
43 }
44 #endif
45 
46 // snooze
47 status_t
48 snooze(bigtime_t amount)
49 {
50 	if (amount <= 0)
51 		return B_OK;
52 
53 	int64 secs = amount / 1000000LL;
54 	int64 usecs = amount % 1000000LL;
55 	if (secs > 0) {
56 		if (sleep((unsigned)secs) < 0)
57 			return errno;
58 	}
59 
60 	if (usecs > 0) {
61 		if (usleep((useconds_t)usecs) < 0)
62 			return errno;
63 	}
64 
65 	return B_OK;
66 }
67 
68 // snooze_until
69 status_t
70 snooze_until(bigtime_t time, int timeBase)
71 {
72 	return snooze(time - system_time());
73 }
74