summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-12-09 15:14:01 +0000
committerbors <bors@rust-lang.org>2021-12-09 15:14:01 +0000
commitfb3dec288152d2e077fc0ac9c6a249ff526c641f (patch)
tree4ed75bb845359e2f2d3a96997047d89f278ef807
parent6fe1ff94948e805c0d20970adaa73ebdd4fd7d1b (diff)
parentab1013b027144dcd3c22d19dc68c16a4def20bd8 (diff)
downloadrust-libc-fb3dec288152d2e077fc0ac9c6a249ff526c641f.tar.gz
Auto merge of #2525 - qwandor:mlock2, r=Amanieu
Add mlock2 on Android and Linux. Unfortunately the type of the flags parameter is different between Bionic and glibc for some reason.
-rw-r--r--libc-test/build.rs3
-rw-r--r--src/unix/linux_like/android/mod.rs4
-rw-r--r--src/unix/linux_like/linux/mod.rs2
3 files changed, 9 insertions, 0 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs
index ad023fbd84..fbcc0f3bed 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -1702,6 +1702,9 @@ fn test_android(target: &str) {
"reallocarray" => true,
"__system_property_wait" => true,
+ // Added in API level 30, but tests use level 28.
+ "mlock2" => true,
+
_ => false,
}
});
diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs
index 7973509964..c97744de5f 100644
--- a/src/unix/linux_like/android/mod.rs
+++ b/src/unix/linux_like/android/mod.rs
@@ -2328,6 +2328,9 @@ pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5;
pub const ALG_OP_DECRYPT: ::c_int = 0;
pub const ALG_OP_ENCRYPT: ::c_int = 1;
+// sys/mman.h
+pub const MLOCK_ONFAULT: ::c_int = 0x01;
+
// uapi/linux/vm_sockets.h
pub const VMADDR_CID_ANY: ::c_uint = 0xFFFFFFFF;
pub const VMADDR_CID_HYPERVISOR: ::c_uint = 0;
@@ -2582,6 +2585,7 @@ extern "C" {
pub fn strerror_r(errnum: ::c_int, buf: *mut c_char, buflen: ::size_t) -> ::c_int;
pub fn gettimeofday(tp: *mut ::timeval, tz: *mut ::timezone) -> ::c_int;
+ pub fn mlock2(addr: *const ::c_void, len: ::size_t, flags: ::c_int) -> ::c_int;
pub fn madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int;
pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
pub fn msync(addr: *mut ::c_void, len: ::size_t, flags: ::c_int) -> ::c_int;
diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs
index ed70756a0e..c3874dfff8 100644
--- a/src/unix/linux_like/linux/mod.rs
+++ b/src/unix/linux_like/linux/mod.rs
@@ -2583,6 +2583,7 @@ pub const MAP_SHARED_VALIDATE: ::c_int = 0x3;
// include/uapi/asm-generic/mman-common.h
pub const MAP_FIXED_NOREPLACE: ::c_int = 0x100000;
+pub const MLOCK_ONFAULT: ::c_uint = 0x01;
// uapi/linux/vm_sockets.h
pub const VMADDR_CID_ANY: ::c_uint = 0xFFFFFFFF;
@@ -3533,6 +3534,7 @@ extern "C" {
pub fn seekdir(dirp: *mut ::DIR, loc: ::c_long);
pub fn telldir(dirp: *mut ::DIR) -> ::c_long;
+ pub fn mlock2(addr: *const ::c_void, len: ::size_t, flags: ::c_uint) -> ::c_int;
pub fn madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int;
pub fn msync(addr: *mut ::c_void, len: ::size_t, flags: ::c_int) -> ::c_int;