Skip to content

Commit 8dde98e

Browse files
committed
Auto merge of #1114 - asomers:extattr, r=alexcrichton
Add extattr(2) and extattr(3) definitions for FreeBSD and NetBSD DragonflyBSD does define 3 of these 14 functions. But I elected not to add it to the PR because I can't find any evidence that these syscalls are used on Dragonfly, even in the base system. And by themselves, those three are insufficient for the xattr crate.
2 parents 04a13d1 + 74d5a98 commit 8dde98e

File tree

4 files changed

+113
-2
lines changed

4 files changed

+113
-2
lines changed

.travis.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ matrix:
5353
- env: TARGET=arm-unknown-linux-musleabihf
5454
- env: TARGET=aarch64-unknown-linux-gnu
5555
- env: TARGET=aarch64-unknown-linux-musl
56-
# FIXME(#856)
57-
rust: 1.22.1
5856
- env: TARGET=powerpc-unknown-linux-gnu
5957
- env: TARGET=powerpc64-unknown-linux-gnu
6058
- env: TARGET=powerpc64le-unknown-linux-gnu

libc-test/build.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ fn main() {
304304
cfg.header("pthread_np.h");
305305
cfg.header("sched.h");
306306
cfg.header("ufs/ufs/quota.h");
307+
cfg.header("sys/extattr.h");
307308
cfg.header("sys/jail.h");
308309
cfg.header("sys/ipc.h");
309310
cfg.header("sys/msg.h");
@@ -317,6 +318,7 @@ fn main() {
317318
cfg.header("mqueue.h");
318319
cfg.header("ufs/ufs/quota.h");
319320
cfg.header("ufs/ufs/quota1.h");
321+
cfg.header("sys/extattr.h");
320322
cfg.header("sys/ioctl_compat.h");
321323

322324
// DCCP support

src/unix/bsd/freebsdlike/freebsd/mod.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ s! {
186186

187187
pub const SIGEV_THREAD_ID: ::c_int = 4;
188188

189+
pub const EXTATTR_NAMESPACE_EMPTY: ::c_int = 0;
190+
pub const EXTATTR_NAMESPACE_USER: ::c_int = 1;
191+
pub const EXTATTR_NAMESPACE_SYSTEM: ::c_int = 2;
192+
189193
pub const RAND_MAX: ::c_int = 0x7fff_fffd;
190194
pub const PTHREAD_STACK_MIN: ::size_t = 2048;
191195
pub const PTHREAD_MUTEX_ADAPTIVE_NP: ::c_int = 4;
@@ -934,6 +938,58 @@ extern {
934938
pub fn clock_gettime(clk_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int;
935939
pub fn clock_settime(clk_id: ::clockid_t, tp: *const ::timespec) -> ::c_int;
936940

941+
pub fn extattr_delete_fd(fd: ::c_int,
942+
attrnamespace: ::c_int,
943+
attrname: *const ::c_char) -> ::c_int;
944+
pub fn extattr_delete_file(path: *const ::c_char,
945+
attrnamespace: ::c_int,
946+
attrname: *const ::c_char) -> ::c_int;
947+
pub fn extattr_delete_link(path: *const ::c_char,
948+
attrnamespace: ::c_int,
949+
attrname: *const ::c_char) -> ::c_int;
950+
pub fn extattr_get_fd(fd: ::c_int,
951+
attrnamespace: ::c_int,
952+
attrname: *const ::c_char,
953+
data: *mut ::c_void,
954+
nbytes: ::size_t) -> ::ssize_t;
955+
pub fn extattr_get_file(path: *const ::c_char,
956+
attrnamespace: ::c_int,
957+
attrname: *const ::c_char,
958+
data: *mut ::c_void,
959+
nbytes: ::size_t) -> ::ssize_t;
960+
pub fn extattr_get_link(path: *const ::c_char,
961+
attrnamespace: ::c_int,
962+
attrname: *const ::c_char,
963+
data: *mut ::c_void,
964+
nbytes: ::size_t) -> ::ssize_t;
965+
pub fn extattr_list_fd(fd: ::c_int,
966+
attrnamespace: ::c_int,
967+
data: *mut ::c_void,
968+
nbytes: ::size_t) -> ::ssize_t;
969+
pub fn extattr_list_file(path: *const ::c_char,
970+
attrnamespace: ::c_int,
971+
data: *mut ::c_void,
972+
nbytes: ::size_t) -> ::ssize_t;
973+
pub fn extattr_list_link(path: *const ::c_char,
974+
attrnamespace: ::c_int,
975+
data: *mut ::c_void,
976+
nbytes: ::size_t) -> ::ssize_t;
977+
pub fn extattr_set_fd(fd: ::c_int,
978+
attrnamespace: ::c_int,
979+
attrname: *const ::c_char,
980+
data: *const ::c_void,
981+
nbytes: ::size_t) -> ::ssize_t;
982+
pub fn extattr_set_file(path: *const ::c_char,
983+
attrnamespace: ::c_int,
984+
attrname: *const ::c_char,
985+
data: *const ::c_void,
986+
nbytes: ::size_t) -> ::ssize_t;
987+
pub fn extattr_set_link(path: *const ::c_char,
988+
attrnamespace: ::c_int,
989+
attrname: *const ::c_char,
990+
data: *const ::c_void,
991+
nbytes: ::size_t) -> ::ssize_t;
992+
937993
pub fn jail(jail: *mut ::jail) -> ::c_int;
938994
pub fn jail_attach(jid: ::c_int) -> ::c_int;
939995
pub fn jail_remove(jid: ::c_int) -> ::c_int;
@@ -1060,6 +1116,14 @@ extern {
10601116
pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int;
10611117
}
10621118

1119+
#[link(name = "util")]
1120+
extern {
1121+
pub fn extattr_namespace_to_string(attrnamespace: ::c_int,
1122+
string: *mut *mut ::c_char) -> ::c_int;
1123+
pub fn extattr_string_to_namespace(string: *const ::c_char,
1124+
attrnamespace: *mut ::c_int) -> ::c_int;
1125+
}
1126+
10631127
cfg_if! {
10641128
if #[cfg(target_arch = "x86")] {
10651129
mod x86;

src/unix/bsd/netbsdlike/netbsd/mod.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,9 @@ pub const AT_SYMLINK_NOFOLLOW: ::c_int = 0x200;
334334
pub const AT_SYMLINK_FOLLOW: ::c_int = 0x400;
335335
pub const AT_REMOVEDIR: ::c_int = 0x800;
336336

337+
pub const EXTATTR_NAMESPACE_USER: ::c_int = 1;
338+
pub const EXTATTR_NAMESPACE_SYSTEM: ::c_int = 2;
339+
337340
pub const LC_COLLATE_MASK: ::c_int = (1 << ::LC_COLLATE);
338341
pub const LC_CTYPE_MASK: ::c_int = (1 << ::LC_CTYPE);
339342
pub const LC_MONETARY_MASK: ::c_int = (1 << ::LC_MONETARY);
@@ -1013,6 +1016,46 @@ extern {
10131016
pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
10141017
nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
10151018

1019+
pub fn extattr_delete_fd(fd: ::c_int,
1020+
attrnamespace: ::c_int,
1021+
attrname: *const ::c_char) -> ::c_int;
1022+
pub fn extattr_delete_file(path: *const ::c_char,
1023+
attrnamespace: ::c_int,
1024+
attrname: *const ::c_char) -> ::c_int;
1025+
pub fn extattr_delete_link(path: *const ::c_char,
1026+
attrnamespace: ::c_int,
1027+
attrname: *const ::c_char) -> ::c_int;
1028+
pub fn extattr_get_fd(fd: ::c_int,
1029+
attrnamespace: ::c_int,
1030+
attrname: *const ::c_char,
1031+
data: *mut ::c_void,
1032+
nbytes: ::size_t) -> ::ssize_t;
1033+
pub fn extattr_get_file(path: *const ::c_char,
1034+
attrnamespace: ::c_int,
1035+
attrname: *const ::c_char,
1036+
data: *mut ::c_void,
1037+
nbytes: ::size_t) -> ::ssize_t;
1038+
pub fn extattr_get_link(path: *const ::c_char,
1039+
attrnamespace: ::c_int,
1040+
attrname: *const ::c_char,
1041+
data: *mut ::c_void,
1042+
nbytes: ::size_t) -> ::ssize_t;
1043+
pub fn extattr_set_fd(fd: ::c_int,
1044+
attrnamespace: ::c_int,
1045+
attrname: *const ::c_char,
1046+
data: *const ::c_void,
1047+
nbytes: ::size_t) -> ::ssize_t;
1048+
pub fn extattr_set_file(path: *const ::c_char,
1049+
attrnamespace: ::c_int,
1050+
attrname: *const ::c_char,
1051+
data: *const ::c_void,
1052+
nbytes: ::size_t) -> ::ssize_t;
1053+
pub fn extattr_set_link(path: *const ::c_char,
1054+
attrnamespace: ::c_int,
1055+
attrname: *const ::c_char,
1056+
data: *const ::c_void,
1057+
nbytes: ::size_t) -> ::ssize_t;
1058+
10161059
#[link_name = "__lutimes50"]
10171060
pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
10181061
pub fn getnameinfo(sa: *const ::sockaddr,
@@ -1112,6 +1155,10 @@ extern {
11121155

11131156
#[link(name = "util")]
11141157
extern {
1158+
pub fn extattr_namespace_to_string(attrnamespace: ::c_int,
1159+
string: *mut *mut ::c_char) -> ::c_int;
1160+
pub fn extattr_string_to_namespace(string: *const ::c_char,
1161+
attrnamespace: *mut ::c_int) -> ::c_int;
11151162
#[cfg_attr(target_os = "netbsd", link_name = "__getpwent_r50")]
11161163
pub fn getpwent_r(pwd: *mut ::passwd,
11171164
buf: *mut ::c_char,

0 commit comments

Comments
 (0)