10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan/***********************************************************************
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* This software is part of the ast package *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Copyright (c) 1985-2011 AT&T Intellectual Property *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* and is licensed under the *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Common Public License, Version 1.0 *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* by AT&T Intellectual Property *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* A copy of the License is available at *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* http://www.opensource.org/licenses/cpl1.0.txt *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Information and Software Systems Research *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* AT&T Research *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Florham Park NJ *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Glenn Fowler <gsf@research.att.com> *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* David Korn <dgk@research.att.com> *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* Phong Vo <kpv@research.att.com> *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan* *
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan***********************************************************************/
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#pragma prototyped
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
9cd928fe5e3ea4e05f64cfb380beb54b2623e7dcAlan Maguire#include <tv.h>
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#include <tm.h>
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#include <errno.h>
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
9cd928fe5e3ea4e05f64cfb380beb54b2623e7dcAlan Maguire#include "FEATURE/tvlib"
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendanint
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendantvsettime(const Tv_t* tv)
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan{
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#if _lib_clock_settime && defined(CLOCK_REALTIME)
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan struct timespec s;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan s.tv_sec = tv->tv_sec;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan s.tv_nsec = tv->tv_nsec;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan return clock_settime(CLOCK_REALTIME, &s);
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#else
9cd928fe5e3ea4e05f64cfb380beb54b2623e7dcAlan Maguire
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#if defined(tmsettimeofday)
9cd928fe5e3ea4e05f64cfb380beb54b2623e7dcAlan Maguire
9cd928fe5e3ea4e05f64cfb380beb54b2623e7dcAlan Maguire struct timeval v;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan v.tv_sec = tv->tv_sec;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan v.tv_usec = tv->tv_nsec / 1000;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan return tmsettimeofday(&v);
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#else
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#if _lib_stime
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan static time_t s;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan s = tv->tv_sec + (tv->tv_nsec != 0);
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan return stime(s);
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#else
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan errno = EPERM;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan return -1;
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#endif
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#endif
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan#endif
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan}
10e6dadfe63181edabc58c8f42e3c56a1cd9ec95brendan