From: Roman Bolshakov Date: Wed, 21 Aug 2019 16:13:20 +0000 (+0300) Subject: tests: Lookup extended stat/lstat in mocks X-Git-Tag: v5.7.0-rc1~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6b17edd5163;p=thirdparty%2Flibvirt.git 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 --- diff --git a/tests/virmock.h b/tests/virmock.h index 74bb0d5b15..7520bb5d6e 100644 --- a/tests/virmock.h +++ b/tests/virmock.h @@ -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) diff --git a/tests/virmockstathelpers.c b/tests/virmockstathelpers.c index 0bbea4b437..485063be84 100644 --- a/tests/virmockstathelpers.c +++ b/tests/virmockstathelpers.c @@ -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