Advertisement
Guest User

Untitled

a guest
Mar 15th, 2011
2,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <sys/time.h>
  4. #include <dlfcn.h>
  5. #include <stdio.h>
  6.  
  7. static timeval * timezero = 0;
  8.  
  9. typedef int (*go)(timeval *tv, timezone *tz);
  10.  
  11. extern "C" int gettimeofday(timeval *tv, timezone *tz)
  12. {
  13.     // Testing purposes:
  14.     go gettimeofday_orig;
  15.     int val;
  16.     gettimeofday_orig=(go)dlsym(RTLD_NEXT,"gettimeofday");
  17.     if (!timezero)
  18.     {
  19.         timezero = new timeval;
  20.         val = gettimeofday_orig(timezero,tz);
  21.         (*tv) = (*timezero);
  22.         return val;
  23.     }
  24.     // Multiply speed:
  25.     int M = 1;
  26.     // Divide speed:
  27.     int N = 2;
  28.     // That means 1/2 speed;
  29.  
  30.     val = gettimeofday_orig(tv,tz);
  31.     // Multiply the seconds:
  32.     tv->tv_sec = M*tv->tv_sec - M*timezero->tv_sec + N*timezero->tv_sec;
  33.     // Multiply the microseconds:
  34.     tv->tv_usec = M*tv->tv_usec - M*timezero->tv_usec + N*timezero->tv_usec;
  35.     // Add the modulus of seconds to microseconds:
  36.     tv->tv_usec += ((tv->tv_sec % N) * 1000000);
  37.     tv->tv_sec /= N;
  38.     tv->tv_usec /= N;
  39.     while(tv->tv_usec >= 1000000)
  40.     {
  41.         tv->tv_usec -= 1000000;
  42.         tv->tv_sec += 1;
  43.     }
  44.     while(tv->tv_usec < 0)
  45.     {
  46.         tv->tv_usec += 1000000;
  47.         tv->tv_sec -= 1;
  48.     }
  49.     return val;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement