Home | History | Annotate | Download | only in dhcpcd
      1 /*
      2  * dhcpcd - DHCP client daemon
      3  * Copyright 2006-2008 Roy Marples <roy (at) marples.name>
      4  * All rights reserved
      5 
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     25  * SUCH DAMAGE.
     26  */
     27 
     28 #ifndef COMMON_H
     29 #define COMMON_H
     30 
     31 /* string.h pulls in features.h so the below define checks work */
     32 #include <sys/types.h>
     33 #include <sys/time.h>
     34 #include <stdint.h>
     35 #include <stdio.h>
     36 #include <string.h>
     37 
     38 #define UNCONST(a)		((void *)(unsigned long)(const void *)(a))
     39 
     40 #if __GNUC__ > 2 || defined(__INTEL_COMPILER)
     41 # define _unused __attribute__((__unused__))
     42 #else
     43 # define _unused
     44 #endif
     45 
     46 #ifndef HAVE_ARC4RANDOM
     47 # ifdef __GLIBC__
     48 uint32_t arc4random(void);
     49 #else
     50 # define HAVE_ARC4RANDOM
     51 # endif
     52 #endif
     53 
     54 #ifndef HAVE_STRLCPY
     55 #  define HAVE_STRLCPY 1
     56 #endif
     57 /* Only GLIBC doesn't support strlcpy */
     58 #ifdef __GLIBC__
     59 #  if !defined(__UCLIBC__) && !defined (__dietlibc__)
     60 #    undef HAVE_STRLCPY
     61 size_t strlcpy(char *, const char *, size_t);
     62 #  endif
     63 #endif
     64 
     65 #ifndef HAVE_CLOSEFROM
     66 # if defined(__NetBSD__) || defined(__OpenBSD__)
     67 #  define HAVE_CLOSEFROM 1
     68 # endif
     69 #endif
     70 #ifndef HAVE_CLOSEFROM
     71 int closefrom(int);
     72 #endif
     73 
     74 int close_fds(void);
     75 int set_cloexec(int);
     76 int set_nonblock(int);
     77 ssize_t get_line(char **, size_t *, FILE *);
     78 extern int clock_monotonic;
     79 int get_monotonic(struct timeval *);
     80 time_t uptime(void);
     81 int writepid(int, pid_t);
     82 void *xrealloc(void *, size_t);
     83 void *xmalloc(size_t);
     84 void *xzalloc(size_t);
     85 char *xstrdup(const char *);
     86 
     87 #endif
     88