xref: /aosp_15_r20/external/musl/compat/time32/getrusage_time32.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1 #include "time32.h"
2 #include <string.h>
3 #include <stddef.h>
4 #include <sys/resource.h>
5 
6 struct compat_rusage {
7 	struct timeval32 ru_utime;
8 	struct timeval32 ru_stime;
9 	long	ru_maxrss;
10 	long	ru_ixrss;
11 	long	ru_idrss;
12 	long	ru_isrss;
13 	long	ru_minflt;
14 	long	ru_majflt;
15 	long	ru_nswap;
16 	long	ru_inblock;
17 	long	ru_oublock;
18 	long	ru_msgsnd;
19 	long	ru_msgrcv;
20 	long	ru_nsignals;
21 	long	ru_nvcsw;
22 	long	ru_nivcsw;
23 };
24 
__getrusage_time32(int who,struct compat_rusage * usage)25 int __getrusage_time32(int who, struct compat_rusage *usage)
26 {
27 	struct rusage ru;
28 	int r = getrusage(who, &ru);
29 	if (!r) {
30 		usage->ru_utime.tv_sec = ru.ru_utime.tv_sec;
31 		usage->ru_utime.tv_usec = ru.ru_utime.tv_usec;
32 		usage->ru_stime.tv_sec = ru.ru_stime.tv_sec;
33 		usage->ru_stime.tv_usec = ru.ru_stime.tv_usec;
34 		memcpy(&usage->ru_maxrss, &ru.ru_maxrss,
35 			sizeof(struct compat_rusage) -
36 			offsetof(struct compat_rusage, ru_maxrss));
37 	}
38 	return r;
39 }
40