Skip to content

Commit 9d6d018

Browse files
committed
Auto merge of #2018 - asomers:aio_no_librt, r=JohnTitor
aio functions do not require librt on FreeBSD On FreeBSD, the aio_ functions require librt _only_ if they use SIGEV_THREAD completion notification. However, due to Rust's originally poor support for C unions, libc doesn't even expose some of the fields of struct sigevent that SIGEV_THREAD requires. Accordingly, there is no need to link librt to programs using aio via libc. This change partially reverts 8c23f77 from PR #1630 . While I'm here, fix the linkage of lio_listio on DragonflyBSD. It _does_ require librt.
2 parents 7e7452f + f40f306 commit 9d6d018

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed

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

+21
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,27 @@ extern "C" {
10811081
) -> *mut ::c_void;
10821082
}
10831083

1084+
#[link(name = "rt")]
1085+
extern "C" {
1086+
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
1087+
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
1088+
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
1089+
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
1090+
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
1091+
pub fn aio_suspend(
1092+
aiocb_list: *const *const aiocb,
1093+
nitems: ::c_int,
1094+
timeout: *const ::timespec,
1095+
) -> ::c_int;
1096+
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
1097+
pub fn lio_listio(
1098+
mode: ::c_int,
1099+
aiocb_list: *const *mut aiocb,
1100+
nitems: ::c_int,
1101+
sevp: *mut sigevent,
1102+
) -> ::c_int;
1103+
}
1104+
10841105
cfg_if! {
10851106
if #[cfg(libc_thread_local)] {
10861107
mod errno;

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

+19
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,18 @@ safe_f! {
12101210
extern "C" {
12111211
pub fn __error() -> *mut ::c_int;
12121212

1213+
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
1214+
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
1215+
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
1216+
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
1217+
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
1218+
pub fn aio_suspend(
1219+
aiocb_list: *const *const aiocb,
1220+
nitems: ::c_int,
1221+
timeout: *const ::timespec,
1222+
) -> ::c_int;
1223+
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
1224+
12131225
pub fn extattr_delete_fd(
12141226
fd: ::c_int,
12151227
attrnamespace: ::c_int,
@@ -1300,6 +1312,13 @@ extern "C" {
13001312
flags: ::c_int,
13011313
) -> ::c_int;
13021314

1315+
pub fn lio_listio(
1316+
mode: ::c_int,
1317+
aiocb_list: *const *mut aiocb,
1318+
nitems: ::c_int,
1319+
sevp: *mut sigevent,
1320+
) -> ::c_int;
1321+
13031322
pub fn posix_fallocate(
13041323
fd: ::c_int,
13051324
offset: ::off_t,

src/unix/bsd/freebsdlike/mod.rs

-17
Original file line numberDiff line numberDiff line change
@@ -1393,12 +1393,6 @@ extern "C" {
13931393
timeout: *const ::timespec,
13941394
) -> ::c_int;
13951395
pub fn lchflags(path: *const ::c_char, flags: ::c_ulong) -> ::c_int;
1396-
pub fn lio_listio(
1397-
mode: ::c_int,
1398-
aiocb_list: *const *mut aiocb,
1399-
nitems: ::c_int,
1400-
sevp: *mut sigevent,
1401-
) -> ::c_int;
14021396
pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
14031397
pub fn memrchr(
14041398
cx: *const ::c_void,
@@ -1603,17 +1597,6 @@ extern "C" {
16031597

16041598
#[link(name = "rt")]
16051599
extern "C" {
1606-
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
1607-
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
1608-
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
1609-
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
1610-
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
1611-
pub fn aio_suspend(
1612-
aiocb_list: *const *const aiocb,
1613-
nitems: ::c_int,
1614-
timeout: *const ::timespec,
1615-
) -> ::c_int;
1616-
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
16171600
pub fn mq_close(mqd: ::mqd_t) -> ::c_int;
16181601
pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int;
16191602
pub fn mq_notify(mqd: ::mqd_t, notification: *const ::sigevent)

0 commit comments

Comments
 (0)