diff --git a/libc-test/build.rs b/libc-test/build.rs index 36aea9ef14000..c953836b02930 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1863,6 +1863,9 @@ fn test_android(target: &str) { // Added in API level 28, but some tests use level 24. "syncfs" => true, + // Added in API level 28, but some tests use level 24. + "fread_unlocked" | "fwrite_unlocked" | "fgets_unlocked" => true, + _ => false, } }); diff --git a/libc-test/semver/android.txt b/libc-test/semver/android.txt index 2bbdbf621a72c..29366d9394043 100644 --- a/libc-test/semver/android.txt +++ b/libc-test/semver/android.txt @@ -3087,6 +3087,7 @@ ff_trigger fgetc fgetpos fgets +fgets_unlocked fgetxattr fileno flistxattr @@ -3102,6 +3103,7 @@ fprintf fputc fputs fread +fread_unlocked free freeaddrinfo freeifaddrs @@ -3130,6 +3132,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 c6a686082541c..a892ac257155e 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -3678,6 +3678,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 e52b3d3a85eae..e1b217bd71cc0 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -4764,7 +4764,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,