about summary refs log tree commit diff
path: root/include/sys/resource.h
blob: 21d3908714b7f39f21799106f664cf9057913856 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#ifndef _SYS_RESOURCE_H
#include <resource/sys/resource.h>

#ifndef _ISOMAC
# include <time.h>
# include <string.h>

/* Internal version of rusage with a 64-bit time_t. */
#if __TIMESIZE == 64
# define __rusage64 rusage
#else
struct __rusage64
  {
    struct __timeval64 ru_utime;
    struct __timeval64 ru_stime;
    __extension__ union
      {
	long int ru_maxrss;
	__syscall_slong_t __ru_maxrss_word;
      };
    __extension__ union
      {
	long int ru_ixrss;
	__syscall_slong_t __ru_ixrss_word;
      };
    __extension__ union
      {
	long int ru_idrss;
	__syscall_slong_t __ru_idrss_word;
      };
    __extension__ union
      {
	long int ru_isrss;
	 __syscall_slong_t __ru_isrss_word;
      };
    __extension__ union
      {
	long int ru_minflt;
	__syscall_slong_t __ru_minflt_word;
      };
    __extension__ union
      {
	long int ru_majflt;
	__syscall_slong_t __ru_majflt_word;
      };
    __extension__ union
      {
	long int ru_nswap;
	__syscall_slong_t __ru_nswap_word;
      };
    __extension__ union
      {
	long int ru_inblock;
	__syscall_slong_t __ru_inblock_word;
      };
    __extension__ union
      {
	long int ru_oublock;
	__syscall_slong_t __ru_oublock_word;
      };
    __extension__ union
      {
	long int ru_msgsnd;
	__syscall_slong_t __ru_msgsnd_word;
      };
    __extension__ union
      {
	long int ru_msgrcv;
	__syscall_slong_t __ru_msgrcv_word;
      };
    __extension__ union
      {
	long int ru_nsignals;
	__syscall_slong_t __ru_nsignals_word;
      };
    __extension__ union
      {
	long int ru_nvcsw;
	__syscall_slong_t __ru_nvcsw_word;
      };
    __extension__ union
      {
	long int ru_nivcsw;
	__syscall_slong_t __ru_nivcsw_word;
      };
  };
#endif

static inline void
rusage64_to_rusage (const struct __rusage64 *restrict r64,
                    struct rusage *restrict r)
{
  /* Make sure the entire output structure is cleared, including
     padding and reserved fields.  */
  memset (r, 0, sizeof *r);

  r->ru_utime    = valid_timeval64_to_timeval (r64->ru_utime);
  r->ru_stime    = valid_timeval64_to_timeval (r64->ru_stime);
  r->ru_maxrss   = r64->ru_maxrss;
  r->ru_ixrss    = r64->ru_ixrss;
  r->ru_idrss    = r64->ru_idrss;
  r->ru_isrss    = r64->ru_isrss;
  r->ru_minflt   = r64->ru_minflt;
  r->ru_majflt   = r64->ru_majflt;
  r->ru_nswap    = r64->ru_nswap;
  r->ru_inblock  = r64->ru_inblock;
  r->ru_oublock  = r64->ru_oublock;
  r->ru_msgsnd   = r64->ru_msgsnd;
  r->ru_msgrcv   = r64->ru_msgrcv;
  r->ru_nsignals = r64->ru_nsignals;
  r->ru_nvcsw    = r64->ru_nvcsw;
  r->ru_nivcsw   = r64->ru_nivcsw;
}

/* Prototypes repeated instead of using __typeof because
   sys/resource.h is included in C++ tests, and declaring functions
   with __typeof and __THROW doesn't work for C++.  */
extern int __getpriority (__priority_which_t __which, id_t __who) __THROW;
libc_hidden_proto (__getpriority)
extern int __setpriority (__priority_which_t __which, id_t __who, int __prio)
     __THROW;
libc_hidden_proto (__setpriority)
libc_hidden_proto (getrlimit64)
extern __typeof (getrlimit64) __getrlimit64;
libc_hidden_proto (__getrlimit64);

/* Now define the internal interfaces.  */
extern int __getrlimit (enum __rlimit_resource __resource,
			struct rlimit *__rlimits) __nonnull ((2));
libc_hidden_proto (__getrlimit)
extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
	attribute_hidden;

extern int __setrlimit (enum __rlimit_resource __resource,
			const struct rlimit *__rlimits) __nonnull ((2));
libc_hidden_proto (__setrlimit);

#if __TIMESIZE == 64
# define __getrusage64 __getrusage
# define __wait4_time64 __wait4
# define __wait3_time64 __wait3
#else
extern int __getrusage64 (enum __rusage_who who, struct __rusage64 *usage);
libc_hidden_proto (__getrusage64)
extern pid_t __wait4_time64 (pid_t pid, int *stat_loc, int options,
                             struct __rusage64 *usage);
libc_hidden_proto (__wait4_time64)
extern pid_t __wait3_time64 (int *stat_loc, int options,
                             struct __rusage64 *usage);
libc_hidden_proto (__wait3_time64)
#endif
#endif
#endif