From b98d5292b8cfe96213503997d9cd1f3f49bfce40 Mon Sep 17 00:00:00 2001 From: Maarten de Vries Date: Fri, 5 Mar 2021 14:54:34 +0100 Subject: [PATCH] Re-add accept4 for Android on 32 bit ARM. --- src/unix/linux_like/android/b32/arm.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/unix/linux_like/android/b32/arm.rs b/src/unix/linux_like/android/b32/arm.rs index aa9beb765288c..8a53e53994134 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 + } +}