diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libfaketime.c | 192 |
1 files changed, 38 insertions, 154 deletions
diff --git a/src/libfaketime.c b/src/libfaketime.c index 19a6ec6..45278b7 100644 --- a/src/libfaketime.c +++ b/src/libfaketime.c @@ -266,6 +266,22 @@ static pid_t (*real_getpid) (); static long (*real_syscall) (long, ...); #endif +static bool check_missing_real(const char *name, bool missing) +{ + if (missing) + { /* dlsym() failed */ +#ifdef DEBUG + (void) fprintf(stderr, "faketime problem: original %s not found.\n", name); +#else + (void) name; /* unused */ +#endif + return false; + } + return true; +} +#define CHECK_MISSING_REAL(name) \ + check_missing_real(#name, (NULL == real_##name)) + static int initialized = 0; /* prototypes */ @@ -903,13 +919,7 @@ int __xstat (int ver, const char *path, struct stat *buf) { ftpl_init(); } - if (NULL == real_xstat) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original stat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(xstat)) return -1; int result; DONT_FAKE_TIME(result = real_xstat(ver, path, buf)); @@ -936,13 +946,7 @@ int __fxstat (int ver, int fildes, struct stat *buf) { ftpl_init(); } - if (NULL == real_fxstat) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original fstat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(fxstat)) return -1; int result; DONT_FAKE_TIME(result = real_fxstat(ver, fildes, buf)); @@ -969,13 +973,7 @@ int __fxstatat(int ver, int fildes, const char *filename, struct stat *buf, int { ftpl_init(); } - if (NULL == real_fxstatat) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original fstatat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(fxstatat)) return -1; int result; DONT_FAKE_TIME(result = real_fxstatat(ver, fildes, filename, buf, flag)); @@ -1002,13 +1000,7 @@ int __lxstat (int ver, const char *path, struct stat *buf) { ftpl_init(); } - if (NULL == real_lxstat) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original lstat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(lxstat)) return -1; int result; DONT_FAKE_TIME(result = real_lxstat(ver, path, buf)); @@ -1034,13 +1026,7 @@ int __xstat64 (int ver, const char *path, struct stat64 *buf) { ftpl_init(); } - if (NULL == real_xstat64) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original stat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(xstat64)) return -1; int result; DONT_FAKE_TIME(result = real_xstat64(ver, path, buf)); @@ -1066,13 +1052,7 @@ int __fxstat64 (int ver, int fildes, struct stat64 *buf) { ftpl_init(); } - if (NULL == real_fxstat64) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original fstat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(fxstat64)) return -1; int result; DONT_FAKE_TIME(result = real_fxstat64(ver, fildes, buf)); @@ -1099,13 +1079,7 @@ int __fxstatat64 (int ver, int fildes, const char *filename, struct stat64 *buf, { ftpl_init(); } - if (NULL == real_fxstatat64) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original fstatat64() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(fxstatat64)) return -1; int result; DONT_FAKE_TIME(result = real_fxstatat64(ver, fildes, filename, buf, flag)); @@ -1132,13 +1106,7 @@ int __lxstat64 (int ver, const char *path, struct stat64 *buf) { ftpl_init(); } - if (NULL == real_lxstat64) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original lstat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(lxstat64)) return -1; int result; DONT_FAKE_TIME(result = real_lxstat64(ver, path, buf)); @@ -1165,13 +1133,7 @@ int utime(const char *filename, const struct utimbuf *times) { ftpl_init(); } - if (NULL == real_utime) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original utime() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(utime)) return -1; int result; struct utimbuf ntbuf; @@ -1199,13 +1161,7 @@ int utimes(const char *filename, const struct timeval times[2]) { ftpl_init(); } - if (NULL == real_utimes) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original utimes() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(utimes)) return -1; int result; struct timeval tn[2]; @@ -1275,13 +1231,7 @@ int utimensat(int dirfd, const char *filename, const struct timespec times[2], i { ftpl_init(); } - if (NULL == real_utimensat) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original utimensat() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(utimensat)) return -1; int result; struct timespec tn[2]; @@ -1296,13 +1246,7 @@ int futimens(int fd, const struct timespec times[2]) { ftpl_init(); } - if (NULL == real_futimens) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original futimens() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(futimens)) return -1; int result; struct timespec tn[2]; @@ -1841,13 +1785,7 @@ int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout) return -1; } - if (NULL == real_sem_timedwait) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original sem_timedwait() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(sem_timedwait)) return -1; if (!dont_fake) { @@ -2260,13 +2198,7 @@ int ftime(struct timeb *tb) return 0; /* ftime() always returns 0, see manpage */ /* Check whether we've got a pointer to the real ftime() function yet */ - if (NULL == real_ftime) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original ftime() not found.\n"); -#endif - return 0; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(ftime)) return 0; /* initialize our TZ result with the real current time */ #ifdef MACOS_DYLD_INTERPOSE @@ -2311,13 +2243,7 @@ int gettimeofday(struct timeval *tv, void *tz) } /* Check whether we've got a pointer to the real ftime() function yet */ - if (NULL == real_gettimeofday) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original gettimeofday() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(gettimeofday)) return -1; /* initialize our result with the real current time */ #ifdef MACOS_DYLD_INTERPOSE @@ -2374,13 +2300,7 @@ int clock_gettime(clockid_t clk_id, struct timespec *tp) return -1; } - if (NULL == real_clock_gettime) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original clock_gettime() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(clock_gettime)) return -1; /* initialize our result with the real current time */ #ifdef MACOS_DYLD_INTERPOSE @@ -2426,13 +2346,7 @@ int timespec_get(struct timespec *ts, int base) return 0; } - if (NULL == real_timespec_get) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original timespec_get() not found.\n"); -#endif - return 0; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(timespec_get)) return 0; /* initialize our result with the real current time */ #ifdef MACOS_DYLD_INTERPOSE @@ -3421,13 +3335,7 @@ static int apple_clock_gettime(clockid_t clk_id, struct timespec *tp) mach_timespec_t cur_timeclockid_t; (void) clk_id; /* unused */ - if (NULL == real_clock_get_time) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original clock_get_time() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(clock_get_time)) return -1; DONT_FAKE_TIME(result = (*real_clock_get_time)(clock_serv_real, &cur_timeclockid_t)); tp->tv_sec = cur_timeclockid_t.tv_sec; @@ -3477,13 +3385,7 @@ int __gettimeofday(struct timeval *tv, void *tz) } /* Check whether we've got a pointer to the real ftime() function yet */ - if (NULL == real___gettimeofday) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original __gettimeofday() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(__gettimeofday)) return -1; /* initialize our result with the real current time */ DONT_FAKE_TIME(result = (*real___gettimeofday)(tv, tz)); @@ -3506,13 +3408,7 @@ int __clock_gettime(clockid_t clk_id, struct timespec *tp) return -1; } - if (NULL == real___clock_gettime) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original __clock_gettime() not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(__clock_gettime)) return -1; /* initialize our result with the real current time */ DONT_FAKE_TIME(result = (*real___clock_gettime)(clk_id, tp)); @@ -3564,13 +3460,7 @@ int __ftime(struct timeb *tb) return 0; /* ftime() always returns 0, see manpage */ /* Check whether we've got a pointer to the real ftime() function yet */ - if (NULL == real___ftime) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original ftime() not found.\n"); -#endif - return 0; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(__ftime)) return 0; /* initialize our TZ result with the real current time */ DONT_FAKE_TIME(result = (*real___ftime)(tb)); @@ -3638,13 +3528,7 @@ int pthread_cond_init_232(pthread_cond_t *restrict cond, const pthread_condattr_ { ftpl_init(); } - if (NULL == real_pthread_cond_init_232) - { /* dlsym() failed */ -#ifdef DEBUG - (void) fprintf(stderr, "faketime problem: original pthread_cond_init (@@GLIBC_2.3.2, fallback) not found.\n"); -#endif - return -1; /* propagate error to caller */ - } + if (!CHECK_MISSING_REAL(pthread_cond_init_232)) return -1; result = real_pthread_cond_init_232(cond, attr); if (result != 0 || attr == NULL) |