Remove building with NOCRYPTO option
[minix3.git] / external / bsd / dhcpcd / dist / common.h
blob18487a8eca7d7fc31ee4afba9790437e9bd10139
1 /* $NetBSD: common.h,v 1.10 2015/07/09 10:15:34 roy Exp $ */
3 /*
4 * dhcpcd - DHCP client daemon
5 * Copyright (c) 2006-2015 Roy Marples <roy@marples.name>
6 * All rights reserved
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
30 #ifndef COMMON_H
31 #define COMMON_H
33 #include <sys/param.h>
34 #include <sys/time.h>
35 #include <stdio.h>
36 #include <syslog.h>
38 #include "config.h"
39 #include "defs.h"
40 #include "dhcpcd.h"
42 #ifndef HOSTNAME_MAX_LEN
43 #define HOSTNAME_MAX_LEN 250 /* 255 - 3 (FQDN) - 2 (DNS enc) */
44 #endif
46 #ifndef MIN
47 #define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b))
48 #define MAX(a,b) ((/*CONSTCOND*/(a)>(b))?(a):(b))
49 #endif
51 #define UNCONST(a) ((void *)(unsigned long)(const void *)(a))
52 #define STRINGIFY(a) #a
53 #define TOSTRING(a) STRINGIFY(a)
54 #define UNUSED(a) (void)(a)
56 #define USEC_PER_SEC 1000000L
57 #define USEC_PER_NSEC 1000L
58 #define NSEC_PER_SEC 1000000000L
59 #define NSEC_PER_MSEC 1000000L
60 #define MSEC_PER_SEC 1000L
61 #define CSEC_PER_SEC 100L
62 #define NSEC_PER_CSEC 10000000L
64 /* Some systems don't define timespec macros */
65 #ifndef timespecclear
66 #define timespecclear(tsp) (tsp)->tv_sec = (time_t)((tsp)->tv_nsec = 0L)
67 #define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec)
68 #define timespeccmp(tsp, usp, cmp) \
69 (((tsp)->tv_sec == (usp)->tv_sec) ? \
70 ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \
71 ((tsp)->tv_sec cmp (usp)->tv_sec))
72 #define timespecadd(tsp, usp, vsp) \
73 do { \
74 (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
75 (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
76 if ((vsp)->tv_nsec >= 1000000000L) { \
77 (vsp)->tv_sec++; \
78 (vsp)->tv_nsec -= 1000000000L; \
79 } \
80 } while (/* CONSTCOND */ 0)
81 #define timespecsub(tsp, usp, vsp) \
82 do { \
83 (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
84 (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
85 if ((vsp)->tv_nsec < 0) { \
86 (vsp)->tv_sec--; \
87 (vsp)->tv_nsec += 1000000000L; \
88 } \
89 } while (/* CONSTCOND */ 0)
90 #endif
92 #define timespec_to_double(tv) \
93 ((double)(tv)->tv_sec + (double)((tv)->tv_nsec) / 1000000000.0)
94 #define timespecnorm(tv) do { \
95 while ((tv)->tv_nsec >= NSEC_PER_SEC) { \
96 (tv)->tv_sec++; \
97 (tv)->tv_nsec -= NSEC_PER_SEC; \
98 } \
99 } while (0 /* CONSTCOND */);
100 #define ts_to_ms(ms, tv) do { \
101 ms = (tv)->tv_sec * MSEC_PER_SEC; \
102 ms += (tv)->tv_nsec / NSEC_PER_MSEC; \
103 } while (0 /* CONSTCOND */);
104 #define ms_to_ts(tv, ms) do { \
105 (tv)->tv_sec = ms / MSEC_PER_SEC; \
106 (tv)->tv_nsec = (suseconds_t)(ms - ((tv)->tv_sec * MSEC_PER_SEC)) \
107 * NSEC_PER_MSEC; \
108 } while (0 /* CONSTCOND */);
110 #ifndef TIMEVAL_TO_TIMESPEC
111 #define TIMEVAL_TO_TIMESPEC(tv, ts) do { \
112 (ts)->tv_sec = (tv)->tv_sec; \
113 (ts)->tv_nsec = (tv)->tv_usec * USEC_PER_NSEC; \
114 } while (0 /* CONSTCOND */)
115 #endif
117 #if __GNUC__ > 2 || defined(__INTEL_COMPILER)
118 # ifndef __dead
119 # define __dead __attribute__((__noreturn__))
120 # endif
121 # ifndef __packed
122 # define __packed __attribute__((__packed__))
123 # endif
124 # ifndef __printflike
125 # define __printflike(a, b) __attribute__((format(printf, a, b)))
126 # endif
127 # ifndef __unused
128 # define __unused __attribute__((__unused__))
129 # endif
130 #else
131 # ifndef __dead
132 # define __dead
133 # endif
134 # ifndef __packed
135 # define __packed
136 # endif
137 # ifndef __printflike
138 # define __printflike
139 # endif
140 # ifndef __unused
141 # define __unused
142 # endif
143 #endif
145 #ifndef __arraycount
146 #define __arraycount(__x) (sizeof(__x) / sizeof(__x[0]))
147 #endif
149 /* We don't really need this as our supported systems define __restrict
150 * automatically for us, but it is here for completeness. */
151 #ifndef __restrict
152 # if defined(__lint__)
153 # define __restrict
154 # elif __STDC_VERSION__ >= 199901L
155 # define __restrict restrict
156 # elif !(2 < __GNUC__ || (2 == __GNU_C && 95 <= __GNUC_VERSION__))
157 # define __restrict
158 # endif
159 #endif
161 void get_line_free(void);
162 const char *get_hostname(char *, size_t, int);
163 extern int clock_monotonic;
164 int get_monotonic(struct timespec *);
166 /* We could shave a few k off the binary size by just using the
167 * syslog(3) interface.
168 * However, this results in a ugly output on the command line
169 * and relies on syslogd(8) starting before dhcpcd which is not
170 * always the case. */
171 #ifndef USE_LOGFILE
172 # define USE_LOGFILE 1
173 #endif
174 #if USE_LOGFILE
175 void logger_open(struct dhcpcd_ctx *);
176 #define logger_mask(ctx, lvl) setlogmask((lvl))
177 __printflike(3, 4) void logger(struct dhcpcd_ctx *, int, const char *, ...);
178 void logger_close(struct dhcpcd_ctx *);
179 #else
180 #define logger_open(ctx) openlog(PACKAGE, LOG_PERROR | LOG_PID, LOG_DAEMON)
181 #define logger_mask(ctx, lvl) setlogmask((lvl))
182 #define logger(ctx, pri, fmt, ...) \
183 do { \
184 UNUSED((ctx)); \
185 syslog((pri), (fmt), ##__VA_ARGS__); \
186 } while (0 /*CONSTCOND */)
187 #define logger_close(ctx) closelog()
188 #endif
190 ssize_t setvar(struct dhcpcd_ctx *,
191 char **, const char *, const char *, const char *);
192 ssize_t setvard(struct dhcpcd_ctx *,
193 char **, const char *, const char *, size_t);
194 ssize_t addvar(struct dhcpcd_ctx *,
195 char ***, const char *, const char *, const char *);
196 ssize_t addvard(struct dhcpcd_ctx *,
197 char ***, const char *, const char *, size_t);
199 char *hwaddr_ntoa(const unsigned char *, size_t, char *, size_t);
200 size_t hwaddr_aton(unsigned char *, const char *);
201 #endif