]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: Fix mocking of open()
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 11 Jun 2025 14:17:33 +0000 (16:17 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 2 Jul 2025 11:54:04 +0000 (13:54 +0200)
In some cases (well, majority), open() is either rewritten to
open64(), either by plain '#define open open64') or at assembly
level (using __REDIRECT macro). See <fcntl.h> for more info.

This didn't really matter to us, because we do not chain load two
mocks that would need to reimplement open() at the same time. But
this is soon going to change.

The problem is, that VIR_MOCK_REAL_INIT(open) glances over
aforementioned rewrite and initializes real_open pointer to
open() from the standard C library. But it needs to point to
open() (well, open64()) from the next mock on the list.

Therefore, init real_open to open64().

But of course, this is all glibc specific and for example musl
does the oposite (#define open64 open).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
tests/nssmock.c
tests/qemusecuritymock.c
tests/vircgroupmock.c
tests/virfilewrapper.c
tests/virpcimock.c
tests/virtestmock.c
tests/virusbmock.c

index 3493119f3bd0d79a11c660c21e211fe2fdea21d8..d47fe7b10fbd843d7669fdf6a969dde582140da4 100644 (file)
@@ -46,7 +46,11 @@ init_syms(void)
     if (real_open)
         return;
 
+# if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+# else
     VIR_MOCK_REAL_INIT(open);
+# endif
 # if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 # endif
index 2dfd6c33a0539662e11ea1a6f49b733599785c1b..d5c711b5d77d589cf44678007b999d611fc15fe8 100644 (file)
@@ -115,7 +115,11 @@ init_syms(void)
         return;
 
     VIR_MOCK_REAL_INIT(chown);
+#if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+#else
     VIR_MOCK_REAL_INIT(open);
+#endif
 #if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 #endif
index d922f30f3409cf1652f0e959681526dd8bbb6441..a5c18bd7b05cc57fe31b05456858e120e79daf5a 100644 (file)
@@ -304,7 +304,11 @@ static void init_syms(void)
     VIR_MOCK_REAL_INIT(fopen);
     VIR_MOCK_REAL_INIT(access);
     VIR_MOCK_REAL_INIT(mkdir);
+# if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+# else
     VIR_MOCK_REAL_INIT(open);
+# endif
 # if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 # endif
index 908f7142c2e4595f7287aefe2123639baa532860..3bccca9c113fa2ff0c5f8a697eda1236622699a7 100644 (file)
@@ -56,7 +56,11 @@ static void init_syms(void)
     VIR_MOCK_REAL_INIT(fopen);
     VIR_MOCK_REAL_INIT(access);
     VIR_MOCK_REAL_INIT(mkdir);
+# if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+# else
     VIR_MOCK_REAL_INIT(open);
+# endif
 # if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 # endif
index 4eff6d70e32f60a7ead9b210bd1ec6002b9b2da6..ca345f37a3417e930ff2514d1a93922840ec83e4 100644 (file)
@@ -945,7 +945,11 @@ init_syms(void)
         return;
 
     VIR_MOCK_REAL_INIT(access);
+# if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+# else
     VIR_MOCK_REAL_INIT(open);
+# endif
 # if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 # endif /* WITH___OPEN_2 */
index 5b25b380e51e44cb1fd71ed2f28fd3cf10bfd492..a5c3b29f39bcf55614c509ab7af8d9e520c14bbf 100644 (file)
@@ -46,7 +46,11 @@ static void init_syms(void)
     if (real_open)
         return;
 
+#if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+#else
     VIR_MOCK_REAL_INIT(open);
+#endif
 #if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 #endif
index e148296b7cf8fdee19138b94a21184d37567bbf0..c23bed45285f556bdb4864e93f12f1263873bde8 100644 (file)
@@ -40,7 +40,11 @@ static void init_syms(void)
     if (real_open)
         return;
 
+#if defined(__GLIBC__) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
+    VIR_MOCK_REAL_INIT_ALIASED(open, "open64");
+#else
     VIR_MOCK_REAL_INIT(open);
+#endif
 #if WITH___OPEN_2
     VIR_MOCK_REAL_INIT(__open_2);
 #endif