/*****************************************************************************

NAME:
   system.h -- system definitions and prototypes for bogofilter

******************************************************************************/

/* parts were taken from autoconf.info */

#ifndef SYSTEM_H
#define SYSTEM_H

#ifndef	CONFIG_H
# define  CONFIG_H
# include "config.h"
#endif

#ifndef BFTYPES_H
# include "bftypes.h"
#endif

#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif

#if defined(HAVE_LIMITS_H)
# include <limits.h>
#elif defined(HAVE_SYS_PARAM_H)
# include <sys/param.h>
#endif

#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif

#include <signal.h>

#if HAVE_STRING_H
# if !STDC_HEADERS && HAVE_MEMORY_H
#  include <memory.h>
# endif
# include <string.h>
#endif

#if HAVE_STRINGS_H
#include <strings.h>
#endif

#if !STDC_HEADERS
# if !HAVE_STRCHR
#  define strchr index
# endif
# if !HAVE_STRRCHR
#  define strrchr rindex
# endif

# if !HAVE_MEMCPY
#  define memcpy(d, s, n) bcopy ((s), (d), (n))
# endif
# if !HAVE_MEMMOVE
#  define memmove(d, s, n) bcopy ((s), (d), (n))
# endif
#endif

#ifndef HAVE_STRLCPY
size_t strlcpy(/*@out@*/ char *dst, const char *src, size_t size);
#endif

#ifndef HAVE_STRLCAT
size_t strlcat(/*@out@*/ char *dst, const char *src, size_t size);
#endif

#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif

#if HAVE_FCNTL_H
#include <fcntl.h>
#endif

/* dirent.h surroundings */
/* from autoconf.info */
#if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
# if HAVE_SYS_NDIR_H
#  include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
#  include <sys/dir.h>
# endif
# if HAVE_NDIR_H
#  include <ndir.h>
# endif
#endif

#ifdef __DGUX__
#undef EX_OK
#endif

/* Ignore __attribute__ if not using GNU CC */
#if	!defined(__GNUC__) && !defined(__attribute__)
#define __attribute__(a)
#endif

/* system.c - function prototypes */

extern bool bf_abspath(const char *path);
extern int  bf_mkdir(const char *path, mode_t mode);
extern void bf_sleep(long delay);

#endif /* SYSTEM_H */
