10 typedef int (*gettimeofday_func_t)(struct timeval *tv, struct timezone *tz);
11 static gettimeofday_func_t gettimeofday_orig;
13 typedef time_t (*time_func_t)(time_t *t);
14 static time_func_t time_orig;
16 typedef int (*ftime_func_t)(struct timeb *tp);
17 static ftime_func_t ftime_orig;
19 static time_t wayback=0;
23 static pthread_mutex_t inside_mutex=PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
25 static void enter(void)
31 if (pthread_mutex_lock(&inside_mutex)) {
32 fprintf(stderr,"libwayback: 'inside_mutex' lock fail!\n");
36 fprintf(stderr,"libwayback: 'inside' sanity fail!\n");
40 fprintf(stderr,"libwayback: looping!\n");
49 if ((wayback_s=getenv("WAYBACK")))
50 wayback=atol(wayback_s);
52 libc_handle=dlopen("/lib/libc.so.6",RTLD_LAZY); /* RTLD_LAZY is mandatory */
53 gettimeofday_orig=(gettimeofday_func_t)dlsym(libc_handle,"gettimeofday");
54 time_orig=(time_func_t)dlsym(libc_handle,"time");
55 ftime_orig=(ftime_func_t)dlsym(libc_handle,"ftime");
58 static void leave(void)
61 fprintf(stderr,"libwayback: 'inside' sanity fail!\n");
65 if (pthread_mutex_unlock(&inside_mutex)) {
66 fprintf(stderr,"libwayback: 'inside_mutex' unlock fail!\n");
72 int gettimeofday(struct timeval *tv, struct timezone *tz)
78 r=(*gettimeofday_orig)(tv,tz);
88 time_t time(time_t *t)
104 int ftime(struct timeb *tp)