mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
tests: Lookup extended stat/lstat in mocks
macOS syscall interface (/usr/lib/system/libsystem_kernel.dylib) has three kinds of stat but only one of them can be used to fill "struct stat": stat$INODE64. virmockstathelpers looks up regular stat instead of stat$INODE64. That causes a failure in qemufirmwaretest because "struct stat" is laid out differently from the values returned by stat. Introduce VIR_MOCK_REAL_INIT_ALIASED that can be used to lookup stat$INODE64 and lstat$INODE64 and use it to setup real functions on macOS. Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
This commit is contained in:
parent
740f181c47
commit
d6b17edd51
@ -288,3 +288,13 @@
|
|||||||
abort(); \
|
abort(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define VIR_MOCK_REAL_INIT_ALIASED(name, alias) \
|
||||||
|
do { \
|
||||||
|
if (real_##name == NULL && \
|
||||||
|
!(real_##name = dlsym(RTLD_NEXT, \
|
||||||
|
alias))) { \
|
||||||
|
fprintf(stderr, "Missing symbol '" alias "'\n"); \
|
||||||
|
abort(); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
@ -138,7 +138,11 @@ static void virMockStatInit(void)
|
|||||||
debug = getenv("VIR_MOCK_STAT_DEBUG");
|
debug = getenv("VIR_MOCK_STAT_DEBUG");
|
||||||
|
|
||||||
#ifdef MOCK_STAT
|
#ifdef MOCK_STAT
|
||||||
|
# ifdef __APPLE__
|
||||||
|
VIR_MOCK_REAL_INIT_ALIASED(stat, "stat$INODE64");
|
||||||
|
# else
|
||||||
VIR_MOCK_REAL_INIT(stat);
|
VIR_MOCK_REAL_INIT(stat);
|
||||||
|
# endif
|
||||||
fdebug("real stat %p\n", real_stat);
|
fdebug("real stat %p\n", real_stat);
|
||||||
#endif
|
#endif
|
||||||
#ifdef MOCK_STAT64
|
#ifdef MOCK_STAT64
|
||||||
@ -154,7 +158,11 @@ static void virMockStatInit(void)
|
|||||||
fdebug("real __xstat64 %p\n", real___xstat64);
|
fdebug("real __xstat64 %p\n", real___xstat64);
|
||||||
#endif
|
#endif
|
||||||
#ifdef MOCK_LSTAT
|
#ifdef MOCK_LSTAT
|
||||||
|
# ifdef __APPLE__
|
||||||
|
VIR_MOCK_REAL_INIT_ALIASED(stat, "lstat$INODE64");
|
||||||
|
# else
|
||||||
VIR_MOCK_REAL_INIT(lstat);
|
VIR_MOCK_REAL_INIT(lstat);
|
||||||
|
# endif
|
||||||
fdebug("real lstat %p\n", real_lstat);
|
fdebug("real lstat %p\n", real_lstat);
|
||||||
#endif
|
#endif
|
||||||
#ifdef MOCK_LSTAT64
|
#ifdef MOCK_LSTAT64
|
||||||
|
Loading…
Reference in New Issue
Block a user