diff options
author | Andrew Kaster <akaster@serenityos.org> | 2022-07-11 01:06:29 -0600 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-07-19 10:44:02 +0100 |
commit | d84fc60f96f8e384efa3e76452d21098e4519886 (patch) | |
tree | a319ba78f179f642d030b8c80dcdd7472bcc1906 /Userland | |
parent | 3b15addbc8041b20fbc727f0260fed5ad917e592 (diff) | |
download | serenity-d84fc60f96f8e384efa3e76452d21098e4519886.zip |
LibCore: Add support for compiling for Android with API Version >= 30
Most changes are around user and group management, which are exposed in
the Android NDK differently than other Unices.
We require version 30 for memfd_create, version 28 for posix_spawn, and
so on. It's possible a shim for memfd_create could be used, but since
Google is mandating new apps use API level 30 as of Nov 2022, this seems
suitable.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Libraries/LibCore/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/Group.cpp | 2 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/Group.h | 2 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/System.cpp | 12 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/System.h | 6 |
5 files changed, 16 insertions, 10 deletions
diff --git a/Userland/Libraries/LibCore/CMakeLists.txt b/Userland/Libraries/LibCore/CMakeLists.txt index 96940c060d..a22ab5245f 100644 --- a/Userland/Libraries/LibCore/CMakeLists.txt +++ b/Userland/Libraries/LibCore/CMakeLists.txt @@ -1,5 +1,4 @@ set(SOURCES - Account.cpp AnonymousBuffer.cpp ArgsParser.cpp ConfigFile.cpp @@ -38,6 +37,9 @@ set(SOURCES UDPServer.cpp Version.cpp ) +if (NOT ANDROID) + list(APPEND SOURCES Account.cpp) +endif() serenity_lib(LibCore core) target_link_libraries(LibCore LibC LibCrypt) diff --git a/Userland/Libraries/LibCore/Group.cpp b/Userland/Libraries/LibCore/Group.cpp index 259ede81bc..e38aace24e 100644 --- a/Userland/Libraries/LibCore/Group.cpp +++ b/Userland/Libraries/LibCore/Group.cpp @@ -11,7 +11,7 @@ namespace Core { -#ifndef AK_OS_BSD_GENERIC +#if !defined(AK_OS_BSD_GENERIC) && !defined(AK_OS_ANDROID) ErrorOr<void> Group::add_group(Group& group) { if (group.name().is_empty()) diff --git a/Userland/Libraries/LibCore/Group.h b/Userland/Libraries/LibCore/Group.h index 6f49007fb7..1e291e7a53 100644 --- a/Userland/Libraries/LibCore/Group.h +++ b/Userland/Libraries/LibCore/Group.h @@ -15,7 +15,7 @@ namespace Core { class Group { public: -#ifndef AK_OS_BSD_GENERIC +#if !defined(AK_OS_BSD_GENERIC) && !defined(AK_OS_ANDROID) static ErrorOr<void> add_group(Group& group); #endif diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index a3b1972bdf..770569b987 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -13,7 +13,6 @@ #include <AK/String.h> #include <AK/Vector.h> #include <LibCore/System.h> -#include <LibSystem/syscall.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> @@ -25,6 +24,7 @@ #include <unistd.h> #ifdef __serenity__ +# include <LibSystem/syscall.h> # include <serenity.h> #endif @@ -182,7 +182,7 @@ ErrorOr<void> profiling_free_buffer(pid_t pid) } #endif -#ifndef AK_OS_BSD_GENERIC +#if !defined(AK_OS_BSD_GENERIC) && !defined(AK_OS_ANDROID) ErrorOr<Optional<struct spwd>> getspent() { errno = 0; @@ -917,17 +917,19 @@ ErrorOr<struct utsname> uname() return uts; } +#ifndef AK_OS_ANDROID ErrorOr<void> adjtime(const struct timeval* delta, struct timeval* old_delta) { -#ifdef __serenity__ +# ifdef __serenity__ int rc = syscall(SC_adjtime, delta, old_delta); HANDLE_SYSCALL_RETURN_VALUE("adjtime", rc, {}); -#else +# else if (::adjtime(delta, old_delta) < 0) return Error::from_syscall("adjtime"sv, -errno); return {}; -#endif +# endif } +#endif ErrorOr<void> exec(StringView filename, Span<StringView> arguments, SearchInPath search_in_path, Optional<Span<StringView>> environment) { diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index a3b4072899..e25c2e7777 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -26,7 +26,7 @@ #include <time.h> #include <utime.h> -#ifndef AK_OS_BSD_GENERIC +#if !defined(AK_OS_BSD_GENERIC) && !defined(AK_OS_ANDROID) # include <shadow.h> #endif @@ -78,7 +78,7 @@ ALWAYS_INLINE ErrorOr<void> unveil(std::nullptr_t, std::nullptr_t) return unveil(StringView {}, StringView {}); } -#ifndef AK_OS_BSD_GENERIC +#if !defined(AK_OS_BSD_GENERIC) && !defined(AK_OS_ANDROID) ErrorOr<Optional<struct spwd>> getspent(); ErrorOr<Optional<struct spwd>> getspnam(StringView name); #endif @@ -157,7 +157,9 @@ ErrorOr<void> unlink(StringView path); ErrorOr<void> utime(StringView path, Optional<struct utimbuf>); ErrorOr<struct utsname> uname(); ErrorOr<Array<int, 2>> pipe2(int flags); +#ifndef AK_OS_ANDROID ErrorOr<void> adjtime(const struct timeval* delta, struct timeval* old_delta); +#endif enum class SearchInPath { No, Yes, |