remove LFS64 programming interfaces (macro-only) from _GNU_SOURCE
[musl] / compat / time32 / wait4_time32.c
1 #define _BSD_SOURCE
2 #include "time32.h"
3 #include <string.h>
4 #include <stddef.h>
5 #include <sys/wait.h>
6
7 struct compat_rusage {
8         struct timeval32 ru_utime;
9         struct timeval32 ru_stime;
10         long    ru_maxrss;
11         long    ru_ixrss;
12         long    ru_idrss;
13         long    ru_isrss;
14         long    ru_minflt;
15         long    ru_majflt;
16         long    ru_nswap;
17         long    ru_inblock;
18         long    ru_oublock;
19         long    ru_msgsnd;
20         long    ru_msgrcv;
21         long    ru_nsignals;
22         long    ru_nvcsw;
23         long    ru_nivcsw;
24 };
25
26 pid_t __wait4_time32(pid_t pid, int *status, int options, struct compat_rusage *usage)
27 {
28         struct rusage ru;
29         int r = wait4(pid, status, options, usage ? &ru : 0);
30         if (!r && usage) {
31                 usage->ru_utime.tv_sec = ru.ru_utime.tv_sec;
32                 usage->ru_utime.tv_usec = ru.ru_utime.tv_usec;
33                 usage->ru_stime.tv_sec = ru.ru_stime.tv_sec;
34                 usage->ru_stime.tv_usec = ru.ru_stime.tv_usec;
35                 memcpy(&usage->ru_maxrss, &ru.ru_maxrss,
36                         sizeof(struct compat_rusage) -
37                         offsetof(struct compat_rusage, ru_maxrss));
38         }
39         return r;
40 }