1157001Sgshapiro/*
2261363Sgshapiro * Copyright (c) 2005 Proofpoint, Inc. and its suppliers.
3157001Sgshapiro *	All rights reserved.
4157001Sgshapiro *
5157001Sgshapiro * By using this file, you agree to the terms and conditions set
6157001Sgshapiro * forth in the LICENSE file which can be found at the top level of
7157001Sgshapiro * the sendmail distribution.
8157001Sgshapiro *
9266692Sgshapiro *	$Id: time.h,v 1.2 2013-11-22 20:51:32 ca Exp $
10157001Sgshapiro */
11157001Sgshapiro
12157001Sgshapiro#ifndef SM_TIME_H
13157001Sgshapiro# define SM_TIME_H 1
14157001Sgshapiro
15157001Sgshapiro# include <sm/config.h>
16157001Sgshapiro
17157001Sgshapiro# include <sys/time.h>
18157001Sgshapiro
19157001Sgshapiro/* should be defined in sys/time.h */
20157001Sgshapiro#ifndef timersub
21157001Sgshapiro# define timersub(tvp, uvp, vvp)					\
22157001Sgshapiro	do								\
23157001Sgshapiro	{								\
24157001Sgshapiro		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
25157001Sgshapiro		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
26157001Sgshapiro		if ((vvp)->tv_usec < 0)					\
27157001Sgshapiro		{							\
28157001Sgshapiro			(vvp)->tv_sec--;				\
29157001Sgshapiro			(vvp)->tv_usec += 1000000;			\
30157001Sgshapiro		}							\
31157001Sgshapiro	} while (0)
32157001Sgshapiro#endif /* !timersub */
33157001Sgshapiro
34157001Sgshapiro#ifndef timeradd
35157001Sgshapiro# define timeradd(tvp, uvp, vvp)					\
36157001Sgshapiro	do								\
37157001Sgshapiro	{								\
38157001Sgshapiro		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
39157001Sgshapiro		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
40157001Sgshapiro		if ((vvp)->tv_usec >= 1000000)				\
41157001Sgshapiro		{							\
42157001Sgshapiro			(vvp)->tv_sec++;				\
43157001Sgshapiro			(vvp)->tv_usec -= 1000000;			\
44157001Sgshapiro		}							\
45157001Sgshapiro	} while (0)
46157001Sgshapiro#endif /* !timeradd */
47157001Sgshapiro
48157001Sgshapiro#ifndef timercmp
49157001Sgshapiro# define timercmp(tvp, uvp, cmp)					\
50157001Sgshapiro	(((tvp)->tv_sec == (uvp)->tv_sec) ?				\
51157001Sgshapiro	    ((tvp)->tv_usec cmp (uvp)->tv_usec) :			\
52157001Sgshapiro	    ((tvp)->tv_sec cmp (uvp)->tv_sec))
53157001Sgshapiro#endif /* !timercmp */
54157001Sgshapiro
55157001Sgshapiro
56157001Sgshapiro#endif /* ! SM_TIME_H */
57