xref: /freebsd/contrib/sendmail/include/sm/time.h (revision 2fb4f839f3fc72ce2bab12f9ba4760f97f73e97f)
14e4196cbSGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro  * Copyright (c) 2005 Proofpoint, Inc. and its suppliers.
34e4196cbSGregory Neil Shapiro  *	All rights reserved.
44e4196cbSGregory Neil Shapiro  *
54e4196cbSGregory Neil Shapiro  * By using this file, you agree to the terms and conditions set
64e4196cbSGregory Neil Shapiro  * forth in the LICENSE file which can be found at the top level of
74e4196cbSGregory Neil Shapiro  * the sendmail distribution.
84e4196cbSGregory Neil Shapiro  *
9*4313cc83SGregory Neil Shapiro  *	$Id: time.h,v 1.2 2013-11-22 20:51:32 ca Exp $
104e4196cbSGregory Neil Shapiro  */
114e4196cbSGregory Neil Shapiro 
124e4196cbSGregory Neil Shapiro #ifndef SM_TIME_H
134e4196cbSGregory Neil Shapiro # define SM_TIME_H 1
144e4196cbSGregory Neil Shapiro 
154e4196cbSGregory Neil Shapiro # include <sm/config.h>
164e4196cbSGregory Neil Shapiro # include <sys/time.h>
174e4196cbSGregory Neil Shapiro 
184e4196cbSGregory Neil Shapiro /* should be defined in sys/time.h */
194e4196cbSGregory Neil Shapiro #ifndef timersub
204e4196cbSGregory Neil Shapiro # define timersub(tvp, uvp, vvp)					\
214e4196cbSGregory Neil Shapiro 	do								\
224e4196cbSGregory Neil Shapiro 	{								\
234e4196cbSGregory Neil Shapiro 		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
244e4196cbSGregory Neil Shapiro 		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
254e4196cbSGregory Neil Shapiro 		if ((vvp)->tv_usec < 0)					\
264e4196cbSGregory Neil Shapiro 		{							\
274e4196cbSGregory Neil Shapiro 			(vvp)->tv_sec--;				\
284e4196cbSGregory Neil Shapiro 			(vvp)->tv_usec += 1000000;			\
294e4196cbSGregory Neil Shapiro 		}							\
304e4196cbSGregory Neil Shapiro 	} while (0)
314e4196cbSGregory Neil Shapiro #endif /* !timersub */
324e4196cbSGregory Neil Shapiro 
334e4196cbSGregory Neil Shapiro #ifndef timeradd
344e4196cbSGregory Neil Shapiro # define timeradd(tvp, uvp, vvp)					\
354e4196cbSGregory Neil Shapiro 	do								\
364e4196cbSGregory Neil Shapiro 	{								\
374e4196cbSGregory Neil Shapiro 		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
384e4196cbSGregory Neil Shapiro 		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
394e4196cbSGregory Neil Shapiro 		if ((vvp)->tv_usec >= 1000000)				\
404e4196cbSGregory Neil Shapiro 		{							\
414e4196cbSGregory Neil Shapiro 			(vvp)->tv_sec++;				\
424e4196cbSGregory Neil Shapiro 			(vvp)->tv_usec -= 1000000;			\
434e4196cbSGregory Neil Shapiro 		}							\
444e4196cbSGregory Neil Shapiro 	} while (0)
454e4196cbSGregory Neil Shapiro #endif /* !timeradd */
464e4196cbSGregory Neil Shapiro 
474e4196cbSGregory Neil Shapiro #ifndef timercmp
484e4196cbSGregory Neil Shapiro # define timercmp(tvp, uvp, cmp)					\
494e4196cbSGregory Neil Shapiro 	(((tvp)->tv_sec == (uvp)->tv_sec) ?				\
504e4196cbSGregory Neil Shapiro 	    ((tvp)->tv_usec cmp (uvp)->tv_usec) :			\
514e4196cbSGregory Neil Shapiro 	    ((tvp)->tv_sec cmp (uvp)->tv_sec))
524e4196cbSGregory Neil Shapiro #endif /* !timercmp */
534e4196cbSGregory Neil Shapiro 
544e4196cbSGregory Neil Shapiro #endif /* ! SM_TIME_H */
55