1*da2e3ebdSchinset prototyped 2*da2e3ebdSchinset explicit 3*da2e3ebdSchiniff TV 4*da2e3ebdSchin 5*da2e3ebdSchincat{ 6*da2e3ebdSchin /* 7*da2e3ebdSchin * AT&T Research 8*da2e3ebdSchin * 9*da2e3ebdSchin * high resolution Tv_t interface definitions 10*da2e3ebdSchin */ 11*da2e3ebdSchin 12*da2e3ebdSchin #include <ast.h> 13*da2e3ebdSchin 14*da2e3ebdSchin #define TV_NSEC_IGNORE (1000000000L) 15*da2e3ebdSchin #define TV_TOUCH_RETAIN ((Tv_t*)1) 16*da2e3ebdSchin 17*da2e3ebdSchin typedef struct Tv_s 18*da2e3ebdSchin { 19*da2e3ebdSchin uint32_t tv_sec; 20*da2e3ebdSchin uint32_t tv_nsec; 21*da2e3ebdSchin } Tv_t; 22*da2e3ebdSchin}end 23*da2e3ebdSchin 24*da2e3ebdSchinif mem stat.st_mtimespec.tv_nsec sys/stat.h { 25*da2e3ebdSchin #define ST_ATIME_NSEC_GET(st) ((st)->st_atimespec.tv_nsec) 26*da2e3ebdSchin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctimespec.tv_nsec) 27*da2e3ebdSchin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtimespec.tv_nsec) 28*da2e3ebdSchin} 29*da2e3ebdSchinelif mem stat.st_mtim.st__tim.tv_nsec sys/stat.h { 30*da2e3ebdSchin #define ST_ATIME_NSEC_GET(st) ((st)->st_atim.st__tim.tv_nsec) 31*da2e3ebdSchin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctim.st__tim.tv_nsec) 32*da2e3ebdSchin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtim.st__tim.tv_nsec) 33*da2e3ebdSchin} 34*da2e3ebdSchinelif mem stat.st_mtim.tv_nsec sys/stat.h { 35*da2e3ebdSchin #define ST_ATIME_NSEC_GET(st) ((st)->st_atim.tv_nsec) 36*da2e3ebdSchin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctim.tv_nsec) 37*da2e3ebdSchin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtim.tv_nsec) 38*da2e3ebdSchin} 39*da2e3ebdSchinelif mem stat.st_mtimensec sys/stat.h { 40*da2e3ebdSchin #define ST_ATIME_NSEC_GET(st) ((st)->st_atimensec) 41*da2e3ebdSchin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctimensec) 42*da2e3ebdSchin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtimensec) 43*da2e3ebdSchin} 44*da2e3ebdSchinelse pass{ no_stat_nsec=1 }end { 45*da2e3ebdSchin #define ST_ATIME_NSEC_GET(st) 0 46*da2e3ebdSchin #define ST_CTIME_NSEC_GET(st) 0 47*da2e3ebdSchin #define ST_MTIME_NSEC_GET(st) 0 48*da2e3ebdSchin 49*da2e3ebdSchin #define ST_ATIME_NSEC_SET(st,n) 0 50*da2e3ebdSchin #define ST_CTIME_NSEC_SET(st,n) 0 51*da2e3ebdSchin #define ST_MTIME_NSEC_SET(st,n) 0 52*da2e3ebdSchin} 53*da2e3ebdSchinendif 54*da2e3ebdSchinif ( !no_stat_nsec ) { 55*da2e3ebdSchin #define ST_ATIME_NSEC_SET(st,n) (ST_ATIME_NSEC_GET(st)=(n)) 56*da2e3ebdSchin #define ST_CTIME_NSEC_SET(st,n) (ST_CTIME_NSEC_GET(st)=(n)) 57*da2e3ebdSchin #define ST_MTIME_NSEC_SET(st,n) (ST_MTIME_NSEC_GET(st)=(n)) 58*da2e3ebdSchin} 59*da2e3ebdSchinendif 60*da2e3ebdSchin 61*da2e3ebdSchincat{ 62*da2e3ebdSchin #define tvgetatime(t,s) ((t)->tv_nsec=ST_ATIME_NSEC_GET(s),(t)->tv_sec=(s)->st_atime) 63*da2e3ebdSchin #define tvgetmtime(t,s) ((t)->tv_nsec=ST_MTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_mtime) 64*da2e3ebdSchin #define tvgetctime(t,s) ((t)->tv_nsec=ST_CTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_ctime) 65*da2e3ebdSchin 66*da2e3ebdSchin #define tvsetatime(t,s) (ST_ATIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_atime=(t)->tv_sec) 67*da2e3ebdSchin #define tvsetmtime(t,s) (ST_MTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_mtime=(t)->tv_sec) 68*da2e3ebdSchin #define tvsetctime(t,s) (ST_CTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_ctime=(t)->tv_sec) 69*da2e3ebdSchin 70*da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__) 71*da2e3ebdSchin #define extern __EXPORT__ 72*da2e3ebdSchin #endif 73*da2e3ebdSchin 74*da2e3ebdSchin extern int tvgettime(Tv_t*); 75*da2e3ebdSchin extern int tvsettime(const Tv_t*); 76*da2e3ebdSchin extern int tvcmp(const Tv_t*, const Tv_t*); 77*da2e3ebdSchin extern int tvtouch(const char*, const Tv_t*, const Tv_t*, const Tv_t*, int); 78*da2e3ebdSchin extern int tvsleep(const Tv_t*, Tv_t*); 79*da2e3ebdSchin 80*da2e3ebdSchin extern char* fmttv(const char*, Tv_t*); 81*da2e3ebdSchin}end 82