/* Time Warp Test (C) 2006 Herbert Pötzl */ #include #include #include #include #if defined(RTLD_NEXT) #define REAL_LIBC RTLD_NEXT #else #define REAL_LIBC ((void *) -1L) #endif #define TIME_OFFSET 66 #define TIME_FACTOR 2 static inline long __offset(long now) { static long offset = 0; if (!offset) offset = now / TIME_FACTOR + TIME_OFFSET; return offset; } time_t time(time_t *t) { static time_t (*__time)(time_t *) = 0; time_t ret; if (!__time) __time = (time_t (*)(time_t *))dlsym(REAL_LIBC, "time"); ret = __time(NULL); ret -= __offset(ret); ret *= TIME_FACTOR; if (t) *t = ret; return ret; } int gettimeofday(struct timeval *tv, struct timezone *tz) { static int (*__gettimeofday)(struct timeval *, struct timezone *) = 0; int ret; if (!__gettimeofday) { __gettimeofday = (int (*)(struct timeval *, struct timezone *))dlsym(REAL_LIBC, "gettimeofday"); } ret = __gettimeofday(tv, tz); tv->tv_sec -= __offset(tv->tv_sec); tv->tv_sec *= TIME_FACTOR; // tv->tv_usec *= TIME_FACTOR; return ret; }