libqb/tests/libstat_wrapper.c
Chrissie Caulfield 78df90b180
tests: Run IPC with use-filesystem-sockets active (#455)
* tests: Run IPC with use-filesystem-sockets active

Provide an LD_PRELOAD library that simulates the presence
of /etc/libqb/use-filesystem-sockets so that we can test
that functionality without actually having the file on
the system and affecting everything else running on the
box.

* use $() rather than ``

* Cope with spaces in directory names

* Docs: quote DOXYGEN2MAN in Makefile.am rather than configure.ac
2022-03-21 09:10:35 +00:00

59 lines
1.4 KiB
C

/*
* Simulate FORCESOCKETSFILE existing for the IPC tests
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <sys/stat.h>
#include "../include/config.h"
#if defined(QB_LINUX) || defined(QB_CYGWIN)
#include <gnu/lib-names.h>
#endif
// __xstat for earlier libc
int __xstat(int __ver, const char *__filename, struct stat *__stat_buf)
{
#if defined(QB_LINUX) || defined(QB_CYGWIN)
static int opened = 0;
static int (*real_xstat)(int __ver, const char *__filename, void *__stat_buf);
if (!opened) {
real_xstat = dlsym(RTLD_NEXT, "__xstat");
opened = 1;
}
if (strcmp(__filename, FORCESOCKETSFILE) == 0) {
fprintf(stderr, "__xstat called for %s\n", __filename);
return 0; /* it exists! */
}
return real_xstat(__ver, __filename, __stat_buf);
#else
return -1; /* Error in the unlikely event we get called on *BSD* */
#endif
}
// stat for F35 and later
int stat(const char *__filename, struct stat *__stat_buf)
{
#if defined(QB_LINUX) || defined(QB_CYGWIN)
static int opened = 0;
static int (*real_stat)(const char *__filename, void *__stat_buf);
if (!opened) {
real_stat = dlsym(RTLD_NEXT, "stat");
opened = 1;
}
if (strcmp(__filename, FORCESOCKETSFILE) == 0) {
fprintf(stderr, "stat called for %s\n", __filename);
return 0; /* it exists! */
}
return real_stat(__filename, __stat_buf);
#else
return -1; /* Error in the unlikely event we get called on *BSD* */
#endif
}