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