xref: /onnv-gate/usr/src/lib/libast/common/features/tv (revision 4887:feebf9260c2e)
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