xref: /drstd/dlibc/src/unix/header/unistd/pathconf.rs (revision 0fe3ff0054d3aec7fbf9bddecfecb10bc7d23a51)
1 use crate::unix::header::errno;
2 
3 pub const _PC_LINK_MAX: ::c_int = 0;
4 pub const _PC_MAX_CANON: ::c_int = 1;
5 pub const _PC_MAX_INPUT: ::c_int = 2;
6 pub const _PC_NAME_MAX: ::c_int = 3;
7 pub const _PC_PATH_MAX: ::c_int = 4;
8 pub const _PC_PIPE_BUF: ::c_int = 5;
9 pub const _PC_CHOWN_RESTRICTED: ::c_int = 6;
10 pub const _PC_NO_TRUNC: ::c_int = 7;
11 pub const _PC_VDISABLE: ::c_int = 8;
12 pub const _PC_SYNC_IO: ::c_int = 9;
13 pub const _PC_ASYNC_IO: ::c_int = 10;
14 pub const _PC_PRIO_IO: ::c_int = 11;
15 pub const _PC_SOCK_MAXBUF: ::c_int = 12;
16 pub const _PC_FILESIZEBITS: ::c_int = 13;
17 pub const _PC_REC_INCR_XFER_SIZE: ::c_int = 14;
18 pub const _PC_REC_MAX_XFER_SIZE: ::c_int = 15;
19 pub const _PC_REC_MIN_XFER_SIZE: ::c_int = 16;
20 pub const _PC_REC_XFER_ALIGN: ::c_int = 17;
21 pub const _PC_ALLOC_SIZE_MIN: ::c_int = 18;
22 pub const _PC_SYMLINK_MAX: ::c_int = 19;
23 pub const _PC_2_SYMLINKS: ::c_int = 20;
24 
25 fn pc(name: ::c_int) -> ::c_long {
26     // Settings from musl, some adjusted
27     match name {
28         _PC_LINK_MAX => 127,
29         _PC_MAX_CANON => 255,
30         _PC_MAX_INPUT => 255,
31         _PC_NAME_MAX => 255,
32         _PC_PATH_MAX => 4096,
33         _PC_PIPE_BUF => 4096,
34         _PC_CHOWN_RESTRICTED => 1,
35         _PC_NO_TRUNC => 1,
36         _PC_VDISABLE => 0,
37         _PC_SYNC_IO => 1,
38         _PC_ASYNC_IO => -1,
39         _PC_PRIO_IO => -1,
40         _PC_SOCK_MAXBUF => -1,
41         _PC_FILESIZEBITS => 64,
42         _PC_REC_INCR_XFER_SIZE => -1,
43         _PC_REC_MAX_XFER_SIZE => -1,
44         _PC_REC_MIN_XFER_SIZE => 4096,
45         _PC_REC_XFER_ALIGN => 4096,
46         _PC_ALLOC_SIZE_MIN => 4096,
47         _PC_SYMLINK_MAX => -1,
48         _PC_2_SYMLINKS => 1,
49         _ => {
50             unsafe {
51                 ::errno = errno::EINVAL;
52             }
53             -1
54         }
55     }
56 }
57 
58 #[no_mangle]
59 pub extern "C" fn fpathconf(_fildes: ::c_int, name: ::c_int) -> ::c_long {
60     pc(name)
61 }
62 
63 #[no_mangle]
64 pub extern "C" fn pathconf(_path: *const ::c_char, name: ::c_int) -> ::c_long {
65     pc(name)
66 }
67