da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset explicit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chiniff TV
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincat{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * high resolution Tv_t interface definitions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #include <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TV_NSEC_IGNORE (1000000000L)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define TV_TOUCH_RETAIN ((Tv_t*)1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typedef struct Tv_s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin uint32_t tv_sec;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin uint32_t tv_nsec;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } Tv_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif mem stat.st_mtimespec.tv_nsec sys/stat.h {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_GET(st) ((st)->st_atimespec.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctimespec.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtimespec.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelif mem stat.st_mtim.st__tim.tv_nsec sys/stat.h {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_GET(st) ((st)->st_atim.st__tim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctim.st__tim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtim.st__tim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelif mem stat.st_mtim.tv_nsec sys/stat.h {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_GET(st) ((st)->st_atim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtim.tv_nsec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelif mem stat.st_mtimensec sys/stat.h {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_GET(st) ((st)->st_atimensec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_GET(st) ((st)->st_ctimensec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_GET(st) ((st)->st_mtimensec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinelse pass{ no_stat_nsec=1 }end {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_GET(st) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_GET(st) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_GET(st) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_SET(st,n) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_SET(st,n) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_SET(st,n) 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinendif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( !no_stat_nsec ) {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_ATIME_NSEC_SET(st,n) (ST_ATIME_NSEC_GET(st)=(n))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_CTIME_NSEC_SET(st,n) (ST_CTIME_NSEC_GET(st)=(n))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define ST_MTIME_NSEC_SET(st,n) (ST_MTIME_NSEC_GET(st)=(n))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinendif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincat{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvgetatime(t,s) ((t)->tv_nsec=ST_ATIME_NSEC_GET(s),(t)->tv_sec=(s)->st_atime)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvgetmtime(t,s) ((t)->tv_nsec=ST_MTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_mtime)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvgetctime(t,s) ((t)->tv_nsec=ST_CTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_ctime)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvsetatime(t,s) (ST_ATIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_atime=(t)->tv_sec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvsetmtime(t,s) (ST_MTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_mtime=(t)->tv_sec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define tvsetctime(t,s) (ST_CTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_ctime=(t)->tv_sec)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _BLD_ast && defined(__EXPORT__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #define extern __EXPORT__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tvgettime(Tv_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tvsettime(const Tv_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tvcmp(const Tv_t*, const Tv_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tvtouch(const char*, const Tv_t*, const Tv_t*, const Tv_t*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int tvsleep(const Tv_t*, Tv_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern char* fmttv(const char*, Tv_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}end