1 /* 2 * Copyright (c) 2005, Petr Rehor <rx@rx.cz>. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 22 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef _AMAVISD_COMPAT_H 30 #define _AMAVISD_COMPAT_H 31 32 #ifdef HAVE_CONFIG_H 33 # include <config.h> 34 #endif 35 36 #if HAVE_STDBOOL_H 37 # include <stdbool.h> 38 #else 39 # if ! HAVE__BOOL 40 # ifdef __cplusplus 41 typedef bool _Bool; 42 # else 43 typedef unsigned char _Bool; 44 # endif 45 # endif 46 # define bool _Bool 47 # define false 0 48 # define true 1 49 # define __bool_true_false_are_defined 1 50 #endif 51 52 #include <errno.h> 53 #include <fcntl.h> 54 #include <libmilter/mfapi.h> 55 #include <libmilter/mfdef.h> 56 #include <limits.h> 57 #include <semaphore.h> 58 #include <stdio.h> 59 #include <stdlib.h> 60 #include <string.h> 61 #include <sys/param.h> 62 #include <sys/stat.h> 63 #include <sys/types.h> 64 #include <sys/un.h> 65 #include <syslog.h> 66 #include <unistd.h> 67 68 #if HAVE_DIRENT_H 69 # include <dirent.h> 70 #else 71 # define dirent direct 72 # if HAVE_SYS_NDIR_H 73 # include <sys/ndir.h> 74 # endif 75 # if HAVE_SYS_DIR_H 76 # include <sys/dir.h> 77 # endif 78 # if HAVE_NDIR_H 79 # include <ndir.h> 80 # endif 81 #endif 82 83 #if !defined(HAVE_DIRFD) && !defined(HAVE_DIRFD_AS_MACRO) 84 # if defined(HAVE_DIR_D_FD) 85 # define dirfd(_d) ((_d)->d_fd) 86 # elif defined(HAVE_DIR_DD_FD) 87 # define dirfd(_d) ((_d)->dd_fd) 88 # elif defined(HAVE_DIR___DD_FD) 89 # define dirfd(_d) ((_d)->__dd_fd) 90 # else 91 # error cannot figure out how to turn a DIR * into a fd 92 # endif 93 #endif 94 95 #if ! defined(MIN) 96 # define MIN(a, b) ((a) < (b) ? (a) : (b)) 97 #endif 98 #if ! defined(MAX) 99 # define MAX(a, b) ((a) < (b) ? (b) : (a)) 100 #endif 101 102 #if ! HAVE_DAEMON 103 # ifndef _PATH_DEVNULL 104 # define _PATH_DEVNULL "/dev/null" 105 # endif 106 /* Run detached from the controlling terminal */ 107 extern int daemon(int, int); 108 #endif 109 110 #if HAVE_FTS_H 111 # include <fts.h> 112 #else 113 # include "fts_compat.h" 114 #endif 115 116 #if TIME_WITH_SYS_TIME 117 # include <sys/time.h> 118 # include <time.h> 119 #else 120 # if HAVE_SYS_TIME_H 121 # include <sys/time.h> 122 # else 123 # include <time.h> 124 # endif 125 #endif 126 127 #if ! HAVE_MKDTEMP 128 /* Make temporary directory */ 129 extern char *mkdtemp(char *); 130 #endif 131 132 #if ! HAVE_STRLCPY 133 /* String copy */ 134 extern size_t strlcpy(char *, const char *, size_t); 135 #endif 136 137 /* Secure socket handling */ 138 extern ssize_t read_sock(int, void *, size_t, long); 139 extern ssize_t write_sock(int, void *, size_t, long); 140 141 #endif /* _AMAVISD_COMPAT_H */ 142