xref: /titanic_51/usr/src/lib/libast/common/tm/tvgettime.c (revision 356f72340a69936724c69f2f87fffa6f5887f885)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                  Common Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *            http://www.opensource.org/licenses/cpl1.0.txt             *
11 *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 #pragma prototyped
23 
24 #include <tv.h>
25 #include <tm.h>
26 
27 #include "FEATURE/tvlib"
28 
29 int
30 tvgettime(Tv_t* tv)
31 {
32 
33 #if _lib_clock_gettime && defined(CLOCK_REALTIME)
34 
35 	struct timespec			s;
36 
37 	clock_gettime(CLOCK_REALTIME, &s);
38 	tv->tv_sec = s.tv_sec;
39 	tv->tv_nsec = s.tv_nsec;
40 
41 #else
42 
43 #if defined(tmgettimeofday)
44 
45 	struct timeval			v;
46 
47 	tmgettimeofday(&v);
48 	tv->tv_sec = v.tv_sec;
49 	tv->tv_nsec = v.tv_usec * 1000;
50 
51 #else
52 
53 	static time_t			s;
54 	static uint32_t			n;
55 
56 	if ((tv->tv_sec = time(NiL)) != s)
57 	{
58 		s = tv->tv_sec;
59 		n = 0;
60 	}
61 	else
62 		n += 1000;
63 	tv->tv_nsec = n;
64 
65 #endif
66 
67 #endif
68 
69 	return 0;
70 }
71