xref: /titanic_41/usr/src/lib/libast/common/features/tv (revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968)
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