/* * ---------------------------------------------------------------- * Night Light Defines (defines.h) * ---------------------------------------------------------------- * Copyright (C) 1997-2007 Jonas Kvinge * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Last modified by: * Jonas Kvinge (12.04.2007) * */ #ifdef DEFINES_H #warning "defines.h already included." #else #define DEFINES_H struct hostent; /* DEFINES */ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define SUCCESS 0 #define ERROR -1 #define FOREVER -1 #define NEVER 0 #define NONE -1 #define FD_NONE -1 #define HOST_UNRESOLVED "" #define UNKNOWNUSER "" #define UNKNOWNHOST "" #define SERVER_PORT_MIN 1 #define SERVER_PORT_MAX 1023 #define CLIENT_PORT_MIN 1024 #define CLIENT_PORT_MAX 0xFFFF #define PASSWD_FILE "/etc/passwd" #define GROUP_FILE "/etc/group" #define STDINMSGLEN 512 #define DATESTAMPLEN 12 #define TIMESTAMPLEN 10 #define DTSTAMPLEN 21 #define HOURLEN 2 #define MINLEN 2 #define SECLEN 2 #define STRDURATIONLEN 200 #define FILELEN 1024 #define USERLEN 12 #define HOSTLEN 254 #define RECVBUFFERLEN 2048 #define SENDBUFFERLEN 2048 #define LINELEN 4000 #define TEXTLEN 150 #define SPACE10 " " #define SPACE15 " " #define SPACE20 " " #define ONESECOND 1 #define ONEMINUTE 60 #define ONEHOUR 3600 #define ONEDAY 86400 #define FILECHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.!@{}[]~:," #define STRHOSTCHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.?*" #define FAKELOOP for (FakeLoop = TRUE ; FakeLoop == TRUE ; FakeLoop = FALSE) #define FOREVERLOOP while(TRUE) #ifndef __FILE__ #define __FILE__ "unknown" #endif #ifndef __LINE__ #define __LINE__ "unknown" #endif #ifndef __FUNCTION__ #define __FUNCTION__ "unknown" #endif #ifndef INADDR_NONE #define INADDR_NONE 0xffffffff #endif #ifndef MSG_NOSIGNAL #define MSG_NOSIGNAL 0 #endif #define PRINT_SIZE_T signed long int #define PRINT_PID_T unsigned long int #define PRINT_TIME_T signed long int #define PRINT_UID_T unsigned long int #define PRINT_GID_T unsigned long int #if WIN32 #define LINEFEED "\r\n" #else #define LINEFEED "\n" #endif #if !HAVE_SIZE_T typedef int size_t; #endif #if !HAVE_PID_T typedef int pid_t; #endif #if !HAVE_UID_T typedef long uid_t; #endif #if !HAVE_GID_T typedef long gid_t; #endif #if !HAVE_SOCKLEN_T typedef size_t socklen_t; #endif #if !HAVE_SETEUID #define seteuid setuid #endif #if !HAVE_SETEGID #define setegid setgid #endif #ifndef accept_addrlen_type #if OS_BSD || OS_LINUX || OS_WIN32 || WIN32 #define accept_addrlen_type socklen_t #define getsockopt_optlen_type socklen_t #define getsockname_namelen_type socklen_t #define getpeername_namelen_type socklen_t #elif OS_SOLARIS #define accept_addrlen_type socklen_t #define getsockopt_optlen_type int #define getsockname_namelen_type socklen_t #define getpeername_namelen_type socklen_t #elif OS_AIX #define accept_addrlen_type int #define getsockopt_optlen_type int #define getsockname_namelen_type socklen_t #define getpeername_namelen_type socklen_t #elif OS_HPUNIX #define accept_addrlen_type socklen_t #define getsockopt_optlen_type socklen_t #define getsockname_namelen_type socklen_t #define getpeername_namelen_type socklen_t #elif OS_OSF1 #define accept_addrlen_type int #define getsockopt_optlen_type int #define getsockname_namelen_type int #define getpeername_namelen_type int #else #define accept_addrlen_type socklen_t #define getsockopt_optlen_type socklen_t #define getsockname_namelen_type socklen_t #define getpeername_namelen_type socklen_t #endif #endif #if HAVE_SNPRINTF #if !HAVE_DECL_SNPRINTF || OS_OSF1 int snprintf(char *str, size_t size, const char *format, ...); #endif #else #warning "This system does not have snprintf(). Using sprintf() for snprintf()!" #define snprintf(S, Z, F, ...) sprintf(S, F, ...) #endif #if HAVE_VSNPRINTF #if !HAVE_DECL_VSNPRINTF || OS_OSF1 int vsnprintf(char *str, size_t size, const char *format, va_list ap); #endif #else #warning "This system does not have vsnprintf(). Using vsprintf() for vsnprintf()!" #define vsnprintf(S, Z, F, ...) vsprintf(S, F, ...) #endif #if !HAVE_INET_ATON #if HAVE_INET_PTON #define inet_aton(C, A) inet_pton(AF_INET, C, A) #else #define inet_aton nl_net_aton #endif #endif #ifndef NBLOCK_SYSV #ifndef NBLOCK_BSD #ifndef NBLOCK_POSIX #define NBLOCK_POSIX 1 #endif #endif #endif #if ARES #if defined(ARES_VERSION) #if ARES_VERSION >= 0x010500 #define HAVE_CARES_CALLBACK_TIMEOUTS 1 #endif #endif #if HAVE_ARES_VERSION_H #define res_strerror(X) ares_strerror(X) #else #define res_strerror(X) ares_strerror(X, NULL) #endif #else typedef void (*ares_host_callback)(void *arg, int status, int timeouts, struct hostent *hostent); #define res_strerror(X) strerror(X) #endif #if ARES && defined(MAIN_C) && !HAVE_ARES_CANCELQUERY #warning "Your version of ares does not have ares_cancelquery()." #endif /* MACROS */ #undef FREE #define FREE(x) \ free((x)); \ (x) = NULL #ifndef DEBUGPRINT #if DEBUG #define DEBUGPRINT(X, ...) if (X & BITMASK_DEBUG_OPTIONS) debugprint(__FILE__, __LINE__, __FUNCTION__, __VA_ARGS__) #else #define DEBUGPRINT(X, ...) #endif #endif #define Seconds(x) (((x) / ONESECOND) % ONEMINUTE) #define Minutes(x) (((x) / ONEMINUTE) % ONEMINUTE) #define Hours(x) (((x) / ONEHOUR) % 24) #define Days(x) (((x) / ONEDAY)) #define OneOrMore(x) (((x) == 1) ? "" : "s") #define StrMovePastToken(S, T) \ S = strchr(S, T); \ if (S != NULL) { \ *S = '\0'; \ ++S; \ while (S[0] == T) { ++S; } \ } #define StrPrintErrorIfNull(S, F, L, M) \ if ((S == NULL) || (S[0] == '\0')) { \ sysprint(BITMASK_ERROR, M, F, L); \ continue; \ } \ while ((S[0] == ' ') || (S[0] == '\t')) { ++S; } /* VARAIBLES */ #if defined(LIBRARY) #define NOW time(NULL) #else #if defined(MAIN_C) || defined(MKPASSWD_C) time_t NOW = 0; unsigned short int FakeLoop = TRUE; #else extern time_t NOW; extern unsigned short int FakeLoop; #endif #endif /* AERRNO DEFINES */ #define AESUCCESS 0 #define AEINVALID 1 #define AEEXISTS 2 #define AEMALLOC 3 #define AENOMATCH 4 #define AENORESOURCE 5 #define AEINPROGRESS 6 /* HOST DEFINES */ #define HOSTRESOLVING 1 #define HOSTTOIP 2 #define HOSTIPTONAME 4 #define HOSTNAMETOIP 8 #define HOSTRESOLVED 16 /* HOST MACROS */ #define Host_SetResolving(x) ((x) |= HOSTRESOLVING) #define Host_SetHostToIP(x) ((x) |= HOSTTOIP) #define Host_SetHostIPToName(x) ((x) |= HOSTIPTONAME) #define Host_SetHostNameToIP(x) ((x) |= HOSTNAMETOIP) #define Host_SetResolved(x) ((x) |= HOSTRESOLVED) #define Host_ClearResolving(x) ((x) &= ~HOSTRESOLVING) #define Host_ClearHostToIP(x) ((x) &= ~HOSTTOIP) #define Host_ClearHostIPToName(x) ((x) &= ~HOSTIPTONAME) #define Host_ClearHostNameToIP(x) ((x) &= ~HOSTNAMETOIP) #define Host_ClearResolved(x) ((x) &= ~HOSTRESOLVED) #define Host_IsResolving(x) ((x) & HOSTRESOLVING) #define Host_IsHostToIP(x) ((x) & HOSTTOIP) #define Host_IsHostIPToName(x) ((x) & HOSTIPTONAME) #define Host_IsHostNameToIP(x) ((x) & HOSTNAMETOIP) #define Host_IsResolved(x) ((x) & HOSTRESOLVED) #endif