summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaarten de Vries <maarten@de-vri.es>2021-03-05 14:54:34 +0100
committerMaarten de Vries <maarten@de-vri.es>2021-03-05 14:54:34 +0100
commitb98d5292b8cfe96213503997d9cd1f3f49bfce40 (patch)
treebe3c137779f2af154e1c19f5e2ccd7fbfc84a438 /src
parent3a7135f491b8faac564c13e7d0c5fd6b10e03855 (diff)
downloadrust-libc-b98d5292b8cfe96213503997d9cd1f3f49bfce40.tar.gz
Re-add accept4 for Android on 32 bit ARM.
Diffstat (limited to 'src')
-rw-r--r--src/unix/linux_like/android/b32/arm.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/unix/linux_like/android/b32/arm.rs b/src/unix/linux_like/android/b32/arm.rs
index aa9beb7652..8a53e53994 100644
--- a/src/unix/linux_like/android/b32/arm.rs
+++ b/src/unix/linux_like/android/b32/arm.rs
@@ -521,3 +521,19 @@ pub const REG_R14: ::c_int = 14;
pub const REG_R15: ::c_int = 15;
pub const NGREG: ::c_int = 18;
+
+f! {
+ // Sadly, Android before 5.0 (API level 21), the accept4 syscall is not
+ // exposed by the libc. As work-around, we implement it through `syscall`
+ // directly. This workaround can be removed if the minimum version of
+ // Android is bumped. When the workaround is removed, `accept4` can be
+ // moved back to `linux_like/mod.rs`
+ pub fn accept4(
+ fd: ::c_int,
+ addr: *mut ::sockaddr,
+ len: *mut ::socklen_t,
+ flg: ::c_int
+ ) -> ::c_int {
+ ::syscall(SYS_accept4, fd, addr, len, flg) as ::c_int
+ }
+}