relibc/header/unistd/
pathconf.rs1use crate::{
2 header::{
3 errno,
4 limits::{
5 FILESIZEBITS, LINK_MAX, MAX_CANON, MAX_INPUT, NAME_MAX, PATH_MAX, PIPE_BUF,
6 POSIX_ALLOC_SIZE_MIN, SYMLINK_MAX,
7 },
8 termios::_POSIX_VDISABLE,
9 },
10 platform::{
11 self,
12 types::{c_char, c_int, c_long},
13 },
14};
15
16pub const _PC_LINK_MAX: c_int = 0;
17pub const _PC_MAX_CANON: c_int = 1;
18pub const _PC_MAX_INPUT: c_int = 2;
19pub const _PC_NAME_MAX: c_int = 3;
20pub const _PC_PATH_MAX: c_int = 4;
21pub const _PC_PIPE_BUF: c_int = 5;
22pub const _PC_CHOWN_RESTRICTED: c_int = 6;
23pub const _PC_NO_TRUNC: c_int = 7;
24pub const _PC_VDISABLE: c_int = 8;
26pub const _PC_SYNC_IO: c_int = 9;
27pub const _PC_ASYNC_IO: c_int = 10;
28pub const _PC_PRIO_IO: c_int = 11;
29pub const _PC_SOCK_MAXBUF: c_int = 12;
30pub const _PC_FILESIZEBITS: c_int = 13;
31pub const _PC_REC_INCR_XFER_SIZE: c_int = 14;
32pub const _PC_REC_MAX_XFER_SIZE: c_int = 15;
33pub const _PC_REC_MIN_XFER_SIZE: c_int = 16;
34pub const _PC_REC_XFER_ALIGN: c_int = 17;
35pub const _PC_ALLOC_SIZE_MIN: c_int = 18;
36pub const _PC_SYMLINK_MAX: c_int = 19;
37pub const _PC_2_SYMLINKS: c_int = 20;
38
39fn pc(name: c_int) -> c_long {
40 match name {
42 _PC_LINK_MAX => LINK_MAX,
43 _PC_MAX_CANON => MAX_CANON,
44 _PC_MAX_INPUT => MAX_INPUT,
45 _PC_NAME_MAX => NAME_MAX.try_into().unwrap_or(-1),
46 _PC_PATH_MAX => PATH_MAX.try_into().unwrap_or(-1),
47 _PC_PIPE_BUF => PIPE_BUF,
48 _PC_CHOWN_RESTRICTED => 1,
49 _PC_NO_TRUNC => 1,
50 _PC_VDISABLE => _POSIX_VDISABLE.into(),
51 _PC_SYNC_IO => 1,
52 _PC_ASYNC_IO => -1,
53 _PC_PRIO_IO => -1,
54 _PC_SOCK_MAXBUF => -1,
55 _PC_FILESIZEBITS => FILESIZEBITS,
56 _PC_REC_INCR_XFER_SIZE => -1,
57 _PC_REC_MAX_XFER_SIZE => -1,
58 _PC_REC_MIN_XFER_SIZE => 4096,
59 _PC_REC_XFER_ALIGN => 4096,
60 _PC_ALLOC_SIZE_MIN => POSIX_ALLOC_SIZE_MIN,
61 _PC_SYMLINK_MAX => SYMLINK_MAX,
62 _PC_2_SYMLINKS => 1,
63 _ => {
64 platform::ERRNO.set(errno::EINVAL);
65 -1
66 }
67 }
68}
69
70#[unsafe(no_mangle)]
72pub extern "C" fn fpathconf(_fildes: c_int, name: c_int) -> c_long {
73 pc(name)
74}
75
76#[unsafe(no_mangle)]
78pub extern "C" fn pathconf(_path: *const c_char, name: c_int) -> c_long {
79 pc(name)
80}