| 1 | #ifndef _SYS_RESOURCE_H |
| 2 | #include <resource/sys/resource.h> |
| 3 | |
| 4 | #ifndef _ISOMAC |
| 5 | # include <time.h> |
| 6 | # include <string.h> |
| 7 | |
| 8 | /* Internal version of rusage with a 64-bit time_t. */ |
| 9 | #if __TIMESIZE == 64 |
| 10 | # define __rusage64 rusage |
| 11 | #else |
| 12 | struct __rusage64 |
| 13 | { |
| 14 | struct __timeval64 ru_utime; |
| 15 | struct __timeval64 ru_stime; |
| 16 | __extension__ union |
| 17 | { |
| 18 | long int ru_maxrss; |
| 19 | __syscall_slong_t __ru_maxrss_word; |
| 20 | }; |
| 21 | __extension__ union |
| 22 | { |
| 23 | long int ru_ixrss; |
| 24 | __syscall_slong_t __ru_ixrss_word; |
| 25 | }; |
| 26 | __extension__ union |
| 27 | { |
| 28 | long int ru_idrss; |
| 29 | __syscall_slong_t __ru_idrss_word; |
| 30 | }; |
| 31 | __extension__ union |
| 32 | { |
| 33 | long int ru_isrss; |
| 34 | __syscall_slong_t __ru_isrss_word; |
| 35 | }; |
| 36 | __extension__ union |
| 37 | { |
| 38 | long int ru_minflt; |
| 39 | __syscall_slong_t __ru_minflt_word; |
| 40 | }; |
| 41 | __extension__ union |
| 42 | { |
| 43 | long int ru_majflt; |
| 44 | __syscall_slong_t __ru_majflt_word; |
| 45 | }; |
| 46 | __extension__ union |
| 47 | { |
| 48 | long int ru_nswap; |
| 49 | __syscall_slong_t __ru_nswap_word; |
| 50 | }; |
| 51 | __extension__ union |
| 52 | { |
| 53 | long int ru_inblock; |
| 54 | __syscall_slong_t __ru_inblock_word; |
| 55 | }; |
| 56 | __extension__ union |
| 57 | { |
| 58 | long int ru_oublock; |
| 59 | __syscall_slong_t __ru_oublock_word; |
| 60 | }; |
| 61 | __extension__ union |
| 62 | { |
| 63 | long int ru_msgsnd; |
| 64 | __syscall_slong_t __ru_msgsnd_word; |
| 65 | }; |
| 66 | __extension__ union |
| 67 | { |
| 68 | long int ru_msgrcv; |
| 69 | __syscall_slong_t __ru_msgrcv_word; |
| 70 | }; |
| 71 | __extension__ union |
| 72 | { |
| 73 | long int ru_nsignals; |
| 74 | __syscall_slong_t __ru_nsignals_word; |
| 75 | }; |
| 76 | __extension__ union |
| 77 | { |
| 78 | long int ru_nvcsw; |
| 79 | __syscall_slong_t __ru_nvcsw_word; |
| 80 | }; |
| 81 | __extension__ union |
| 82 | { |
| 83 | long int ru_nivcsw; |
| 84 | __syscall_slong_t __ru_nivcsw_word; |
| 85 | }; |
| 86 | }; |
| 87 | #endif |
| 88 | |
| 89 | static inline void |
| 90 | rusage64_to_rusage (const struct __rusage64 *restrict r64, |
| 91 | struct rusage *restrict r) |
| 92 | { |
| 93 | /* Make sure the entire output structure is cleared, including |
| 94 | padding and reserved fields. */ |
| 95 | memset (r, 0, sizeof *r); |
| 96 | |
| 97 | r->ru_utime = valid_timeval64_to_timeval (r64->ru_utime); |
| 98 | r->ru_stime = valid_timeval64_to_timeval (r64->ru_stime); |
| 99 | r->ru_maxrss = r64->ru_maxrss; |
| 100 | r->ru_ixrss = r64->ru_ixrss; |
| 101 | r->ru_idrss = r64->ru_idrss; |
| 102 | r->ru_isrss = r64->ru_isrss; |
| 103 | r->ru_minflt = r64->ru_minflt; |
| 104 | r->ru_majflt = r64->ru_majflt; |
| 105 | r->ru_nswap = r64->ru_nswap; |
| 106 | r->ru_inblock = r64->ru_inblock; |
| 107 | r->ru_oublock = r64->ru_oublock; |
| 108 | r->ru_msgsnd = r64->ru_msgsnd; |
| 109 | r->ru_msgrcv = r64->ru_msgrcv; |
| 110 | r->ru_nsignals = r64->ru_nsignals; |
| 111 | r->ru_nvcsw = r64->ru_nvcsw; |
| 112 | r->ru_nivcsw = r64->ru_nivcsw; |
| 113 | } |
| 114 | |
| 115 | /* Prototypes repeated instead of using __typeof because |
| 116 | sys/resource.h is included in C++ tests, and declaring functions |
| 117 | with __typeof and __THROW doesn't work for C++. */ |
| 118 | extern int __getpriority (__priority_which_t __which, id_t __who) __THROW; |
| 119 | libc_hidden_proto (__getpriority) |
| 120 | extern int __setpriority (__priority_which_t __which, id_t __who, int __prio) |
| 121 | __THROW; |
| 122 | libc_hidden_proto (__setpriority) |
| 123 | libc_hidden_proto (getrlimit64) |
| 124 | extern __typeof (getrlimit64) __getrlimit64; |
| 125 | libc_hidden_proto (__getrlimit64); |
| 126 | |
| 127 | /* Now define the internal interfaces. */ |
| 128 | extern int __getrlimit (enum __rlimit_resource __resource, |
| 129 | struct rlimit *__rlimits); |
| 130 | libc_hidden_proto (__getrlimit) |
| 131 | extern int __getrusage (enum __rusage_who __who, struct rusage *__usage) |
| 132 | attribute_hidden; |
| 133 | |
| 134 | extern int __setrlimit (enum __rlimit_resource __resource, |
| 135 | const struct rlimit *__rlimits); |
| 136 | libc_hidden_proto (__setrlimit); |
| 137 | |
| 138 | #if __TIMESIZE == 64 |
| 139 | # define __getrusage64 __getrusage |
| 140 | # define __wait4_time64 __wait4 |
| 141 | #else |
| 142 | extern int __getrusage64 (enum __rusage_who who, struct __rusage64 *usage); |
| 143 | libc_hidden_proto (__getrusage64) |
| 144 | extern pid_t __wait4_time64 (pid_t pid, int *stat_loc, int options, |
| 145 | struct __rusage64 *usage); |
| 146 | libc_hidden_proto (__wait4_time64) |
| 147 | #endif |
| 148 | #endif |
| 149 | #endif |
| 150 | |