1 #ifndef _WASI_EMULATED_PROCESS_CLOCKS 2 #error WASI lacks process-associated clocks; to enable emulation of the `getrusage` function using \ 3 the wall clock, which isn't sensitive to whether the program is running or suspended, \ 4 compile with -D_WASI_EMULATED_PROCESS_CLOCKS and link with -lwasi-emulated-process-clocks 5 #else 6 #ifndef _SYS_RESOURCE_H 7 #define _SYS_RESOURCE_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 #include <features.h> 14 #include <sys/time.h> 15 16 #define __NEED_id_t 17 18 #ifdef _GNU_SOURCE 19 #define __NEED_pid_t 20 #endif 21 22 #include <bits/alltypes.h> 23 #include <bits/resource.h> 24 25 #ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */ 26 typedef unsigned long long rlim_t; 27 28 struct rlimit { 29 rlim_t rlim_cur; 30 rlim_t rlim_max; 31 }; 32 33 struct rusage { 34 struct timeval ru_utime; 35 struct timeval ru_stime; 36 /* linux extentions, but useful */ 37 long ru_maxrss; 38 long ru_ixrss; 39 long ru_idrss; 40 long ru_isrss; 41 long ru_minflt; 42 long ru_majflt; 43 long ru_nswap; 44 long ru_inblock; 45 long ru_oublock; 46 long ru_msgsnd; 47 long ru_msgrcv; 48 long ru_nsignals; 49 long ru_nvcsw; 50 long ru_nivcsw; 51 /* room for more... */ 52 long __reserved[16]; 53 }; 54 55 int getrlimit (int, struct rlimit *); 56 int setrlimit (int, const struct rlimit *); 57 int getrusage (int, struct rusage *); 58 59 int getpriority (int, id_t); 60 int setpriority (int, id_t, int); 61 62 #ifdef _GNU_SOURCE 63 int prlimit(pid_t, int, const struct rlimit *, struct rlimit *); 64 #define prlimit64 prlimit 65 #endif 66 67 #define PRIO_MIN (-20) 68 #define PRIO_MAX 20 69 70 #define PRIO_PROCESS 0 71 #define PRIO_PGRP 1 72 #define PRIO_USER 2 73 74 #define RUSAGE_SELF 0 75 #define RUSAGE_CHILDREN (-1) 76 #define RUSAGE_THREAD 1 77 78 #define RLIM_INFINITY (~0ULL) 79 #define RLIM_SAVED_CUR RLIM_INFINITY 80 #define RLIM_SAVED_MAX RLIM_INFINITY 81 82 #define RLIMIT_CPU 0 83 #define RLIMIT_FSIZE 1 84 #define RLIMIT_DATA 2 85 #define RLIMIT_STACK 3 86 #define RLIMIT_CORE 4 87 #ifndef RLIMIT_RSS 88 #define RLIMIT_RSS 5 89 #define RLIMIT_NPROC 6 90 #define RLIMIT_NOFILE 7 91 #define RLIMIT_MEMLOCK 8 92 #define RLIMIT_AS 9 93 #endif 94 #define RLIMIT_LOCKS 10 95 #define RLIMIT_SIGPENDING 11 96 #define RLIMIT_MSGQUEUE 12 97 #define RLIMIT_NICE 13 98 #define RLIMIT_RTPRIO 14 99 #define RLIMIT_RTTIME 15 100 #define RLIMIT_NLIMITS 16 101 102 #define RLIM_NLIMITS RLIMIT_NLIMITS 103 104 #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) 105 #define RLIM64_INFINITY RLIM_INFINITY 106 #define RLIM64_SAVED_CUR RLIM_SAVED_CUR 107 #define RLIM64_SAVED_MAX RLIM_SAVED_MAX 108 #define getrlimit64 getrlimit 109 #define setrlimit64 setrlimit 110 #define rlimit64 rlimit 111 #define rlim64_t rlim_t 112 #endif 113 #else 114 #include <__header_sys_resource.h> 115 #endif 116 117 #if _REDIR_TIME64 118 __REDIR(getrusage, __getrusage_time64); 119 #endif 120 121 #ifdef __cplusplus 122 } 123 #endif 124 125 #endif 126 #endif 127