From 0071b97958b48fff4fa629876f92790ab3511f7e Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Mon, 5 Jun 2017 05:43:26 +0200 Subject: [PATCH] Import for some of its macros Fixes: https://bugs.freedesktop.org/94320 --- COPYING | 38 ++++++++- include/Makefile.am | 1 + include/bsd/sys/time.h | 138 ++++++++++++++++++++++++++++++ man/Makefile.am | 13 +++ man/TIMESPEC_TO_TIMEVAL.3bsd | 1 + man/TIMEVAL_TO_TIMESPEC.3bsd | 1 + man/libbsd.7 | 3 + man/timeradd.3bsd | 159 +++++++++++++++++++++++++++++++++++ man/timerclear.3bsd | 1 + man/timercmp.3bsd | 1 + man/timerisset.3bsd | 1 + man/timersub.3bsd | 1 + man/timespecadd.3bsd | 1 + man/timespecclear.3bsd | 1 + man/timespeccmp.3bsd | 1 + man/timespecisset.3bsd | 1 + man/timespecsub.3bsd | 1 + man/timeval.3bsd | 133 +++++++++++++++++++++++++++++ 18 files changed, 495 insertions(+), 1 deletion(-) create mode 100644 include/bsd/sys/time.h create mode 100644 man/TIMESPEC_TO_TIMEVAL.3bsd create mode 100644 man/TIMEVAL_TO_TIMESPEC.3bsd create mode 100644 man/timeradd.3bsd create mode 100644 man/timerclear.3bsd create mode 100644 man/timercmp.3bsd create mode 100644 man/timerisset.3bsd create mode 100644 man/timersub.3bsd create mode 100644 man/timespecadd.3bsd create mode 100644 man/timespecclear.3bsd create mode 100644 man/timespeccmp.3bsd create mode 100644 man/timespecisset.3bsd create mode 100644 man/timespecsub.3bsd create mode 100644 man/timeval.3bsd diff --git a/COPYING b/COPYING index 5b1e8c3..9ffc6b4 100644 --- a/COPYING +++ b/COPYING @@ -90,6 +90,7 @@ Files: include/bsd/netinet/ip_icmp.h include/bsd/sys/bitstring.h include/bsd/sys/queue.h + include/bsd/sys/time.h include/bsd/timeconv.h include/bsd/vis.h man/bitstring.3bsd @@ -208,6 +209,37 @@ License: BSD-3-clause-Peter-Wemm OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Files: + man/timeradd.3bsd +Copyright: + Copyright © 2009 Jukka Ruohonen + Copyright © 1999 Kelly Yancey + All rights reserved. +License: BSD-3-clause-John-Birrell + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the author nor the names of any co-contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + Files: man/setproctitle.3bsd Copyright: @@ -235,11 +267,12 @@ Files: man/fmtcheck.3bsd man/humanize_number.3bsd man/stringlist.3bsd + man/timeval.3bsd src/fmtcheck.c src/humanize_number.c src/stringlist.c Copyright: - Copyright © 1994, 1997-2000, 2002, 2008 The NetBSD Foundation, Inc. + Copyright © 1994, 1997-2000, 2002, 2008, 2010 The NetBSD Foundation, Inc. All rights reserved. . Some code was contributed to The NetBSD Foundation by Allen Briggs. @@ -256,6 +289,9 @@ Copyright: . Some code is derived from software contributed to The NetBSD Foundation by Christos Zoulas. + . + Some code is derived from software contributed to The NetBSD Foundation + by Jukka Ruohonen. License: BSD-2-clause-NetBSD Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/include/Makefile.am b/include/Makefile.am index b8140d9..6c74b44 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -6,6 +6,7 @@ nobase_include_HEADERS = \ bsd/sys/endian.h \ bsd/sys/poll.h \ bsd/sys/queue.h \ + bsd/sys/time.h \ bsd/sys/tree.h \ bsd/netinet/ip_icmp.h \ bsd/bitstring.h \ diff --git a/include/bsd/sys/time.h b/include/bsd/sys/time.h new file mode 100644 index 0000000..0aaf0e2 --- /dev/null +++ b/include/bsd/sys/time.h @@ -0,0 +1,138 @@ +/* $OpenBSD: time.h,v 1.36 2016/09/12 19:41:20 guenther Exp $ */ +/* $NetBSD: time.h,v 1.18 1996/04/23 10:29:33 mycroft Exp $ */ + +/* + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)time.h 8.2 (Berkeley) 7/10/94 + */ + +#ifdef LIBBSD_OVERLAY +#include_next +#else +#include +#endif + +#ifndef LIBBSD_SYS_TIME_H +#define LIBBSD_SYS_TIME_H + +#ifndef TIMEVAL_TO_TIMESPEC +#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ + (ts)->tv_sec = (tv)->tv_sec; \ + (ts)->tv_nsec = (tv)->tv_usec * 1000; \ +} +#endif + +#ifndef TIMESPEC_TO_TIMEVAL +#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ + (tv)->tv_sec = (ts)->tv_sec; \ + (tv)->tv_usec = (ts)->tv_nsec / 1000; \ +} +#endif + +/* Operations on timevals. */ +#ifndef timerclear +#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 +#endif + +#ifndef timerisset +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#endif + +#ifndef timercmp +#define timercmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec == (uvp)->tv_sec) ? \ + ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ + ((tvp)->tv_sec cmp (uvp)->tv_sec)) +#endif + +#ifndef timeradd +#define timeradd(tvp, uvp, vvp) \ + do { \ + (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ + (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ + if ((vvp)->tv_usec >= 1000000) { \ + (vvp)->tv_sec++; \ + (vvp)->tv_usec -= 1000000; \ + } \ + } while (0) +#endif + +#ifndef timersub +#define timersub(tvp, uvp, vvp) \ + do { \ + (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ + (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ + if ((vvp)->tv_usec < 0) { \ + (vvp)->tv_sec--; \ + (vvp)->tv_usec += 1000000; \ + } \ + } while (0) +#endif + +/* Operations on timespecs. */ +#ifndef timespecclear +#define timespecclear(tsp) (tsp)->tv_sec = (tsp)->tv_nsec = 0 +#endif + +#ifndef timespecisset +#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec) +#endif + +#ifndef timespeccmp +#define timespeccmp(tsp, usp, cmp) \ + (((tsp)->tv_sec == (usp)->tv_sec) ? \ + ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ + ((tsp)->tv_sec cmp (usp)->tv_sec)) +#endif + +#ifndef timespecadd +#define timespecadd(tsp, usp, vsp) \ + do { \ + (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \ + (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \ + if ((vsp)->tv_nsec >= 1000000000L) { \ + (vsp)->tv_sec++; \ + (vsp)->tv_nsec -= 1000000000L; \ + } \ + } while (0) +#endif + +#ifndef timespecsub +#define timespecsub(tsp, usp, vsp) \ + do { \ + (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ + (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ + if ((vsp)->tv_nsec < 0) { \ + (vsp)->tv_sec--; \ + (vsp)->tv_nsec += 1000000000L; \ + } \ + } while (0) +#endif + +#endif diff --git a/man/Makefile.am b/man/Makefile.am index 92da18d..fe0c335 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -132,6 +132,8 @@ dist_man_MANS = \ TAILQ_PREV.3bsd \ TAILQ_REMOVE.3bsd \ TAILQ_SWAP.3bsd \ + TIMESPEC_TO_TIMEVAL.3bsd \ + TIMEVAL_TO_TIMESPEC.3bsd \ arc4random.3bsd \ arc4random_addrandom.3bsd \ arc4random_buf.3bsd \ @@ -213,6 +215,17 @@ dist_man_MANS = \ strunvis.3bsd \ strvis.3bsd \ strvisx.3bsd \ + timeradd.3bsd \ + timerclear.3bsd \ + timercmp.3bsd \ + timerisset.3bsd \ + timersub.3bsd \ + timespecadd.3bsd \ + timespecclear.3bsd \ + timespeccmp.3bsd \ + timespecisset.3bsd \ + timespecsub.3bsd \ + timeval.3bsd \ tree.3bsd \ unvis.3bsd \ vis.3bsd \ diff --git a/man/TIMESPEC_TO_TIMEVAL.3bsd b/man/TIMESPEC_TO_TIMEVAL.3bsd new file mode 100644 index 0000000..e47176e --- /dev/null +++ b/man/TIMESPEC_TO_TIMEVAL.3bsd @@ -0,0 +1 @@ +.so man3/timeval.3bsd diff --git a/man/TIMEVAL_TO_TIMESPEC.3bsd b/man/TIMEVAL_TO_TIMESPEC.3bsd new file mode 100644 index 0000000..e47176e --- /dev/null +++ b/man/TIMEVAL_TO_TIMESPEC.3bsd @@ -0,0 +1 @@ +.so man3/timeval.3bsd diff --git a/man/libbsd.7 b/man/libbsd.7 index 216bc01..19af0aa 100644 --- a/man/libbsd.7 +++ b/man/libbsd.7 @@ -108,6 +108,7 @@ be prefixed with .It In sys/endian.h .It In sys/poll.h .It In sys/queue.h +.It In sys/time.h .It In sys/tree.h .It In timeconv.h .It In unistd.h @@ -191,6 +192,8 @@ might disappear on the next SONAME bump. .Xr strmode 3bsd , .Xr strnstr 3bsd , .Xr strtonum 3bsd , +.Xr timeradd 3bsd , +.Xr timeval 3bsd , .Xr tree 3bsd , .Xr unvis 3bsd , .Xr vis 3bsd , diff --git a/man/timeradd.3bsd b/man/timeradd.3bsd new file mode 100644 index 0000000..df821de --- /dev/null +++ b/man/timeradd.3bsd @@ -0,0 +1,159 @@ +.\" $NetBSD: timeradd.3,v 1.8 2010/06/07 18:40:16 jruoho Exp $ +.\" +.\" Copyright (c) 2009 Jukka Ruohonen +.\" Copyright (c) 1999 Kelly Yancey +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the author nor the names of any co-contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD: src/share/man/man3/timeradd.3,v 1.3 2003/09/08 19:57:19 ru Exp $ +.\" +.Dd June 7, 2010 +.Dt TIMERADD 3 +.Os +.Sh NAME +.Nm timeradd , +.Nm timersub , +.Nm timerclear , +.Nm timerisset , +.Nm timercmp , +.Nm timespecadd , +.Nm timespecsub , +.Nm timespecclear , +.Nm timespecisset , +.Nm timespeccmp +.Nd operations on time structure +.Sh LIBRARY +.ds str-Lb-libbsd Utility functions from BSD systems (libbsd, \-lbsd) +.Lb libbsd +.Sh SYNOPSIS +.In sys/time.h +(See +.Xr libbsd 7 +for include usage.) +.Ft void +.Fn timeradd "struct timeval *a" "struct timeval *b" "struct timeval *res" +.Ft void +.Fn timersub "struct timeval *a" "struct timeval *b" "struct timeval *res" +.Ft void +.Fn timerclear "struct timeval *tv" +.Ft int +.Fn timerisset "struct timeval *tv" +.Ft int +.Fn timercmp "struct timeval *a" "struct timeval *b" CMP +.Ft void +.Fn timespecadd "struct timespec *a" \ +"struct timespec *b" "struct timespec *res" +.Ft void +.Fn timespecsub "struct timespec *a" \ +"struct timespec *b" "struct timespec *res" +.Ft void +.Fn timespecclear "struct timespec *ts" +.Ft int +.Fn timespecisset "struct timespec *ts" +.Ft int +.Fn timespeccmp "struct timespec *a" "struct timespec b" CMP +.Sh DESCRIPTION +These macros are provided for manipulating the +.Fa timeval +and +.Fa timespec +structures described in +.Xr timeval 3 . +.Pp +The +.Fn timeradd +and +.Fn timespecadd +macros add the time information stored in +.Fa a +to +.Fa b , +storing the result in +.Fa res . +With +.Fn timeradd +the results are simplified such that the value of +.Fa res->tv_usec +is always less than 1,000,000 (1 second). +With +.Fn timespecadd +the +.Fa res->tv_nsec +member of +.Fa struct timespec +is always less than 1,000,000,000. +.Pp +The +.Fn timersub +and +.Fn timespecsub +macros subtract the time information stored in +.Fa b +from +.Fa a +and store the resulting structure +in +.Fa res . +.Pp +The +.Fn timerclear +and +.Fn timespecclear +macros initialize the structures +to midnight (0 hour) January 1st, 1970 (the Epoch). +In other words, they set the members of the structure to zero. +.Pp +The +.Fn timerisset +and +.Fn timespecisset +macros return true if the input structure +is set to any time value other than the Epoch. +.Pp +The +.Fn timercmp +and +.Fn timespeccmp +macros compare +.Fa a +to +.Fa b +using the comparison operator given in +.Fa CMP . +The result of the comparison is returned. +.Sh SEE ALSO +.Xr timeval 3 +.Sh HISTORY +The +.Fn timeradd +family of macros first appeared in +.Nx 1.1 . +These were later ported to +.Fx 2.2.6 . +The +.Fn timespec +family of macros first appeared in +.Nx 1.2 . diff --git a/man/timerclear.3bsd b/man/timerclear.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timerclear.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timercmp.3bsd b/man/timercmp.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timercmp.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timerisset.3bsd b/man/timerisset.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timerisset.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timersub.3bsd b/man/timersub.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timersub.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timespecadd.3bsd b/man/timespecadd.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timespecadd.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timespecclear.3bsd b/man/timespecclear.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timespecclear.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timespeccmp.3bsd b/man/timespeccmp.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timespeccmp.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timespecisset.3bsd b/man/timespecisset.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timespecisset.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timespecsub.3bsd b/man/timespecsub.3bsd new file mode 100644 index 0000000..9ac4e5c --- /dev/null +++ b/man/timespecsub.3bsd @@ -0,0 +1 @@ +.so man3/timeradd.3bsd diff --git a/man/timeval.3bsd b/man/timeval.3bsd new file mode 100644 index 0000000..8f0e3aa --- /dev/null +++ b/man/timeval.3bsd @@ -0,0 +1,133 @@ +.\" $NetBSD: timeval.3,v 1.12 2011/04/12 08:39:26 jruoho Exp $ +.\" +.\" Copyright (c) 2010 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Jukka Ruohonen. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 12, 2011 +.Dt TIMEVAL 3 +.Os +.Sh NAME +.Nm timeval , +.Nm timespec +.Nd time structures +.Sh LIBRARY +.ds str-Lb-libbsd Utility functions from BSD systems (libbsd, \-lbsd) +.Lb libbsd +.Sh SYNOPSIS +.In sys/time.h +(See +.Xr libbsd 7 +for include usage.) +.Ft void +.Fn TIMEVAL_TO_TIMESPEC "struct timeval *tv" "struct timespec *ts" +.Ft void +.Fn TIMESPEC_TO_TIMEVAL "struct timeval *tv" "struct timespec *ts" +.Sh DESCRIPTION +The +.In sys/time.h +header, included by +.In time.h , +defines various structures related to time and timers. +.Bl -enum -offset 1n +.It +The following structure is used by +.Xr gettimeofday 2 , +among others: +.Bd -literal -offset indent +struct timeval { + time_t tv_sec; + suseconds_t tv_usec; +}; +.Ed +.Pp +The +.Va tv_sec +member represents the elapsed time, in whole seconds. +The +.Va tv_usec +member captures rest of the elapsed time, +represented as the number of microseconds. +.It +The following structure is used by +.Xr nanosleep 2 , +among others: +.Bd -literal -offset indent +struct timespec { + time_t tv_sec; + long tv_nsec; +}; +.Ed +.Pp +The +.Va tv_sec +member is again the elapsed time in whole seconds. +The +.Va tv_nsec +member represents the rest of the elapsed time in nanoseconds. +.Pp +A microsecond is equal to one millionth of a second, +1000 nanoseconds, or 1/1000 milliseconds. +To ease the conversions, the macros +.Fn TIMEVAL_TO_TIMESPEC +and +.Fn TIMESPEC_TO_TIMEVAL +can be used to convert between +.Em struct timeval +and +.Em struct timespec . +.El +.Sh EXAMPLES +It can be stressed that the traditional +.Tn UNIX +.Va timeval +and +.Va timespec +structures represent elapsed time, measured by the system clock. +The following sketch implements a function suitable +for use in a context where the +.Va timespec +structure is required for a conditional timeout: +.Bd -literal -offset indent +static void +example(struct timespec *spec, time_t minutes) +{ + struct timeval elapsed; + + (void)gettimeofday(&elapsed, NULL); + + _DIAGASSERT(spec != NULL); + TIMEVAL_TO_TIMESPEC(&elapsed, spec); + + /* Add the offset for timeout in minutes. */ + spec->tv_sec = spec->tv_sec + minutes * 60; +} +.Ed +.Pp +A better alternative would use the more precise +.Xr clock_gettime 2 . +.Sh SEE ALSO +.Xr timeradd 3