1 /*
2 ** Copyright 2004, Jérôme Duval, jerome.duval@free.fr.
3 ** Copyright 2004, Axel Dörfler, axeld@pinc-software.de.
4 ** Distributed under the terms of the MIT License.
5 */
6
7 #include <OS.h>
8
9 #include <errno.h>
10 #include <sys/resource.h>
11 #include <sys/times.h>
12
13 #include <symbol_versioning.h>
14
15 #include <errno_private.h>
16 #include <time_private.h>
17 #include <times_private.h>
18
19
20 static inline clock_t
times_common(struct tms * buffer,bigtime_t microSecondsPerClock)21 times_common(struct tms* buffer, bigtime_t microSecondsPerClock)
22 {
23 team_usage_info info;
24 status_t err;
25
26 if ((err = get_team_usage_info(B_CURRENT_TEAM, RUSAGE_SELF, &info))
27 != B_OK) {
28 __set_errno(err);
29 return -1;
30 }
31
32 buffer->tms_utime = info.user_time / microSecondsPerClock;
33 buffer->tms_stime = info.kernel_time / microSecondsPerClock;
34
35 if ((err = get_team_usage_info(B_CURRENT_TEAM, RUSAGE_CHILDREN, &info))
36 != B_OK) {
37 __set_errno(err);
38 return -1;
39 }
40
41 buffer->tms_cutime = info.user_time / microSecondsPerClock;
42 buffer->tms_cstime = info.kernel_time / microSecondsPerClock;
43
44 return system_time() / microSecondsPerClock;
45 }
46
47
48 clock_t
__times_beos(struct tms * buffer)49 __times_beos(struct tms* buffer)
50 {
51 return times_common(buffer, MICROSECONDS_PER_CLOCK_TICK_BEOS);
52 }
53
54
55 clock_t
__times(struct tms * buffer)56 __times(struct tms* buffer)
57 {
58 return times_common(buffer, MICROSECONDS_PER_CLOCK_TICK);
59 }
60
61
62 DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__times_beos", "times@", "BASE");
63
64 DEFINE_LIBROOT_KERNEL_SYMBOL_VERSION("__times", "times@@", "1_ALPHA4");
65