提交 d6b17edd 编写于 作者: R Roman Bolshakov 提交者: Daniel P. Berrangé

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: NRoman Bolshakov <r.bolshakov@yadro.com>
上级 740f181c
......@@ -288,3 +288,13 @@
abort(); \
} \
} 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");
#ifdef MOCK_STAT
# ifdef __APPLE__
VIR_MOCK_REAL_INIT_ALIASED(stat, "stat$INODE64");
# else
VIR_MOCK_REAL_INIT(stat);
# endif
fdebug("real stat %p\n", real_stat);
#endif
#ifdef MOCK_STAT64
......@@ -154,7 +158,11 @@ static void virMockStatInit(void)
fdebug("real __xstat64 %p\n", real___xstat64);
#endif
#ifdef MOCK_LSTAT
# ifdef __APPLE__
VIR_MOCK_REAL_INIT_ALIASED(stat, "lstat$INODE64");
# else
VIR_MOCK_REAL_INIT(lstat);
# endif
fdebug("real lstat %p\n", real_lstat);
#endif
#ifdef MOCK_LSTAT64
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册