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