1*e9639606Spooka /* 2*e9639606Spooka * dhcpcd - DHCP client daemon 3*e9639606Spooka * Copyright (c) 2006-2009 Roy Marples <roy@marples.name> 4*e9639606Spooka * All rights reserved 5*e9639606Spooka 6*e9639606Spooka * Redistribution and use in source and binary forms, with or without 7*e9639606Spooka * modification, are permitted provided that the following conditions 8*e9639606Spooka * are met: 9*e9639606Spooka * 1. Redistributions of source code must retain the above copyright 10*e9639606Spooka * notice, this list of conditions and the following disclaimer. 11*e9639606Spooka * 2. Redistributions in binary form must reproduce the above copyright 12*e9639606Spooka * notice, this list of conditions and the following disclaimer in the 13*e9639606Spooka * documentation and/or other materials provided with the distribution. 14*e9639606Spooka * 15*e9639606Spooka * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*e9639606Spooka * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*e9639606Spooka * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*e9639606Spooka * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*e9639606Spooka * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*e9639606Spooka * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*e9639606Spooka * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*e9639606Spooka * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*e9639606Spooka * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*e9639606Spooka * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*e9639606Spooka * SUCH DAMAGE. 26*e9639606Spooka */ 27*e9639606Spooka 28*e9639606Spooka #ifndef COMMON_H 29*e9639606Spooka #define COMMON_H 30*e9639606Spooka 31*e9639606Spooka #include <stdio.h> 32*e9639606Spooka #include <time.h> 33*e9639606Spooka 34*e9639606Spooka #define UNCONST(a) ((void *)(unsigned long)(const void *)(a)) 35*e9639606Spooka 36*e9639606Spooka #define timeval_to_double(tv) ((tv)->tv_sec * 1.0 + (tv)->tv_usec * 1.0e-6) 37*e9639606Spooka #define timernorm(tvp) \ 38*e9639606Spooka do { \ 39*e9639606Spooka while ((tvp)->tv_usec >= 1000000) { \ 40*e9639606Spooka (tvp)->tv_sec++; \ 41*e9639606Spooka (tvp)->tv_usec -= 1000000; \ 42*e9639606Spooka } \ 43*e9639606Spooka } while (0 /* CONSTCOND */); 44*e9639606Spooka 45*e9639606Spooka #if __GNUC__ > 2 || defined(__INTEL_COMPILER) 46*e9639606Spooka # define _noreturn __attribute__((__noreturn__)) 47*e9639606Spooka # define _packed __attribute__((__packed__)) 48*e9639606Spooka # define _unused __attribute__((__unused__)) 49*e9639606Spooka #else 50*e9639606Spooka # define _noreturn 51*e9639606Spooka # define _packed 52*e9639606Spooka # define _unused 53*e9639606Spooka #endif 54*e9639606Spooka 55*e9639606Spooka /* We don't really need this as our supported systems define __restrict 56*e9639606Spooka * automatically for us, but it is here for completeness. */ 57*e9639606Spooka #ifndef __restrict 58*e9639606Spooka # if defined(__lint__) 59*e9639606Spooka # define __restrict 60*e9639606Spooka # elif __STDC_VERSION__ >= 199901L 61*e9639606Spooka # define __restrict restrict 62*e9639606Spooka # elif !(2 < __GNUC__ || (2 == __GNU_C && 95 <= __GNUC_VERSION__)) 63*e9639606Spooka # define __restrict 64*e9639606Spooka # endif 65*e9639606Spooka #endif 66*e9639606Spooka 67*e9639606Spooka int set_nonblock(int); 68*e9639606Spooka extern int clock_monotonic; 69*e9639606Spooka int get_monotonic(struct timeval *); 70*e9639606Spooka time_t uptime(void); 71*e9639606Spooka void *xrealloc(void *, size_t); 72*e9639606Spooka void *xmalloc(size_t); 73*e9639606Spooka void *xzalloc(size_t); 74*e9639606Spooka char *xstrdup(const char *); 75*e9639606Spooka 76*e9639606Spooka #endif 77