blob: c04175f0cbfad9e733b32a487e671c52997d1f90 [file] [log] [blame]
Alex Crichton50a42e22015-09-15 14:27:15 -07001//! Linux-specific definitions for linux-like values
2
Peter Jin1a190c72016-02-05 15:06:39 -08003use dox::mem;
4
Alex Crichton918f8e12015-09-15 16:39:51 -07005pub type useconds_t = u32;
Alex Crichton52605872015-09-15 16:49:37 -07006pub type dev_t = u64;
7pub type socklen_t = u32;
8pub type pthread_t = c_ulong;
Alex Crichtonc4a8d602015-09-18 15:00:49 -07009pub type mode_t = u32;
Alex Crichton74825222015-10-29 17:36:55 -070010pub type ino64_t = u64;
11pub type off64_t = i64;
12pub type blkcnt64_t = i64;
13pub type rlim64_t = u64;
Alexander Polakov58501562015-12-14 02:09:45 +030014pub type key_t = ::c_int;
15pub type shmatt_t = ::c_ulong;
Alex Crichton881ef9b2015-12-01 09:04:13 -080016pub type mqd_t = ::c_int;
David Henningsson9d2493e2015-12-25 22:06:44 +010017pub type nfds_t = ::c_ulong;
A.J. Gardner24c84f12016-03-31 20:08:03 -050018pub type nl_item = ::c_int;
Alex Crichton74825222015-10-29 17:36:55 -070019
20pub enum fpos64_t {} // TODO: fill this out with a struct
Alex Crichton918f8e12015-09-15 16:39:51 -070021
Alex Crichton50a42e22015-09-15 14:27:15 -070022s! {
Alex Crichtond6e07e22015-10-29 22:59:44 -070023 pub struct dirent {
24 pub d_ino: ::ino_t,
25 pub d_off: ::off_t,
26 pub d_reclen: ::c_ushort,
27 pub d_type: ::c_uchar,
28 pub d_name: [::c_char; 256],
29 }
30
Alex Crichton74825222015-10-29 17:36:55 -070031 pub struct dirent64 {
32 pub d_ino: ::ino64_t,
33 pub d_off: ::off64_t,
34 pub d_reclen: ::c_ushort,
35 pub d_type: ::c_uchar,
36 pub d_name: [::c_char; 256],
37 }
38
39 pub struct rlimit64 {
40 pub rlim_cur: rlim64_t,
41 pub rlim_max: rlim64_t,
42 }
43
Alex Crichton50a42e22015-09-15 14:27:15 -070044 pub struct glob_t {
Alex Crichton17910462015-09-22 19:11:04 -070045 pub gl_pathc: ::size_t,
Alex Crichton50a42e22015-09-15 14:27:15 -070046 pub gl_pathv: *mut *mut c_char,
Alex Crichton17910462015-09-22 19:11:04 -070047 pub gl_offs: ::size_t,
Alex Crichton52605872015-09-15 16:49:37 -070048 pub gl_flags: ::c_int,
Alex Crichton50a42e22015-09-15 14:27:15 -070049
50 __unused1: *mut ::c_void,
51 __unused2: *mut ::c_void,
52 __unused3: *mut ::c_void,
53 __unused4: *mut ::c_void,
54 __unused5: *mut ::c_void,
55 }
56
57 pub struct ifaddrs {
58 pub ifa_next: *mut ifaddrs,
59 pub ifa_name: *mut c_char,
Alex Crichton52605872015-09-15 16:49:37 -070060 pub ifa_flags: ::c_uint,
Alex Crichton50a42e22015-09-15 14:27:15 -070061 pub ifa_addr: *mut ::sockaddr,
62 pub ifa_netmask: *mut ::sockaddr,
63 pub ifa_ifu: *mut ::sockaddr, // FIXME This should be a union
64 pub ifa_data: *mut ::c_void
65 }
Alex Crichtoncd9b33e2015-09-17 14:47:40 -070066
67 pub struct pthread_mutex_t {
68 #[cfg(any(target_arch = "mips", target_arch = "mipsel",
69 target_arch = "arm"))]
70 __align: [::c_long; 0],
71 #[cfg(not(any(target_arch = "mips", target_arch = "mipsel",
72 target_arch = "arm")))]
73 __align: [::c_longlong; 0],
74 size: [u8; __SIZEOF_PTHREAD_MUTEX_T],
75 }
76
77 pub struct pthread_rwlock_t {
78 #[cfg(any(target_arch = "mips", target_arch = "mipsel",
79 target_arch = "arm"))]
80 __align: [::c_long; 0],
81 #[cfg(not(any(target_arch = "mips", target_arch = "mipsel",
82 target_arch = "arm")))]
83 __align: [::c_longlong; 0],
84 size: [u8; __SIZEOF_PTHREAD_RWLOCK_T],
85 }
86
87 pub struct pthread_mutexattr_t {
Anton Blanchard6e6ff6a2016-02-09 23:02:51 +000088 #[cfg(any(target_arch = "x86_64", target_arch = "powerpc64"))]
Alex Crichtonb347b442015-09-17 15:48:30 -070089 __align: [::c_int; 0],
Anton Blanchard6e6ff6a2016-02-09 23:02:51 +000090 #[cfg(not(any(target_arch = "x86_64", target_arch = "powerpc64")))]
Alex Crichton684cfa42015-09-17 15:18:18 -070091 __align: [::c_long; 0],
Alex Crichtoncd9b33e2015-09-17 14:47:40 -070092 size: [u8; __SIZEOF_PTHREAD_MUTEXATTR_T],
93 }
94
95 pub struct pthread_cond_t {
Timon Van Overveldtad728592015-12-26 06:13:31 -080096 #[cfg(any(target_env = "musl",
97 target_env = "musleabi",
98 target_env = "musleabihf"))]
Jorge Aparicio751bea32016-01-30 01:28:50 -050099 __align: [*const ::c_void; 0],
Timon Van Overveldtad728592015-12-26 06:13:31 -0800100 #[cfg(not(any(target_env = "musl",
101 target_env = "musleabi",
102 target_env = "musleabihf")))]
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700103 __align: [::c_longlong; 0],
104 size: [u8; __SIZEOF_PTHREAD_COND_T],
105 }
106
Tomasz MiÄ…skocb644852016-07-20 07:31:48 +0200107 pub struct pthread_condattr_t {
108 __align: [::c_int; 0],
109 size: [u8; __SIZEOF_PTHREAD_CONDATTR_T],
110 }
111
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700112 pub struct passwd {
113 pub pw_name: *mut ::c_char,
114 pub pw_passwd: *mut ::c_char,
115 pub pw_uid: ::uid_t,
116 pub pw_gid: ::gid_t,
117 pub pw_gecos: *mut ::c_char,
118 pub pw_dir: *mut ::c_char,
119 pub pw_shell: *mut ::c_char,
120 }
Dan Burkert85a76f82015-11-04 20:26:27 -0800121
122 pub struct statvfs {
123 pub f_bsize: ::c_ulong,
124 pub f_frsize: ::c_ulong,
125 pub f_blocks: ::fsblkcnt_t,
126 pub f_bfree: ::fsblkcnt_t,
127 pub f_bavail: ::fsblkcnt_t,
128 pub f_files: ::fsfilcnt_t,
129 pub f_ffree: ::fsfilcnt_t,
130 pub f_favail: ::fsfilcnt_t,
131 pub f_fsid: ::c_ulong,
132 #[cfg(target_pointer_width = "32")]
133 pub __f_unused: ::c_int,
134 pub f_flag: ::c_ulong,
135 pub f_namemax: ::c_ulong,
136 __f_spare: [::c_int; 6],
137 }
Alexander Polakov440bd532015-11-07 15:42:38 +0300138
Alex Crichton8dce9ad2015-12-03 11:44:14 -0800139 pub struct dqblk {
140 pub dqb_bhardlimit: ::uint64_t,
141 pub dqb_bsoftlimit: ::uint64_t,
142 pub dqb_curspace: ::uint64_t,
143 pub dqb_ihardlimit: ::uint64_t,
144 pub dqb_isoftlimit: ::uint64_t,
145 pub dqb_curinodes: ::uint64_t,
146 pub dqb_btime: ::uint64_t,
147 pub dqb_itime: ::uint64_t,
148 pub dqb_valid: ::uint32_t,
149 }
150
151 pub struct signalfd_siginfo {
152 pub ssi_signo: ::uint32_t,
153 pub ssi_errno: ::int32_t,
154 pub ssi_code: ::int32_t,
155 pub ssi_pid: ::uint32_t,
156 pub ssi_uid: ::uint32_t,
157 pub ssi_fd: ::int32_t,
158 pub ssi_tid: ::uint32_t,
159 pub ssi_band: ::uint32_t,
160 pub ssi_overrun: ::uint32_t,
161 pub ssi_trapno: ::uint32_t,
162 pub ssi_status: ::int32_t,
163 pub ssi_int: ::int32_t,
164 pub ssi_ptr: ::uint64_t,
165 pub ssi_utime: ::uint64_t,
166 pub ssi_stime: ::uint64_t,
167 pub ssi_addr: ::uint64_t,
168 _pad: [::uint8_t; 48],
169 }
170
171 pub struct fsid_t {
172 __val: [::c_int; 2],
173 }
174
175 pub struct mq_attr {
176 pub mq_flags: ::c_long,
177 pub mq_maxmsg: ::c_long,
178 pub mq_msgsize: ::c_long,
179 pub mq_curmsgs: ::c_long,
180 pad: [::c_long; 4]
181 }
182
183 pub struct cpu_set_t {
184 #[cfg(target_pointer_width = "32")]
185 bits: [u32; 32],
186 #[cfg(target_pointer_width = "64")]
187 bits: [u64; 16],
188 }
Charles J. Schneider332bd862016-07-12 09:32:42 +0200189
190 pub struct if_nameindex {
191 pub if_index: ::c_uint,
192 pub if_name: *mut ::c_char,
193 }
194
Alex Crichton50a42e22015-09-15 14:27:15 -0700195}
196
A.J. Gardner24c84f12016-03-31 20:08:03 -0500197pub const ABDAY_1: ::nl_item = 0x20000;
198pub const ABDAY_2: ::nl_item = 0x20001;
199pub const ABDAY_3: ::nl_item = 0x20002;
200pub const ABDAY_4: ::nl_item = 0x20003;
201pub const ABDAY_5: ::nl_item = 0x20004;
202pub const ABDAY_6: ::nl_item = 0x20005;
203pub const ABDAY_7: ::nl_item = 0x20006;
204
205pub const DAY_1: ::nl_item = 0x20007;
206pub const DAY_2: ::nl_item = 0x20008;
207pub const DAY_3: ::nl_item = 0x20009;
208pub const DAY_4: ::nl_item = 0x2000A;
209pub const DAY_5: ::nl_item = 0x2000B;
210pub const DAY_6: ::nl_item = 0x2000C;
211pub const DAY_7: ::nl_item = 0x2000D;
212
213pub const ABMON_1: ::nl_item = 0x2000E;
214pub const ABMON_2: ::nl_item = 0x2000F;
215pub const ABMON_3: ::nl_item = 0x20010;
216pub const ABMON_4: ::nl_item = 0x20011;
217pub const ABMON_5: ::nl_item = 0x20012;
218pub const ABMON_6: ::nl_item = 0x20013;
219pub const ABMON_7: ::nl_item = 0x20014;
220pub const ABMON_8: ::nl_item = 0x20015;
221pub const ABMON_9: ::nl_item = 0x20016;
222pub const ABMON_10: ::nl_item = 0x20017;
223pub const ABMON_11: ::nl_item = 0x20018;
224pub const ABMON_12: ::nl_item = 0x20019;
225
226pub const MON_1: ::nl_item = 0x2001A;
227pub const MON_2: ::nl_item = 0x2001B;
228pub const MON_3: ::nl_item = 0x2001C;
229pub const MON_4: ::nl_item = 0x2001D;
230pub const MON_5: ::nl_item = 0x2001E;
231pub const MON_6: ::nl_item = 0x2001F;
232pub const MON_7: ::nl_item = 0x20020;
233pub const MON_8: ::nl_item = 0x20021;
234pub const MON_9: ::nl_item = 0x20022;
235pub const MON_10: ::nl_item = 0x20023;
236pub const MON_11: ::nl_item = 0x20024;
237pub const MON_12: ::nl_item = 0x20025;
238
239pub const AM_STR: ::nl_item = 0x20026;
240pub const PM_STR: ::nl_item = 0x20027;
241
242pub const D_T_FMT: ::nl_item = 0x20028;
243pub const D_FMT: ::nl_item = 0x20029;
244pub const T_FMT: ::nl_item = 0x2002A;
245pub const T_FMT_AMPM: ::nl_item = 0x2002B;
246
247pub const ERA: ::nl_item = 0x2002C;
248pub const ERA_D_FMT: ::nl_item = 0x2002E;
249pub const ALT_DIGITS: ::nl_item = 0x2002F;
250pub const ERA_D_T_FMT: ::nl_item = 0x20030;
251pub const ERA_T_FMT: ::nl_item = 0x20031;
252
253pub const CODESET: ::nl_item = 14;
254
255pub const CRNCYSTR: ::nl_item = 0x4000F;
256
257pub const RADIXCHAR: ::nl_item = 0x10000;
258pub const THOUSEP: ::nl_item = 0x10001;
259
260pub const YESEXPR: ::nl_item = 0x50000;
261pub const NOEXPR: ::nl_item = 0x50001;
262pub const YESSTR: ::nl_item = 0x50002;
263pub const NOSTR: ::nl_item = 0x50003;
264
Alex Crichton52605872015-09-15 16:49:37 -0700265pub const FILENAME_MAX: ::c_uint = 4096;
Alex Crichton52605872015-09-15 16:49:37 -0700266pub const L_tmpnam: ::c_uint = 20;
Philipp Keller2cad6ca2016-07-06 21:15:38 +0200267pub const _PC_LINK_MAX: ::c_int = 0;
268pub const _PC_MAX_CANON: ::c_int = 1;
269pub const _PC_MAX_INPUT: ::c_int = 2;
Alex Crichton52605872015-09-15 16:49:37 -0700270pub const _PC_NAME_MAX: ::c_int = 3;
Philipp Keller2cad6ca2016-07-06 21:15:38 +0200271pub const _PC_PATH_MAX: ::c_int = 4;
272pub const _PC_PIPE_BUF: ::c_int = 5;
273pub const _PC_CHOWN_RESTRICTED: ::c_int = 6;
274pub const _PC_NO_TRUNC: ::c_int = 7;
275pub const _PC_VDISABLE: ::c_int = 8;
Alex Crichton50a42e22015-09-15 14:27:15 -0700276
Alex Crichton52605872015-09-15 16:49:37 -0700277pub const _SC_ARG_MAX: ::c_int = 0;
278pub const _SC_CHILD_MAX: ::c_int = 1;
279pub const _SC_CLK_TCK: ::c_int = 2;
280pub const _SC_NGROUPS_MAX: ::c_int = 3;
281pub const _SC_OPEN_MAX: ::c_int = 4;
282pub const _SC_STREAM_MAX: ::c_int = 5;
283pub const _SC_TZNAME_MAX: ::c_int = 6;
284pub const _SC_JOB_CONTROL: ::c_int = 7;
285pub const _SC_SAVED_IDS: ::c_int = 8;
286pub const _SC_REALTIME_SIGNALS: ::c_int = 9;
287pub const _SC_PRIORITY_SCHEDULING: ::c_int = 10;
288pub const _SC_TIMERS: ::c_int = 11;
289pub const _SC_ASYNCHRONOUS_IO: ::c_int = 12;
290pub const _SC_PRIORITIZED_IO: ::c_int = 13;
291pub const _SC_SYNCHRONIZED_IO: ::c_int = 14;
292pub const _SC_FSYNC: ::c_int = 15;
293pub const _SC_MAPPED_FILES: ::c_int = 16;
294pub const _SC_MEMLOCK: ::c_int = 17;
295pub const _SC_MEMLOCK_RANGE: ::c_int = 18;
296pub const _SC_MEMORY_PROTECTION: ::c_int = 19;
297pub const _SC_MESSAGE_PASSING: ::c_int = 20;
298pub const _SC_SEMAPHORES: ::c_int = 21;
299pub const _SC_SHARED_MEMORY_OBJECTS: ::c_int = 22;
300pub const _SC_AIO_LISTIO_MAX: ::c_int = 23;
301pub const _SC_AIO_MAX: ::c_int = 24;
302pub const _SC_AIO_PRIO_DELTA_MAX: ::c_int = 25;
303pub const _SC_DELAYTIMER_MAX: ::c_int = 26;
304pub const _SC_MQ_OPEN_MAX: ::c_int = 27;
305pub const _SC_MQ_PRIO_MAX: ::c_int = 28;
306pub const _SC_VERSION: ::c_int = 29;
307pub const _SC_PAGESIZE: ::c_int = 30;
Brian Campbell11f29f52016-01-31 21:28:16 -0500308pub const _SC_PAGE_SIZE: ::c_int = _SC_PAGESIZE;
Alex Crichton52605872015-09-15 16:49:37 -0700309pub const _SC_RTSIG_MAX: ::c_int = 31;
310pub const _SC_SEM_NSEMS_MAX: ::c_int = 32;
311pub const _SC_SEM_VALUE_MAX: ::c_int = 33;
312pub const _SC_SIGQUEUE_MAX: ::c_int = 34;
313pub const _SC_TIMER_MAX: ::c_int = 35;
314pub const _SC_BC_BASE_MAX: ::c_int = 36;
315pub const _SC_BC_DIM_MAX: ::c_int = 37;
316pub const _SC_BC_SCALE_MAX: ::c_int = 38;
317pub const _SC_BC_STRING_MAX: ::c_int = 39;
318pub const _SC_COLL_WEIGHTS_MAX: ::c_int = 40;
319pub const _SC_EXPR_NEST_MAX: ::c_int = 42;
320pub const _SC_LINE_MAX: ::c_int = 43;
321pub const _SC_RE_DUP_MAX: ::c_int = 44;
322pub const _SC_2_VERSION: ::c_int = 46;
323pub const _SC_2_C_BIND: ::c_int = 47;
324pub const _SC_2_C_DEV: ::c_int = 48;
325pub const _SC_2_FORT_DEV: ::c_int = 49;
326pub const _SC_2_FORT_RUN: ::c_int = 50;
327pub const _SC_2_SW_DEV: ::c_int = 51;
328pub const _SC_2_LOCALEDEF: ::c_int = 52;
329pub const _SC_IOV_MAX: ::c_int = 60;
330pub const _SC_THREADS: ::c_int = 67;
331pub const _SC_THREAD_SAFE_FUNCTIONS: ::c_int = 68;
332pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 69;
333pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 70;
334pub const _SC_LOGIN_NAME_MAX: ::c_int = 71;
335pub const _SC_TTY_NAME_MAX: ::c_int = 72;
336pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: ::c_int = 73;
337pub const _SC_THREAD_KEYS_MAX: ::c_int = 74;
338pub const _SC_THREAD_STACK_MIN: ::c_int = 75;
339pub const _SC_THREAD_THREADS_MAX: ::c_int = 76;
340pub const _SC_THREAD_ATTR_STACKADDR: ::c_int = 77;
341pub const _SC_THREAD_ATTR_STACKSIZE: ::c_int = 78;
342pub const _SC_THREAD_PRIORITY_SCHEDULING: ::c_int = 79;
343pub const _SC_THREAD_PRIO_INHERIT: ::c_int = 80;
344pub const _SC_THREAD_PRIO_PROTECT: ::c_int = 81;
345pub const _SC_NPROCESSORS_ONLN: ::c_int = 84;
346pub const _SC_ATEXIT_MAX: ::c_int = 87;
347pub const _SC_XOPEN_VERSION: ::c_int = 89;
348pub const _SC_XOPEN_XCU_VERSION: ::c_int = 90;
349pub const _SC_XOPEN_UNIX: ::c_int = 91;
350pub const _SC_XOPEN_CRYPT: ::c_int = 92;
351pub const _SC_XOPEN_ENH_I18N: ::c_int = 93;
352pub const _SC_XOPEN_SHM: ::c_int = 94;
353pub const _SC_2_CHAR_TERM: ::c_int = 95;
Alex Crichton52605872015-09-15 16:49:37 -0700354pub const _SC_2_UPE: ::c_int = 97;
355pub const _SC_XBS5_ILP32_OFF32: ::c_int = 125;
356pub const _SC_XBS5_ILP32_OFFBIG: ::c_int = 126;
357pub const _SC_XBS5_LPBIG_OFFBIG: ::c_int = 128;
358pub const _SC_XOPEN_LEGACY: ::c_int = 129;
359pub const _SC_XOPEN_REALTIME: ::c_int = 130;
360pub const _SC_XOPEN_REALTIME_THREADS: ::c_int = 131;
Raphael Cohnf3651112016-05-04 10:35:08 +0100361pub const _SC_HOST_NAME_MAX: ::c_int = 180;
Alex Crichton50a42e22015-09-15 14:27:15 -0700362
363pub const RLIM_SAVED_MAX: ::rlim_t = RLIM_INFINITY;
364pub const RLIM_SAVED_CUR: ::rlim_t = RLIM_INFINITY;
365
Alex Crichton52605872015-09-15 16:49:37 -0700366pub const GLOB_ERR: ::c_int = 1 << 0;
367pub const GLOB_MARK: ::c_int = 1 << 1;
368pub const GLOB_NOSORT: ::c_int = 1 << 2;
369pub const GLOB_DOOFFS: ::c_int = 1 << 3;
370pub const GLOB_NOCHECK: ::c_int = 1 << 4;
371pub const GLOB_APPEND: ::c_int = 1 << 5;
372pub const GLOB_NOESCAPE: ::c_int = 1 << 6;
Alex Crichton50a42e22015-09-15 14:27:15 -0700373
Alex Crichton52605872015-09-15 16:49:37 -0700374pub const GLOB_NOSPACE: ::c_int = 1;
375pub const GLOB_ABORTED: ::c_int = 2;
376pub const GLOB_NOMATCH: ::c_int = 3;
Alex Crichton50a42e22015-09-15 14:27:15 -0700377
Alex Crichton52605872015-09-15 16:49:37 -0700378pub const POSIX_MADV_NORMAL: ::c_int = 0;
379pub const POSIX_MADV_RANDOM: ::c_int = 1;
380pub const POSIX_MADV_SEQUENTIAL: ::c_int = 2;
381pub const POSIX_MADV_WILLNEED: ::c_int = 3;
Alex Crichton50a42e22015-09-15 14:27:15 -0700382
383pub const S_IEXEC: mode_t = 64;
384pub const S_IWRITE: mode_t = 128;
385pub const S_IREAD: mode_t = 256;
386
Alex Crichton52605872015-09-15 16:49:37 -0700387pub const F_LOCK: ::c_int = 1;
388pub const F_TEST: ::c_int = 3;
389pub const F_TLOCK: ::c_int = 2;
390pub const F_ULOCK: ::c_int = 0;
Alex Crichton50a42e22015-09-15 14:27:15 -0700391
Dan Burkert85a76f82015-11-04 20:26:27 -0800392pub const ST_RDONLY: ::c_ulong = 1;
393pub const ST_NOSUID: ::c_ulong = 2;
394pub const ST_NODEV: ::c_ulong = 4;
395pub const ST_NOEXEC: ::c_ulong = 8;
396pub const ST_SYNCHRONOUS: ::c_ulong = 16;
397pub const ST_MANDLOCK: ::c_ulong = 64;
398pub const ST_WRITE: ::c_ulong = 128;
399pub const ST_APPEND: ::c_ulong = 256;
400pub const ST_IMMUTABLE: ::c_ulong = 512;
401pub const ST_NOATIME: ::c_ulong = 1024;
402pub const ST_NODIRATIME: ::c_ulong = 2048;
403
Dong Zhou188bef62015-11-29 22:24:10 -0500404pub const RTLD_NEXT: *mut ::c_void = -1i64 as *mut ::c_void;
405pub const RTLD_DEFAULT: *mut ::c_void = 0i64 as *mut ::c_void;
Alex Crichton29de5982016-02-04 13:48:13 -0800406pub const RTLD_NODELETE: ::c_int = 0x1000;
407pub const RTLD_NOW: ::c_int = 0x2;
Dong Zhou51ed5742015-11-29 21:42:14 -0500408
Alex Crichton52605872015-09-15 16:49:37 -0700409pub const TCP_MD5SIG: ::c_int = 14;
Alex Crichton50a42e22015-09-15 14:27:15 -0700410
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700411pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
412 __align: [],
413 size: [0; __SIZEOF_PTHREAD_MUTEX_T],
414};
415pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
416 __align: [],
417 size: [0; __SIZEOF_PTHREAD_COND_T],
418};
419pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
420 __align: [],
421 size: [0; __SIZEOF_PTHREAD_RWLOCK_T],
422};
Amanieu d'Antrasb2b9f292016-05-21 06:40:14 +0100423pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0;
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700424pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 1;
Amanieu d'Antrasb2b9f292016-05-21 06:40:14 +0100425pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 2;
426pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL;
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700427pub const __SIZEOF_PTHREAD_COND_T: usize = 48;
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700428
Alexander Polakov26974c72015-11-27 03:02:44 +0300429pub const SCHED_OTHER: ::c_int = 0;
430pub const SCHED_FIFO: ::c_int = 1;
431pub const SCHED_RR: ::c_int = 2;
432pub const SCHED_BATCH: ::c_int = 3;
433pub const SCHED_IDLE: ::c_int = 5;
434
Alexander Polakov58501562015-12-14 02:09:45 +0300435pub const IPC_CREAT: ::c_int = 0o1000;
436pub const IPC_EXCL: ::c_int = 0o2000;
437pub const IPC_NOWAIT: ::c_int = 0o4000;
438
439pub const IPC_RMID: ::c_int = 0;
440pub const IPC_SET: ::c_int = 1;
441pub const IPC_STAT: ::c_int = 2;
442pub const IPC_INFO: ::c_int = 3;
443
444pub const SHM_R: ::c_int = 0o400;
445pub const SHM_W: ::c_int = 0o200;
446
447pub const SHM_RDONLY: ::c_int = 0o10000;
448pub const SHM_RND: ::c_int = 0o20000;
449pub const SHM_REMAP: ::c_int = 0o40000;
450pub const SHM_EXEC: ::c_int = 0o100000;
451
452pub const SHM_LOCK: ::c_int = 11;
453pub const SHM_UNLOCK: ::c_int = 12;
454
455pub const SHM_HUGETLB: ::c_int = 0o4000;
456pub const SHM_NORESERVE: ::c_int = 0o10000;
457
Alex Crichton8dce9ad2015-12-03 11:44:14 -0800458pub const EPOLLRDHUP: ::c_int = 0x2000;
459pub const EPOLLONESHOT: ::c_int = 0x40000000;
460
461pub const QFMT_VFS_OLD: ::c_int = 1;
462pub const QFMT_VFS_V0: ::c_int = 2;
463
464pub const SFD_CLOEXEC: ::c_int = 0x080000;
465
466pub const EFD_SEMAPHORE: ::c_int = 0x1;
467
468pub const NCCS: usize = 32;
469
Alex Crichton8a8bc662016-02-29 23:02:36 -0800470pub const AF_NETLINK: ::c_int = 16;
471
Raphael Cohn1c6c0ca2016-05-05 17:45:29 +0100472pub const LOG_NFACILITIES: ::c_int = 24;
473
Steven Fackler41699f72016-06-03 21:02:56 -0700474pub const SEM_FAILED: *mut ::sem_t = 0 as *mut sem_t;
475
Philipp Matthias Schaefer5a68b6a2016-07-15 23:19:00 +0200476pub const RB_AUTOBOOT: ::c_int = 0x01234567u32 as i32;
477pub const RB_HALT_SYSTEM: ::c_int = 0xcdef0123u32 as i32;
478pub const RB_ENABLE_CAD: ::c_int = 0x89abcdefu32 as i32;
479pub const RB_DISABLE_CAD: ::c_int = 0x00000000u32 as i32;
480pub const RB_POWER_OFF: ::c_int = 0x4321fedcu32 as i32;
481pub const RB_SW_SUSPEND: ::c_int = 0xd000fce2u32 as i32;
482pub const RB_KEXEC: ::c_int = 0x45584543u32 as i32;
Sergey Bugaev5d65c3f2016-07-12 20:55:08 +0300483
Alex Crichton8a8bc662016-02-29 23:02:36 -0800484f! {
485 pub fn CPU_ZERO(cpuset: &mut cpu_set_t) -> () {
486 for slot in cpuset.bits.iter_mut() {
487 *slot = 0;
488 }
489 }
490
491 pub fn CPU_SET(cpu: usize, cpuset: &mut cpu_set_t) -> () {
NODA, Kaiafa77df2016-04-10 19:13:46 +0800492 let size_in_bits = 8 * mem::size_of_val(&cpuset.bits[0]); // 32, 64 etc
493 let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
Alex Crichton8a8bc662016-02-29 23:02:36 -0800494 cpuset.bits[idx] |= 1 << offset;
495 ()
496 }
497
498 pub fn CPU_ISSET(cpu: usize, cpuset: &cpu_set_t) -> bool {
NODA, Kaiafa77df2016-04-10 19:13:46 +0800499 let size_in_bits = 8 * mem::size_of_val(&cpuset.bits[0]);
500 let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
Alex Crichton8a8bc662016-02-29 23:02:36 -0800501 0 != (cpuset.bits[idx] & (1 << offset))
502 }
503
504 pub fn CPU_EQUAL(set1: &cpu_set_t, set2: &cpu_set_t) -> bool {
505 set1.bits == set2.bits
506 }
507}
508
Raphael Cohn893d4d82016-05-08 11:40:57 +0100509extern {
Alex Crichton52605872015-09-15 16:49:37 -0700510 pub fn shm_open(name: *const c_char, oflag: ::c_int,
511 mode: mode_t) -> ::c_int;
Alexander Polakov58501562015-12-14 02:09:45 +0300512 pub fn shmget(key: ::key_t, size: ::size_t, shmflg: ::c_int) -> ::c_int;
Alex Crichton8a8bc662016-02-29 23:02:36 -0800513 pub fn shmat(shmid: ::c_int,
514 shmaddr: *const ::c_void,
515 shmflg: ::c_int) -> *mut ::c_void;
Alexander Polakov58501562015-12-14 02:09:45 +0300516 pub fn shmdt(shmaddr: *const ::c_void) -> ::c_int;
Alex Crichton8a8bc662016-02-29 23:02:36 -0800517 pub fn shmctl(shmid: ::c_int,
518 cmd: ::c_int,
519 buf: *mut ::shmid_ds) -> ::c_int;
Alex Crichton9d5b8b22015-09-15 17:14:23 -0700520 pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
521 -> ::c_int;
Alex Crichtoncd9b33e2015-09-17 14:47:40 -0700522 pub fn __errno_location() -> *mut ::c_int;
Alex Crichton15b83c22015-09-17 17:25:52 -0700523
Alex Crichton74825222015-10-29 17:36:55 -0700524 pub fn fopen64(filename: *const c_char,
525 mode: *const c_char) -> *mut ::FILE;
526 pub fn freopen64(filename: *const c_char, mode: *const c_char,
527 file: *mut ::FILE) -> *mut ::FILE;
528 pub fn tmpfile64() -> *mut ::FILE;
529 pub fn fgetpos64(stream: *mut ::FILE, ptr: *mut fpos64_t) -> ::c_int;
530 pub fn fsetpos64(stream: *mut ::FILE, ptr: *const fpos64_t) -> ::c_int;
Alex Crichton74825222015-10-29 17:36:55 -0700531 pub fn fseeko64(stream: *mut ::FILE,
532 offset: ::off64_t,
533 whence: ::c_int) -> ::c_int;
534 pub fn ftello64(stream: *mut ::FILE) -> ::off64_t;
Dan Burkert0b467752015-11-03 20:58:44 -0800535 pub fn fallocate(fd: ::c_int, mode: ::c_int,
536 offset: ::off_t, len: ::off_t) -> ::c_int;
Dan Burkert44bba4c2015-11-03 21:02:46 -0800537 pub fn posix_fallocate(fd: ::c_int, offset: ::off_t,
538 len: ::off_t) -> ::c_int;
Dan Burkertfe3968f2015-11-04 22:20:29 -0800539 pub fn readahead(fd: ::c_int, offset: ::off64_t,
540 count: ::size_t) -> ::ssize_t;
Alexander Polakov30baed02015-12-01 15:29:05 +0300541 pub fn getxattr(path: *const c_char, name: *const c_char,
542 value: *mut ::c_void, size: ::size_t) -> ::ssize_t;
543 pub fn lgetxattr(path: *const c_char, name: *const c_char,
544 value: *mut ::c_void, size: ::size_t) -> ::ssize_t;
545 pub fn fgetxattr(filedes: ::c_int, name: *const c_char,
546 value: *mut ::c_void, size: ::size_t) -> ::ssize_t;
547 pub fn setxattr(path: *const c_char, name: *const c_char,
548 value: *const ::c_void, size: ::size_t,
549 flags: ::c_int) -> ::c_int;
550 pub fn lsetxattr(path: *const c_char, name: *const c_char,
551 value: *const ::c_void, size: ::size_t,
552 flags: ::c_int) -> ::c_int;
553 pub fn fsetxattr(filedes: ::c_int, name: *const c_char,
554 value: *const ::c_void, size: ::size_t,
555 flags: ::c_int) -> ::c_int;
556 pub fn listxattr(path: *const c_char, list: *mut c_char,
557 size: ::size_t) -> ::ssize_t;
558 pub fn llistxattr(path: *const c_char, list: *mut c_char,
559 size: ::size_t) -> ::ssize_t;
560 pub fn flistxattr(filedes: ::c_int, list: *mut c_char,
561 size: ::size_t) -> ::ssize_t;
562 pub fn removexattr(path: *const c_char, name: *const c_char) -> ::c_int;
563 pub fn lremovexattr(path: *const c_char, name: *const c_char) -> ::c_int;
564 pub fn fremovexattr(filedes: ::c_int, name: *const c_char) -> ::c_int;
Alex Crichton8dce9ad2015-12-03 11:44:14 -0800565 pub fn signalfd(fd: ::c_int,
566 mask: *const ::sigset_t,
567 flags: ::c_int) -> ::c_int;
568 pub fn pwritev(fd: ::c_int,
569 iov: *const ::iovec,
570 iovcnt: ::c_int,
571 offset: ::off_t) -> ::ssize_t;
572 pub fn preadv(fd: ::c_int,
573 iov: *const ::iovec,
574 iovcnt: ::c_int,
575 offset: ::off_t) -> ::ssize_t;
576 pub fn quotactl(cmd: ::c_int,
577 special: *const ::c_char,
578 id: ::c_int,
579 data: *mut ::c_char) -> ::c_int;
580 pub fn mq_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::mqd_t;
581 pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
582 pub fn mq_unlink(name: *const ::c_char) -> ::c_int;
583 pub fn mq_receive(mqd: ::mqd_t,
584 msg_ptr: *mut ::c_char,
585 msg_len: ::size_t,
586 msq_prio: *mut ::c_uint) -> ::ssize_t;
587 pub fn mq_send(mqd: ::mqd_t,
588 msg_ptr: *const ::c_char,
589 msg_len: ::size_t,
590 msq_prio: ::c_uint) -> ::c_int;
591 pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
592 pub fn mq_setattr(mqd: ::mqd_t,
593 newattr: *const ::mq_attr,
594 oldattr: *mut ::mq_attr) -> ::c_int;
595 pub fn sched_getaffinity(pid: ::pid_t,
596 cpusetsize: ::size_t,
597 cpuset: *mut cpu_set_t) -> ::c_int;
598 pub fn sched_setaffinity(pid: ::pid_t,
599 cpusetsize: ::size_t,
600 cpuset: *const cpu_set_t) -> ::c_int;
601 pub fn epoll_pwait(epfd: ::c_int,
602 events: *mut ::epoll_event,
603 maxevents: ::c_int,
604 timeout: ::c_int,
605 sigmask: *const ::sigset_t) -> ::c_int;
606 pub fn dup3(oldfd: ::c_int, newfd: ::c_int, flags: ::c_int) -> ::c_int;
607 pub fn unshare(flags: ::c_int) -> ::c_int;
Alex Crichton8dce9ad2015-12-03 11:44:14 -0800608 pub fn sethostname(name: *const ::c_char, len: ::size_t) -> ::c_int;
Jana Radhakrishnan3bb17682016-01-15 22:26:36 -0800609 pub fn setns(fd: ::c_int, nstype: ::c_int) -> ::c_int;
Kamal Marhubi511a7802016-02-15 00:40:19 -0500610 pub fn mkostemp(template: *mut ::c_char, flags: ::c_int) -> ::c_int;
Alex Crichton8a8bc662016-02-29 23:02:36 -0800611 pub fn mkostemps(template: *mut ::c_char,
612 suffixlen: ::c_int,
613 flags: ::c_int) -> ::c_int;
Philipp Matthias Schaeferc1982a42016-02-28 16:06:45 +0100614 pub fn sigtimedwait(set: *const sigset_t,
615 info: *mut siginfo_t,
616 timeout: *const ::timespec) -> ::c_int;
617 pub fn sigwaitinfo(set: *const sigset_t,
618 info: *mut siginfo_t) -> ::c_int;
Kamal Marhubi9c4af102016-02-27 14:58:43 -0500619 pub fn openpty(amaster: *mut ::c_int,
620 aslave: *mut ::c_int,
621 name: *mut ::c_char,
622 termp: *const termios,
623 winp: *const ::winsize) -> ::c_int;
624 pub fn forkpty(amaster: *mut ::c_int,
625 name: *mut ::c_char,
626 termp: *const termios,
627 winp: *const ::winsize) -> ::pid_t;
A.J. Gardner24c84f12016-03-31 20:08:03 -0500628 pub fn nl_langinfo_l(item: ::nl_item, locale: ::locale_t) -> *mut ::c_char;
Kamal Marhubib9750b62016-04-27 14:04:31 -0400629 pub fn getnameinfo(sa: *const ::sockaddr,
630 salen: ::socklen_t,
631 host: *mut ::c_char,
632 hostlen: ::socklen_t,
633 serv: *mut ::c_char,
634 sevlen: ::socklen_t,
635 flags: ::c_int) -> ::c_int;
Kamal Marhubi95695992016-04-27 14:29:19 -0400636 pub fn prlimit(pid: ::pid_t, resource: ::c_int, new_limit: *const ::rlimit,
637 old_limit: *mut ::rlimit) -> ::c_int;
638 pub fn prlimit64(pid: ::pid_t,
639 resource: ::c_int,
640 new_limit: *const ::rlimit64,
641 old_limit: *mut ::rlimit64) -> ::c_int;
Raphael Cohn72f1fb62016-05-11 18:06:14 +0100642 pub fn getloadavg(loadavg: *mut ::c_double, nelem: ::c_int) -> ::c_int;
Julia Evansc9496fe2016-05-11 08:44:27 -0400643 pub fn process_vm_readv(pid: ::pid_t,
644 local_iov: *const ::iovec,
645 liovcnt: ::c_ulong,
646 remote_iov: *const ::iovec,
647 riovcnt: ::c_ulong,
648 flags: ::c_ulong) -> isize;
649 pub fn process_vm_writev(pid: ::pid_t,
650 local_iov: *const ::iovec,
651 liovcnt: ::c_ulong,
652 remote_iov: *const ::iovec,
653 riovcnt: ::c_ulong,
654 flags: ::c_ulong) -> isize;
Sergey Bugaev8b767972016-07-12 20:56:43 +0300655 pub fn reboot(how_to: ::c_int) -> ::c_int;
Axel Viala26ee7822016-06-10 02:33:32 +0200656
657 // Not available now on Android
658 pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char,
659 mode: ::mode_t) -> ::c_int;
Charles J. Schneider332bd862016-07-12 09:32:42 +0200660 pub fn if_nameindex() -> *mut if_nameindex;
661 pub fn if_freenameindex(ptr: *mut if_nameindex);
Alex Crichton50a42e22015-09-15 14:27:15 -0700662}
663
664cfg_if! {
Brian Anderson7d1d5752015-11-26 23:27:45 +0000665 if #[cfg(any(target_env = "musl",
Timon Van Overveldtad728592015-12-26 06:13:31 -0800666 target_env = "musleabi",
667 target_env = "musleabihf",
Brian Anderson7d1d5752015-11-26 23:27:45 +0000668 target_os = "emscripten"))] {
Alex Crichton74825222015-10-29 17:36:55 -0700669 mod musl;
670 pub use self::musl::*;
Alex Crichton62a6c822015-11-09 13:58:44 -0800671 } else if #[cfg(any(target_arch = "mips", target_arch = "mipsel"))] {
Alex Crichton50a42e22015-09-15 14:27:15 -0700672 mod mips;
673 pub use self::mips::*;
674 } else {
Alex Crichton62a6c822015-11-09 13:58:44 -0800675 mod other;
676 pub use self::other::*;
Alex Crichton50a42e22015-09-15 14:27:15 -0700677 }
678}