On Thu, Mar 14, 2024 at 10:34:28AM +0100, Michal Privoznik wrote:
As of commit [1] glibc may overwrite a call to open() with call
to __open_2() (if only two arguments are provided and the code is
compiled with clang). But since we are not mocking the latter our
test suite is broken as tests try to access paths outside of our
repo.
1:
https://sourceware.org/git/?p=glibc.git;a=commit;h=86889e22db329abac618c6...
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
meson.build | 13 +++++++++++++
tests/nssmock.c | 26 +++++++++++++++++++++++++
tests/qemusecuritymock.c | 24 +++++++++++++++++++++++
tests/vircgroupmock.c | 42 ++++++++++++++++++++++++++++++++++++++++
tests/virfilewrapper.c | 18 +++++++++++++++++
tests/virmock.h | 4 ++++
tests/virpcimock.c | 17 ++++++----------
tests/virtestmock.c | 20 +++++++++++++++++++
tests/virusbmock.c | 22 +++++++++++++++++++++
9 files changed, 175 insertions(+), 11 deletions(-)
diff --git a/meson.build b/meson.build
index 9842886bbb..b1b55b0d25 100644
--- a/meson.build
+++ b/meson.build
@@ -604,6 +604,12 @@ stat_functions = [
functions += stat_functions
+open_functions = [
+ '__open_2',
+]
+
+functions += open_functions
+
foreach function : functions
if cc.has_function(function)
conf.set('WITH_@0(a)'.format(function.to_upper()), 1)
@@ -618,6 +624,13 @@ foreach function : stat_functions
endforeach
+foreach function : open_functions
+ if cc.has_header_symbol('fcntl.h', function)
+ conf.set('WITH_@0(a)_DECL'.format(function.to_upper()), 1)
+ endif
+endforeach
+
+
# various header checks
headers = [
[...]
diff --git a/tests/virmock.h b/tests/virmock.h
index 300ba17174..178d0a15f0 100644
--- a/tests/virmock.h
+++ b/tests/virmock.h
@@ -27,6 +27,10 @@
#include "internal.h"
+#ifndef WITH___OPEN_2_DECL
+int __open_2 (const char *__path, int __oflag);
+#endif
Do we really need this bit? Every single use of __open_2 is already
guarded by WITH__OPEN_2.
Pavel
#define VIR_MOCK_COUNT_ARGS(...) VIR_MOCK_ARG27(__VA_ARGS__, 26, 25,
24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
#define VIR_MOCK_ARG27(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15,
_16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, ...) _27
#define VIR_MOCK_ARG_PASTE(a, b, ...) a##b(__VA_ARGS__)