mirror of
https://github.com/Zygo/bees.git
synced 2025-08-02 05:43:29 +02:00
With new kernel headers and old libc, `SYS_openat2` can still end up undefined, which triggers the fallback build-time code, that doesn't build: ``` openat2.cc: In function 'int openat2(int, const char*, open_how*, size_t)': openat2.cc:35:2: error: 'errno' was not declared in this scope 35 | errno = ENOSYS; | ^~~~~ openat2.cc:24:1: note: 'errno' is defined in header '<cerrno>'; did you forget to '#include <cerrno>'? 23 | #include <unistd.h> +++ |+#include <cerrno> 24 | openat2.cc:35:10: error: 'ENOSYS' was not declared in this scope 35 | errno = ENOSYS; | ^~~~~~ openat2.cc:29:19: error: unused parameter 'dirfd' [-Werror=unused-parameter] 29 | openat2(int const dirfd, const char *const pathname, struct open_how *const how, size_t const size) | ~~~~~~~~~~^~~~~ openat2.cc:29:44: error: unused parameter 'pathname' [-Werror=unused-parameter] 29 | openat2(int const dirfd, const char *const pathname, struct open_how *const how, size_t const size) | ~~~~~~~~~~~~~~~~~~^~~~~~~~ openat2.cc:29:77: error: unused parameter 'how' [-Werror=unused-parameter] 29 | t dirfd, const char *const pathname, struct open_how *const how, size_t const size) | ~~~~~~~~~~~~~~~~~~~~~~~^~~ openat2.cc:29:95: error: unused parameter 'size' [-Werror=unused-parameter] 29 | st char *const pathname, struct open_how *const how, size_t const size) | ~~~~~~~~~~~~~^~~~ ``` Skip the kernel version check and test for the definition of `SYS_openat2` directly. If it's not there, plug in the constant so we can send the call directly to the kernel, bypassing libc completely. Fixes: https://github.com/Zygo/bees/issues/318 Signed-off-by: Zygo Blaxell <bees@furryterror.org>