libc/unix/linux_like/linux/gnu/b32/
mod.rs

1//! 32-bit specific definitions for linux-like values
2
3use crate::prelude::*;
4use crate::pthread_mutex_t;
5
6pub type clock_t = i32;
7
8pub type shmatt_t = c_ulong;
9pub type msgqnum_t = c_ulong;
10pub type msglen_t = c_ulong;
11pub type nlink_t = u32;
12pub type __u64 = c_ulonglong;
13pub type __s64 = c_longlong;
14pub type __fsword_t = i32;
15pub type fsblkcnt64_t = u64;
16pub type fsfilcnt64_t = u64;
17pub type __syscall_ulong_t = c_ulong;
18pub type __suseconds64_t = i64;
19
20cfg_if! {
21    if #[cfg(target_arch = "riscv32")] {
22        pub type time_t = i64;
23        pub type suseconds_t = i64;
24        type __ino_t = c_ulong;
25        type __ino64_t = u64;
26        pub type ino_t = __ino64_t;
27        pub type off_t = i64;
28        pub type blkcnt_t = i64;
29        pub type fsblkcnt_t = u64;
30        pub type fsfilcnt_t = u64;
31        pub type rlim_t = u64;
32        pub type blksize_t = i64;
33    } else if #[cfg(gnu_time_bits64)] {
34        pub type time_t = i64;
35        pub type suseconds_t = i32;
36        type __ino_t = c_ulong;
37        type __ino64_t = u64;
38        pub type ino_t = __ino64_t;
39        pub type off_t = i64;
40        pub type blkcnt_t = i64;
41        pub type fsblkcnt_t = u64;
42        pub type fsfilcnt_t = u64;
43        pub type rlim_t = u64;
44        pub type blksize_t = i32;
45    } else if #[cfg(gnu_file_offset_bits64)] {
46        pub type time_t = i32;
47        pub type suseconds_t = i32;
48        type __ino_t = c_ulong;
49        type __ino64_t = u64;
50        pub type ino_t = __ino64_t;
51        pub type off_t = i64;
52        pub type blkcnt_t = i64;
53        pub type fsblkcnt_t = u64;
54        pub type fsfilcnt_t = u64;
55        pub type rlim_t = u64;
56        pub type blksize_t = i32;
57    } else {
58        pub type time_t = i32;
59        pub type suseconds_t = i32;
60        type __ino_t = c_ulong;
61        type __ino64_t = u64;
62        pub type ino_t = __ino_t;
63        pub type off_t = i32;
64        pub type blkcnt_t = i32;
65        pub type fsblkcnt_t = c_ulong;
66        pub type fsfilcnt_t = c_ulong;
67        pub type rlim_t = c_ulong;
68        pub type blksize_t = i32;
69    }
70}
71
72cfg_if! {
73    if #[cfg(not(any(
74        target_arch = "mips",
75        target_arch = "mips32r6",
76        target_arch = "powerpc",
77        target_arch = "sparc"
78    )))] {
79        s! {
80            pub struct stat {
81                pub st_dev: crate::dev_t,
82
83                #[cfg(not(gnu_time_bits64))]
84                __pad1: Padding<c_uint>,
85
86                #[cfg(any(gnu_time_bits64, not(gnu_file_offset_bits64)))]
87                pub st_ino: crate::ino_t,
88                #[cfg(all(not(gnu_time_bits64), gnu_file_offset_bits64))]
89                __st_ino: __ino_t,
90
91                pub st_mode: crate::mode_t,
92                pub st_nlink: crate::nlink_t,
93                pub st_uid: crate::uid_t,
94                pub st_gid: crate::gid_t,
95
96                pub st_rdev: crate::dev_t,
97
98                #[cfg(not(gnu_time_bits64))]
99                __pad2: Padding<c_uint>,
100
101                pub st_size: off_t,
102
103                pub st_blksize: crate::blksize_t,
104                pub st_blocks: crate::blkcnt_t,
105
106                pub st_atime: crate::time_t,
107                pub st_atime_nsec: c_long,
108                #[cfg(gnu_time_bits64)]
109                _atime_pad: Padding<c_int>,
110                pub st_mtime: crate::time_t,
111                pub st_mtime_nsec: c_long,
112                #[cfg(gnu_time_bits64)]
113                _mtime_pad: Padding<c_int>,
114                pub st_ctime: crate::time_t,
115                pub st_ctime_nsec: c_long,
116                #[cfg(gnu_time_bits64)]
117                _ctime_pad: Padding<c_int>,
118
119                #[cfg(not(gnu_file_offset_bits64))]
120                __glibc_reserved4: Padding<c_long>,
121                #[cfg(not(gnu_file_offset_bits64))]
122                __glibc_reserved5: Padding<c_long>,
123                #[cfg(all(not(gnu_time_bits64), gnu_file_offset_bits64))]
124                pub st_ino: crate::ino_t,
125            }
126        }
127    }
128}
129
130s! {
131    pub struct statvfs {
132        pub f_bsize: c_ulong,
133        pub f_frsize: c_ulong,
134        pub f_blocks: crate::fsblkcnt_t,
135        pub f_bfree: crate::fsblkcnt_t,
136        pub f_bavail: crate::fsblkcnt_t,
137        pub f_files: crate::fsfilcnt_t,
138        pub f_ffree: crate::fsfilcnt_t,
139        pub f_favail: crate::fsfilcnt_t,
140        pub f_fsid: c_ulong,
141        __f_unused: Padding<c_int>,
142        pub f_flag: c_ulong,
143        pub f_namemax: c_ulong,
144        __f_spare: [c_int; 6],
145    }
146
147    pub struct pthread_attr_t {
148        __size: [u32; 9],
149    }
150
151    pub struct sigset_t {
152        __val: [c_ulong; 32],
153    }
154
155    pub struct sysinfo {
156        pub uptime: c_long,
157        pub loads: [c_ulong; 3],
158        pub totalram: c_ulong,
159        pub freeram: c_ulong,
160        pub sharedram: c_ulong,
161        pub bufferram: c_ulong,
162        pub totalswap: c_ulong,
163        pub freeswap: c_ulong,
164        pub procs: c_ushort,
165        #[deprecated(
166            since = "0.2.58",
167            note = "This padding field might become private in the future"
168        )]
169        pub pad: c_ushort,
170        pub totalhigh: c_ulong,
171        pub freehigh: c_ulong,
172        pub mem_unit: c_uint,
173        pub _f: [c_char; 8],
174    }
175
176    pub struct semid_ds {
177        pub sem_perm: ipc_perm,
178        #[cfg(all(not(gnu_time_bits64), target_arch = "powerpc"))]
179        __reserved: Padding<crate::__syscall_ulong_t>,
180        pub sem_otime: crate::time_t,
181        #[cfg(not(any(
182            gnu_time_bits64,
183            target_arch = "mips",
184            target_arch = "mips32r6",
185            target_arch = "powerpc"
186        )))]
187        __reserved: Padding<crate::__syscall_ulong_t>,
188        #[cfg(all(not(gnu_time_bits64), target_arch = "powerpc"))]
189        __reserved2: Padding<crate::__syscall_ulong_t>,
190        pub sem_ctime: crate::time_t,
191        #[cfg(not(any(
192            gnu_time_bits64,
193            target_arch = "mips",
194            target_arch = "mips32r6",
195            target_arch = "powerpc"
196        )))]
197        __reserved2: Padding<crate::__syscall_ulong_t>,
198        pub sem_nsems: crate::__syscall_ulong_t,
199        #[cfg(all(
200            gnu_time_bits64,
201            not(any(
202                target_arch = "mips",
203                target_arch = "mips32r6",
204                target_arch = "powerpc",
205                target_arch = "arm",
206                target_arch = "x86"
207            ))
208        ))]
209        __reserved2: Padding<crate::__syscall_ulong_t>,
210        __glibc_reserved3: Padding<crate::__syscall_ulong_t>,
211        __glibc_reserved4: Padding<crate::__syscall_ulong_t>,
212    }
213
214    #[cfg(gnu_time_bits64)]
215    pub struct timex {
216        pub modes: c_uint,
217        _pad1: Padding<c_int>,
218        pub offset: c_longlong,
219        pub freq: c_longlong,
220        pub maxerror: c_longlong,
221        pub esterror: c_longlong,
222        pub status: c_int,
223        _pad2: Padding<c_int>,
224        pub constant: c_longlong,
225        pub precision: c_longlong,
226        pub tolerance: c_longlong,
227        pub time: crate::timeval,
228        pub tick: c_longlong,
229        pub ppsfreq: c_longlong,
230        pub jitter: c_longlong,
231        pub shift: c_int,
232        _pad3: Padding<c_int>,
233        pub stabil: c_longlong,
234        pub jitcnt: c_longlong,
235        pub calcnt: c_longlong,
236        pub errcnt: c_longlong,
237        pub stbcnt: c_longlong,
238        pub tai: c_int,
239        pub __unused1: i32,
240        pub __unused2: i32,
241        pub __unused3: i32,
242        pub __unused4: i32,
243        pub __unused5: i32,
244        pub __unused6: i32,
245        pub __unused7: i32,
246        pub __unused8: i32,
247        pub __unused9: i32,
248        pub __unused10: i32,
249        pub __unused11: i32,
250    }
251
252    #[cfg(not(gnu_time_bits64))]
253    pub struct timex {
254        pub modes: c_uint,
255        pub offset: c_long,
256        pub freq: c_long,
257        pub maxerror: c_long,
258        pub esterror: c_long,
259        pub status: c_int,
260        pub constant: c_long,
261        pub precision: c_long,
262        pub tolerance: c_long,
263        pub time: crate::timeval,
264        pub tick: c_long,
265        pub ppsfreq: c_long,
266        pub jitter: c_long,
267        pub shift: c_int,
268        pub stabil: c_long,
269        pub jitcnt: c_long,
270        pub calcnt: c_long,
271        pub errcnt: c_long,
272        pub stbcnt: c_long,
273        pub tai: c_int,
274        pub __unused1: i32,
275        pub __unused2: i32,
276        pub __unused3: i32,
277        pub __unused4: i32,
278        pub __unused5: i32,
279        pub __unused6: i32,
280        pub __unused7: i32,
281        pub __unused8: i32,
282        pub __unused9: i32,
283        pub __unused10: i32,
284        pub __unused11: i32,
285    }
286}
287
288pub const POSIX_FADV_DONTNEED: c_int = 4;
289pub const POSIX_FADV_NOREUSE: c_int = 5;
290
291pub const F_OFD_GETLK: c_int = 36;
292pub const F_OFD_SETLK: c_int = 37;
293pub const F_OFD_SETLKW: c_int = 38;
294
295pub const __SIZEOF_PTHREAD_CONDATTR_T: usize = 4;
296pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 24;
297pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 32;
298pub const __SIZEOF_PTHREAD_BARRIER_T: usize = 20;
299pub const __SIZEOF_PTHREAD_MUTEXATTR_T: usize = 4;
300pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: usize = 8;
301pub const __SIZEOF_PTHREAD_BARRIERATTR_T: usize = 4;
302
303cfg_if! {
304    if #[cfg(target_arch = "sparc")] {
305        pub const O_NOATIME: c_int = 0x200000;
306        pub const O_PATH: c_int = 0x1000000;
307        pub const O_TMPFILE: c_int = 0x2000000 | O_DIRECTORY;
308
309        pub const SA_ONSTACK: c_int = 1;
310
311        pub const PTRACE_DETACH: c_uint = 11;
312
313        pub const F_RDLCK: c_int = 1;
314        pub const F_WRLCK: c_int = 2;
315        pub const F_UNLCK: c_int = 3;
316
317        pub const SFD_CLOEXEC: c_int = 0x400000;
318
319        pub const NCCS: usize = 17;
320
321        pub const O_TRUNC: c_int = 0x400;
322        pub const O_CLOEXEC: c_int = 0x400000;
323
324        pub const EBFONT: c_int = 109;
325        pub const ENOSTR: c_int = 72;
326        pub const ENODATA: c_int = 111;
327        pub const ETIME: c_int = 73;
328        pub const ENOSR: c_int = 74;
329        pub const ENONET: c_int = 80;
330        pub const ENOPKG: c_int = 113;
331        pub const EREMOTE: c_int = 71;
332        pub const ENOLINK: c_int = 82;
333        pub const EADV: c_int = 83;
334        pub const ESRMNT: c_int = 84;
335        pub const ECOMM: c_int = 85;
336        pub const EPROTO: c_int = 86;
337        pub const EDOTDOT: c_int = 88;
338
339        pub const SA_NODEFER: c_int = 0x20;
340        pub const SA_RESETHAND: c_int = 0x4;
341        pub const SA_RESTART: c_int = 0x2;
342        pub const SA_NOCLDSTOP: c_int = 0x00000008;
343
344        pub const EPOLL_CLOEXEC: c_int = 0x400000;
345
346        pub const EFD_CLOEXEC: c_int = 0x400000;
347    } else {
348        pub const O_NOATIME: c_int = 0o1000000;
349        pub const O_PATH: c_int = 0o10000000;
350        pub const O_TMPFILE: c_int = 0o20000000 | O_DIRECTORY;
351
352        pub const SA_ONSTACK: c_int = 0x08000000;
353
354        pub const PTRACE_DETACH: c_uint = 17;
355
356        pub const F_RDLCK: c_int = 0;
357        pub const F_WRLCK: c_int = 1;
358        pub const F_UNLCK: c_int = 2;
359
360        pub const SFD_CLOEXEC: c_int = 0x080000;
361
362        pub const NCCS: usize = 32;
363
364        pub const O_TRUNC: c_int = 512;
365        pub const O_CLOEXEC: c_int = 0x80000;
366        pub const EBFONT: c_int = 59;
367        pub const ENOSTR: c_int = 60;
368        pub const ENODATA: c_int = 61;
369        pub const ETIME: c_int = 62;
370        pub const ENOSR: c_int = 63;
371        pub const ENONET: c_int = 64;
372        pub const ENOPKG: c_int = 65;
373        pub const EREMOTE: c_int = 66;
374        pub const ENOLINK: c_int = 67;
375        pub const EADV: c_int = 68;
376        pub const ESRMNT: c_int = 69;
377        pub const ECOMM: c_int = 70;
378        pub const EPROTO: c_int = 71;
379        pub const EDOTDOT: c_int = 73;
380
381        pub const SA_NODEFER: c_int = 0x40000000;
382        pub const SA_RESETHAND: c_int = 0x80000000;
383        pub const SA_RESTART: c_int = 0x10000000;
384        pub const SA_NOCLDSTOP: c_int = 0x00000001;
385
386        pub const EPOLL_CLOEXEC: c_int = 0x80000;
387
388        pub const EFD_CLOEXEC: c_int = 0x80000;
389    }
390}
391cfg_if! {
392    if #[cfg(target_arch = "sparc")] {
393        pub const F_SETLK: c_int = 8;
394        pub const F_SETLKW: c_int = 9;
395    } else if #[cfg(all(
396        gnu_file_offset_bits64,
397        any(target_arch = "mips", target_arch = "mips32r6")
398    ))] {
399        pub const F_SETLK: c_int = 34;
400        pub const F_SETLKW: c_int = 35;
401    } else if #[cfg(gnu_file_offset_bits64)] {
402        pub const F_SETLK: c_int = 13;
403        pub const F_SETLKW: c_int = 14;
404    } else {
405        pub const F_SETLK: c_int = 6;
406        pub const F_SETLKW: c_int = 7;
407    }
408}
409
410#[cfg(target_endian = "little")]
411pub const PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
412    size: [
413        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
414    ],
415};
416#[cfg(target_endian = "little")]
417pub const PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
418    size: [
419        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
420    ],
421};
422#[cfg(target_endian = "little")]
423pub const PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
424    size: [
425        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
426    ],
427};
428#[cfg(target_endian = "big")]
429pub const PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
430    size: [
431        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
432    ],
433};
434#[cfg(target_endian = "big")]
435pub const PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
436    size: [
437        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
438    ],
439};
440#[cfg(target_endian = "big")]
441pub const PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP: crate::pthread_mutex_t = pthread_mutex_t {
442    size: [
443        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
444    ],
445};
446
447pub const PTRACE_GETFPREGS: c_uint = 14;
448pub const PTRACE_SETFPREGS: c_uint = 15;
449pub const PTRACE_GETREGS: c_uint = 12;
450pub const PTRACE_SETREGS: c_uint = 13;
451
452extern "C" {
453    pub fn sysctl(
454        name: *mut c_int,
455        namelen: c_int,
456        oldp: *mut c_void,
457        oldlenp: *mut size_t,
458        newp: *mut c_void,
459        newlen: size_t,
460    ) -> c_int;
461}
462
463cfg_if! {
464    if #[cfg(target_arch = "x86")] {
465        mod x86;
466        pub use self::x86::*;
467    } else if #[cfg(target_arch = "arm")] {
468        mod arm;
469        pub use self::arm::*;
470    } else if #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] {
471        mod mips;
472        pub use self::mips::*;
473    } else if #[cfg(target_arch = "m68k")] {
474        mod m68k;
475        pub use self::m68k::*;
476    } else if #[cfg(target_arch = "powerpc")] {
477        mod powerpc;
478        pub use self::powerpc::*;
479    } else if #[cfg(target_arch = "sparc")] {
480        mod sparc;
481        pub use self::sparc::*;
482    } else if #[cfg(target_arch = "riscv32")] {
483        mod riscv32;
484        pub use self::riscv32::*;
485    } else if #[cfg(target_arch = "csky")] {
486        mod csky;
487        pub use self::csky::*;
488    } else {
489        // Unknown target_arch
490    }
491}