From ad47c949eb145e02e70d6a698fb20e2cae2fa476 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 3 Jul 2023 22:03:52 +0100 Subject: [PATCH] android add handful lock free stdio calls --- libc-test/build.rs | 2 ++ libc-test/semver/android.txt | 3 +++ src/unix/linux_like/android/mod.rs | 14 ++++++++++++++ src/unix/linux_like/linux/mod.rs | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index eb0dcb89a58c5..9622107dd2961 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1908,6 +1908,8 @@ fn test_android(target: &str) { // Added in API level 28, but some tests use level 24. "pthread_attr_getinheritsched" | "pthread_attr_setinheritsched" => true, + // Added in API level 28, but some tests use level 24. + "fread_unlocked" | "fwrite_unlocked" | "fgets_unlocked" | "fflush_unlocked" => true, _ => false, } diff --git a/libc-test/semver/android.txt b/libc-test/semver/android.txt index 5153069559f68..31407d497975a 100644 --- a/libc-test/semver/android.txt +++ b/libc-test/semver/android.txt @@ -3101,6 +3101,7 @@ ff_trigger fgetc fgetpos fgets +fgets_unlocked fgetxattr fileno flistxattr @@ -3116,6 +3117,7 @@ fprintf fputc fputs fread +fread_unlocked free freeaddrinfo freeifaddrs @@ -3144,6 +3146,7 @@ ftruncate ftruncate64 futimens fwrite +fwrite_unlocked gai_strerror genlmsghdr getaddrinfo diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs index b169985322890..beffc8c0969d0 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -3708,6 +3708,20 @@ extern "C" { needle: *const ::c_void, needlelen: ::size_t, ) -> *mut ::c_void; + pub fn fread_unlocked( + buf: *mut ::c_void, + size: ::size_t, + nobj: ::size_t, + stream: *mut ::FILE, + ) -> ::size_t; + pub fn fwrite_unlocked( + buf: *const ::c_void, + size: ::size_t, + nobj: ::size_t, + stream: *mut ::FILE, + ) -> ::size_t; + pub fn fflush_unlocked(stream: *mut ::FILE) -> ::c_int; + pub fn fgets_unlocked(buf: *mut ::c_char, size: ::c_int, stream: *mut ::FILE) -> *mut ::c_char; } cfg_if! { diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index da499c54d174a..0b89bae3d5620 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -4773,7 +4773,7 @@ extern "C" { newfd: ::c_int, ) -> ::c_int; pub fn fread_unlocked( - ptr: *mut ::c_void, + buf: *mut ::c_void, size: ::size_t, nobj: ::size_t, stream: *mut ::FILE,