/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
*/
-/*
+/**
* General header file configurations that apply to
* all daemons. System dependent stuff goes here.
*
- * Version $Id$
*/
#define ETIME ETIMEDOUT
#endif
-#define ioctl_req_t long unsigned int
+#ifdef HAVE_IOCTL_ULINT_REQUEST
+#define ioctl_req_t unsigned long int
+#else
+#define ioctl_req_t int
+#endif
#ifdef PROTOTYPES
# define __PROTO(p) p
#define ASSERT(x) if (!(x)) { \
char *jcr = NULL; \
Emsg1(M_ERROR, 0, _("Failed ASSERT: %s\n"), #x); \
+ Pmsg1(000, _("Failed ASSERT: %s\n"), #x); \
jcr[0] = 0; }
#else
#define ASSERT(x)
#define WIN32_REPARSE_POINT 1
#define WIN32_MOUNT_POINT 2
+/* Reduce compiler warnings from Windows vss code */
+#define uuid(x)
+
void InitWinAPIWrapper();
#define OSDependentInit() InitWinAPIWrapper()
#define B_DEV_BSIZE 512
#endif
-/*
+/**
* Set to time limit for other end to respond to
* authentication. Normally 10 minutes is *way*
* more than enough. The idea is to keep the Director
*/
#define DEFAULT_NETWORK_BUFFER_SIZE (64 * 1024)
-/*
+/**
* Stream definitions. Once defined these must NEVER
* change as they go on the storage media.
* Note, the following streams are passed from the SD to the DIR
#define STREAM_PLUGIN_NAME 26 /* Plugin "file" string */
#define STREAM_PLUGIN_DATA 27 /* Plugin specific data */
-/*
+/**
* Additional Stream definitions. Once defined these must NEVER
* change as they go on the storage media.
*
#define STREAM_ACL_SOLARIS_ACE 1013 /* Solaris specific ace_t string representation from
* from acl_totext (NFSv4 or ZFS acl)
*/
+#define STREAM_XATTR_OPENBSD 1993 /* OpenBSD specific extended attributes */
#define STREAM_XATTR_SOLARIS_SYS 1994 /* Solaris specific extensible attributes or
* otherwise named extended system attributes.
*/
#define STREAM_XATTR_LINUX 1998 /* Linux specific extended attributes */
#define STREAM_XATTR_NETBSD 1999 /* NetBSD specific extended attributes */
-/*
+/**
* File type (Bacula defined).
* NOTE!!! These are saved in the Attributes record on the tape, so
* do not change them. If need be, add to them.
#define FT_NOOPEN 15 /* Could not open directory */
#define FT_RAW 16 /* Raw block device */
#define FT_FIFO 17 /* Raw fifo device */
-/* The DIRBEGIN packet is sent to the FD file processing routine so
+/**
+ * The DIRBEGIN packet is sent to the FD file processing routine so
* that it can filter packets, but otherwise, it is not used
* or saved */
#define FT_DIRBEGIN 18 /* Directory at beginning (not saved) */
#define FT_REPARSE 21 /* Win NTFS reparse point */
#define FT_PLUGIN 22 /* Plugin generated filename */
#define FT_DELETED 23 /* Deleted file entry */
+#define FT_BASE 24 /* Duplicate base file entry */
/* Definitions for upper part of type word (see above). */
#define AR_DATA_STREAM (1<<16) /* Data stream id present */
-/*
+/**
* Tape label types -- stored in catalog
*/
#define B_BACULA_LABEL 0
#define B_ANSI_LABEL 1
#define B_IBM_LABEL 2
+/**
+ * Actions on purge (bit mask)
+ */
+#define AOP_TRUNCATE 1
+
/* Size of File Address stored in STREAM_SPARSE_DATA. Do NOT change! */
#define SPARSE_FADDR_SIZE (sizeof(uint64_t))
#define CRYPTO_LEN_SIZE ((int)sizeof(uint32_t))
-/* This is for dumb compilers/libraries like Solaris. Linux GCC
+/**
+ * This is for dumb compilers/libraries like Solaris. Linux GCC
* does it correctly, so it might be worthwhile
* to remove the isascii(c) with ifdefs on such
* "smart" systems.
#define B_ISUPPER(c) (isascii((int)(c)) && isupper((int)(c)))
#define B_ISDIGIT(c) (isascii((int)(c)) && isdigit((int)(c)))
-/* For multiplying by 10 with shift and addition */
+/** For multiplying by 10 with shift and addition */
#define B_TIMES10(d) ((d<<3)+(d<<1))
#define S_ISLNK(m) (((m) & S_IFM) == S_IFLNK)
#endif
-/* Added by KES to deal with Win32 systems */
+/** Added by KES to deal with Win32 systems */
#ifndef S_ISWIN32
#define S_ISWIN32 020000
#endif
#if defined(HAVE_WIN32)
typedef int64_t boffset_t;
+#define caddr_t char *
#else
typedef off_t boffset_t;
#endif
#endif
-/*
+/**
* The digit following Dmsg and Emsg indicates the number of substitutions in
* the message string. We need to do this kludge because non-GNU compilers
* do not handle varargs #defines.
*/
-/* Debug Messages that are printed */
+/** Debug Messages that are printed */
#ifdef DEBUG
#define Dmsg0(lvl, msg) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg)
#define Dmsg1(lvl, msg, a1) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1)
-/* Messages that are printed (uses d_msg) */
+/** Messages that are printed (uses d_msg) */
#define Pmsg0(lvl, msg) p_msg(__FILE__, __LINE__, lvl, msg)
#define Pmsg1(lvl, msg, a1) p_msg(__FILE__, __LINE__, lvl, msg, a1)
#define Pmsg2(lvl, msg, a1, a2) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2)
#define Pmsg14(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)
-/* Daemon Error Messages that are delivered according to the message resource */
+/** Daemon Error Messages that are delivered according to the message resource */
#define Emsg0(typ, lvl, msg) e_msg(__FILE__, __LINE__, typ, lvl, msg)
#define Emsg1(typ, lvl, msg, a1) e_msg(__FILE__, __LINE__, typ, lvl, msg, a1)
#define Emsg2(typ, lvl, msg, a1, a2) e_msg(__FILE__, __LINE__, typ, lvl, msg, a1, a2)
#define Emsg5(typ, lvl, msg, a1, a2, a3, a4, a5) e_msg(__FILE__, __LINE__, typ, lvl, msg, a1, a2, a3, a4, a5)
#define Emsg6(typ, lvl, msg, a1, a2, a3, a4, a5, a6) e_msg(__FILE__, __LINE__, typ, lvl, msg, a1, a2, a3, a4, a5, a6)
-/* Job Error Messages that are delivered according to the message resource */
+/** Job Error Messages that are delivered according to the message resource */
#define Jmsg0(jcr, typ, lvl, msg) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg)
#define Jmsg1(jcr, typ, lvl, msg, a1) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1)
#define Jmsg2(jcr, typ, lvl, msg, a1, a2) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2)
#define Jmsg5(jcr, typ, lvl, msg, a1, a2, a3, a4, a5) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5)
#define Jmsg6(jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6)
-/* Queued Job Error Messages that are delivered according to the message resource */
+/** Queued Job Error Messages that are delivered according to the message resource */
#define Qmsg0(jcr, typ, lvl, msg) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg)
#define Qmsg1(jcr, typ, lvl, msg, a1) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1)
#define Qmsg2(jcr, typ, lvl, msg, a1, a2) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2)
#define Qmsg6(jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6)
-/* Memory Messages that are edited into a Pool Memory buffer */
+/** Memory Messages that are edited into a Pool Memory buffer */
#define Mmsg0(buf, msg) m_msg(__FILE__, __LINE__, buf, msg)
#define Mmsg1(buf, msg, a1) m_msg(__FILE__, __LINE__, buf, msg, a1)
#define Mmsg2(buf, msg, a1, a2) m_msg(__FILE__, __LINE__, buf, msg, a1, a2)
int m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...);
-/* Use our strdup with smartalloc */
+/** Use our strdup with smartalloc */
#ifndef HAVE_WXCONSOLE
#undef strdup
#define strdup(buf) bad_call_on_strdup_use_bstrdup(buf)
#endif
#endif
-/* Use our fgets which handles interrupts */
+/** Use our fgets which handles interrupts */
#undef fgets
#define fgets(x,y,z) bfgets((x), (y), (z))
-/* Use our sscanf, which is safer and works with known sizes */
+/** Use our sscanf, which is safer and works with known sizes */
#define sscanf bsscanf
#ifdef DEBUG
#define bmalloc(size) b_malloc(__FILE__, __LINE__, (size))
#endif
-/* Function to simplify free/reset pointers */
-inline void bfree_and_null(void *&a) { if (a) { free(a); a = NULL; } }
+/** Macro to simplify free/reset pointers */
+#define bfree_and_null(a) do{if(a){free(a); (a)=NULL;}} while(0)
-/*
+/**
* Replace codes needed in both file routines and non-file routines
* Job replace codes -- in "replace"
*/
#define REPLACE_NEVER 'n'
#define REPLACE_IFOLDER 'o'
-/* This probably should be done on a machine by machine basis, but it works */
-/* This is critical for the smartalloc routines to properly align memory */
+/** This probably should be done on a machine by machine basis, but it works */
+/** This is critical for the smartalloc routines to properly align memory */
#define ALIGN_SIZE (sizeof(double))
#define BALIGN(x) (((x) + ALIGN_SIZE - 1) & ~(ALIGN_SIZE -1))
/* take this 'shortcut' */
#define fseeko fseek
#define ftello ftell
-#undef ioctl_req_t
-#define ioctl_req_t int
#endif
-#ifdef __alpha__
-#define OSF 1
-#undef ioctl_req_t
-#define ioctl_req_t int
-#endif
-
#ifdef HAVE_SUN_OS
- /*
+ /**
* On Solaris 2.5, threads are not timesliced by default, so we need to
* explictly increase the conncurrency level.
*/
#define set_thread_concurrency(x) thr_setconcurrency(x)
extern int thr_setconcurrency(int);
#define SunOS 1
-#undef ioctl_req_t
-#define ioctl_req_t int
#else
-/* Not needed on most systems */
+/** Not needed on most systems */
#define set_thread_concurrency(x)
#endif
#endif
-/* HP-UX 11 specific workarounds */
+/** HP-UX 11 specific workarounds */
#ifdef HAVE_HPUX_OS
# undef h_errno
extern int h_errno;
-/* the {get,set}domainname() functions exist in HPUX's libc.
+/** the {get,set}domainname() functions exist in HPUX's libc.
* the configure script detects that correctly.
* the problem is no system headers declares the prototypes for these functions
* this is done below
*/
extern "C" int getdomainname(char *name, int namelen);
extern "C" int setdomainname(char *name, int namelen);
-#undef ioctl_req_t
-#define ioctl_req_t int
#endif /* HAVE_HPUX_OS */
#ifdef HAVE_OSF1_OS
extern "C" int fchdir(int filedes);
extern "C" long gethostid(void);
-extern "C" int mknod ( const char *path, int mode, dev_t device );
-#undef ioctl_req_t
-#define ioctl_req_t int
+extern "C" int mknod(const char *path, int mode, dev_t device );
#endif
-/* Disabled because it breaks internationalisation...
+/** Disabled because it breaks internationalisation...
#undef HAVE_SETLOCALE
#ifdef HAVE_SETLOCALE
#include <locale.h>
#endif
*/
+/** Determine endianes */
+static inline bool bigendian() { return htonl(1) == 1L; }
+
#endif /* _BACONFIG_H */