1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5*                      and is licensed under the                       *
6*                 Eclipse Public License, Version 1.0                  *
7*                    by AT&T Intellectual Property                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*          http://www.eclipse.org/org/documents/epl-v10.html           *
11*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
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
29int
30tvgettime(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