1 use libc::{c_char, c_int, c_void, size_t, ssize_t, uint32_t};
2 
3 const XATTR_NOFOLLOW: c_int = 0x0001;
4 
5 #[inline(always)]
fremovexattr(fd: c_int, name: *const c_char) -> c_int6 pub unsafe fn fremovexattr(fd: c_int, name: *const c_char) -> c_int {
7     extern "C" {
8         fn fremovexattr(fd: c_int, name: *const c_char, options: c_int) -> c_int;
9     }
10     fremovexattr(fd, name, 0)
11 }
12 
13 #[inline(always)]
fsetxattr( fd: c_int, name: *const c_char, value: *const c_void, size: size_t, ) -> ssize_t14 pub unsafe fn fsetxattr(
15     fd: c_int,
16     name: *const c_char,
17     value: *const c_void,
18     size: size_t,
19 ) -> ssize_t {
20     extern "C" {
21         fn fsetxattr(
22             fd: c_int,
23             name: *const c_char,
24             value: *const c_void,
25             size: size_t,
26             position: uint32_t,
27             options: c_int,
28         ) -> ssize_t;
29     }
30     fsetxattr(fd, name, value, size, 0, 0)
31 }
32 
33 #[inline(always)]
fgetxattr( fd: c_int, name: *const c_char, value: *mut c_void, size: size_t, ) -> ssize_t34 pub unsafe fn fgetxattr(
35     fd: c_int,
36     name: *const c_char,
37     value: *mut c_void,
38     size: size_t,
39 ) -> ssize_t {
40     extern "C" {
41         fn fgetxattr(
42             fd: c_int,
43             name: *const c_char,
44             value: *mut c_void,
45             size: size_t,
46             position: uint32_t,
47             options: c_int,
48         ) -> ssize_t;
49     }
50     fgetxattr(fd, name, value, size, 0, 0)
51 }
52 
53 #[inline(always)]
flistxattr(fd: c_int, buf: *mut c_char, size: size_t) -> ssize_t54 pub unsafe fn flistxattr(fd: c_int, buf: *mut c_char, size: size_t) -> ssize_t {
55     extern "C" {
56         fn flistxattr(fd: c_int, buf: *mut c_char, size: size_t, options: c_int) -> ssize_t;
57     }
58     flistxattr(fd, buf, size, 0)
59 }
60 
61 #[inline(always)]
lremovexattr(path: *const c_char, name: *const c_char) -> c_int62 pub unsafe fn lremovexattr(path: *const c_char, name: *const c_char) -> c_int {
63     extern "C" {
64         fn removexattr(path: *const c_char, name: *const c_char, options: c_int) -> c_int;
65     }
66     removexattr(path, name, XATTR_NOFOLLOW)
67 }
68 
69 #[inline(always)]
lsetxattr( path: *const c_char, name: *const c_char, value: *const c_void, size: size_t, ) -> ssize_t70 pub unsafe fn lsetxattr(
71     path: *const c_char,
72     name: *const c_char,
73     value: *const c_void,
74     size: size_t,
75 ) -> ssize_t {
76     extern "C" {
77         fn setxattr(
78             path: *const c_char,
79             name: *const c_char,
80             value: *const c_void,
81             size: size_t,
82             position: uint32_t,
83             options: c_int,
84         ) -> ssize_t;
85     }
86     setxattr(path, name, value, size, 0, XATTR_NOFOLLOW)
87 }
88 
89 #[inline(always)]
lgetxattr( path: *const c_char, name: *const c_char, value: *mut c_void, size: size_t, ) -> ssize_t90 pub unsafe fn lgetxattr(
91     path: *const c_char,
92     name: *const c_char,
93     value: *mut c_void,
94     size: size_t,
95 ) -> ssize_t {
96     extern "C" {
97         fn getxattr(
98             path: *const c_char,
99             name: *const c_char,
100             value: *mut c_void,
101             size: size_t,
102             position: uint32_t,
103             options: c_int,
104         ) -> ssize_t;
105     }
106     getxattr(path, name, value, size, 0, XATTR_NOFOLLOW)
107 }
108 
109 #[inline(always)]
llistxattr(path: *const c_char, buf: *mut c_char, size: size_t) -> ssize_t110 pub unsafe fn llistxattr(path: *const c_char, buf: *mut c_char, size: size_t) -> ssize_t {
111     extern "C" {
112         fn listxattr(
113             path: *const c_char,
114             buf: *mut c_char,
115             size: size_t,
116             options: c_int,
117         ) -> ssize_t;
118     }
119     listxattr(path, buf, size, XATTR_NOFOLLOW)
120 }
121