| 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 |  | 
|---|