1da2e3ebdSchin /*********************************************************************** 25947648bSMarcel Telka * * 35947648bSMarcel Telka * This software is part of the ast package * 45947648bSMarcel Telka * Copyright (c) 1985-2013 AT&T Intellectual Property * 55947648bSMarcel Telka * and is licensed under the * 65947648bSMarcel Telka * Eclipse Public License, Version 1.0 * 75947648bSMarcel Telka * by AT&T Intellectual Property * 85947648bSMarcel Telka * * 95947648bSMarcel Telka * A copy of the License is available at * 105947648bSMarcel Telka * http://www.eclipse.org/org/documents/epl-v10.html * 115947648bSMarcel Telka * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 125947648bSMarcel Telka * * 135947648bSMarcel Telka * Information and Software Systems Research * 145947648bSMarcel Telka * AT&T Research * 155947648bSMarcel Telka * Florham Park NJ * 165947648bSMarcel Telka * * 175947648bSMarcel Telka * Glenn Fowler <glenn.s.fowler@gmail.com> * 185947648bSMarcel Telka * David Korn <dgkorn@gmail.com> * 195947648bSMarcel Telka * Phong Vo <phongvo@gmail.com> * 205947648bSMarcel Telka * * 215947648bSMarcel Telka ***********************************************************************/ 225947648bSMarcel Telka 235947648bSMarcel Telka #include <errno.h> 245947648bSMarcel Telka #include <time.h> 255947648bSMarcel Telka 265947648bSMarcel Telka #include "tv.h" 27da2e3ebdSchin 28da2e3ebdSchin /* 29da2e3ebdSchin * sleep for tv 30da2e3ebdSchin * non-zero exit if sleep did not complete 31da2e3ebdSchin * with remaining time in rv 325947648bSMarcel Telka * 335947648bSMarcel Telka * NOTE: some systems hide nanosleep() ouside of -lc -- puleeze 34da2e3ebdSchin */ 35da2e3ebdSchin tvsleep(const Tv_t * tv,Tv_t * rv)365947648bSMarcel Telkaint tvsleep(const Tv_t *tv, Tv_t *rv) { 375947648bSMarcel Telka struct timespec stv; 385947648bSMarcel Telka struct timespec srv; 395947648bSMarcel Telka int r; 405947648bSMarcel Telka 415947648bSMarcel Telka stv.tv_sec = tv->tv_sec; 425947648bSMarcel Telka stv.tv_nsec = tv->tv_nsec; 435947648bSMarcel Telka if ((r = nanosleep(&stv, &srv)) && errno == EINTR && rv) { 445947648bSMarcel Telka rv->tv_sec = srv.tv_sec; 455947648bSMarcel Telka rv->tv_nsec = srv.tv_nsec; 465947648bSMarcel Telka } 475947648bSMarcel Telka return r; 48*b30d1939SAndy Fiddaman } 49