]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/baconfig.h
Add Jmsg7 and Jmsg8
[bacula/bacula] / bacula / src / baconfig.h
index 68a3df8663c694af36708ee2d55c54dba644e8ab..6a7a69c6028937e3147512e0aeef2515eb92d2f6 100644 (file)
@@ -1,36 +1,35 @@
-/*
- * General header file configurations that apply to
- * all daemons.  System dependent stuff goes here.
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 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.
    This program is Free Software; you can redistribute it and/or
-   modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   modify it under the terms of version three of the GNU Affero General Public
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    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
+   You should have received a copy of the GNU Affero 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.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (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.
+ *
+ */
 
 
 #ifndef _BACONFIG_H
 #define TRUE  1
 #define FALSE 0
 
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
 #ifdef HAVE_TLS
 #define have_tls 1
 #else
 #define ETIME ETIMEDOUT
 #endif
 
+#ifdef HAVE_IOCTL_ULINT_REQUEST
+#define ioctl_req_t unsigned long int
+#else
+#define ioctl_req_t int
+#endif
+
+#define MANUAL_AUTH_URL "http://www.bacula.org/en/rel-manual/Bacula_Freque_Asked_Questi.html#SECTION00260000000000000000"
+
 #ifdef PROTOTYPES
 # define __PROTO(p)     p
 #else
@@ -70,6 +70,7 @@
 #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)
 
 /* Allow printing of NULL pointers */
 #define NPRT(x) (x)?(x):_("*None*")
+#define NPRTB(x) (x)?(x):""
+
 #if defined(HAVE_WIN32)
+
+#define WIN32_REPARSE_POINT  1   /* Can be any number of "funny" directories except the next two */
+#define WIN32_MOUNT_POINT    2   /* Directory link to Volume */
+#define WIN32_JUNCTION_POINT 3   /* Directory link to a directory */
+
+/* Reduce compiler warnings from Windows vss code */
+#define uuid(x)
+
 void InitWinAPIWrapper();
 
 #define  OSDependentInit()    InitWinAPIWrapper()
 
+#define sbrk(x)  0
+
+#define clear_thread_id(x) memset(&(x), 0, sizeof(x))
 
 #if defined(BUILDING_DLL)
 #  define DLL_IMP_EXP   _declspec(dllexport)
@@ -98,19 +111,16 @@ void InitWinAPIWrapper();
 #  define CATS_IMP_EXP
 #endif
 
-#else
+#else  /* HAVE_WIN32 */
+
+#define clear_thread_id(x) x = 0
 
 #define DLL_IMP_EXP
 #define CATS_IMP_EXP
 
 #define  OSDependentInit()
-#define  tape_open            open
-#define  tape_ioctl           ioctl
-#define  tape_read            ::read
-#define  tape_write           ::write
-#define  tape_close           ::close
 
-#endif
+#endif /* HAVE_WIN32 */
 
 
 #ifdef ENABLE_NLS
@@ -159,6 +169,9 @@ void InitWinAPIWrapper();
 /* Maximum Name length including EOS */
 #define MAX_NAME_LENGTH 128
 
+/* Maximum escaped Name lenght including EOS 2*MAX_NAME_LENGTH+1 */
+#define MAX_ESCAPE_NAME_LENGTH 257
+
 /* Maximume number of user entered command args */
 #define MAX_CMD_ARGS 30
 
@@ -177,7 +190,7 @@ void 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
@@ -191,105 +204,27 @@ void InitWinAPIWrapper();
  */
 #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
- *   so that they may be put into the catalog (actually only the
- *   stat packet part of the attr record is put in the catalog.
- *
- *   STREAM_UNIX_ATTRIBUTES
- *   STREAM_UNIX_ATTRIBUTES_EX
- *   STREAM_MD5_DIGEST
- *   STREAM_SHA1_DIGEST
- *   STREAM_SHA256_DIGEST
- *   STREAM_SHA512_DIGEST
- */
-#define STREAM_NONE               0    /* Reserved Non-Stream */
-#define STREAM_UNIX_ATTRIBUTES    1    /* Generic Unix attributes */
-#define STREAM_FILE_DATA          2    /* Standard uncompressed data */
-#define STREAM_MD5_SIGNATURE      3    /* deprecated */
-#define STREAM_MD5_DIGEST         3    /* MD5 digest for the file */
-#define STREAM_GZIP_DATA          4    /* GZip compressed file data */
-/* Extended Unix attributes with Win32 Extended data.  Deprecated. */
-#define STREAM_UNIX_ATTRIBUTES_EX 5    /* Extended Unix attr for Win32 EX */
-#define STREAM_SPARSE_DATA        6    /* Sparse data stream */
-#define STREAM_SPARSE_GZIP_DATA   7
-#define STREAM_PROGRAM_NAMES      8    /* program names for program data */
-#define STREAM_PROGRAM_DATA       9    /* Data needing program */
-#define STREAM_SHA1_SIGNATURE    10    /* deprecated */
-#define STREAM_SHA1_DIGEST       10    /* SHA1 digest for the file */
-#define STREAM_WIN32_DATA        11    /* Win32 BackupRead data */
-#define STREAM_WIN32_GZIP_DATA   12    /* Gzipped Win32 BackupRead data */
-#define STREAM_MACOS_FORK_DATA   13    /* Mac resource fork */
-#define STREAM_HFSPLUS_ATTRIBUTES 14   /* Mac OS extra attributes */
-/*** FIXME ***/
-#define STREAM_UNIX_ATTRIBUTES_ACCESS_ACL 15 /* Standard ACL attributes on UNIX */
-#define STREAM_UNIX_ATTRIBUTES_DEFAULT_ACL 16 /* Default ACL attributes on UNIX */
-/*** FIXME ***/
-#define STREAM_SHA256_DIGEST              17   /* SHA-256 digest for the file */
-#define STREAM_SHA512_DIGEST              18   /* SHA-512 digest for the file */
-#define STREAM_SIGNED_DIGEST              19   /* Signed File Digest, ASN.1, DER Encoded */
-#define STREAM_ENCRYPTED_FILE_DATA        20   /* Encrypted, uncompressed data */
-#define STREAM_ENCRYPTED_WIN32_DATA       21   /* Encrypted, uncompressed Win32 BackupRead data */
-#define STREAM_ENCRYPTED_SESSION_DATA     22   /* Encrypted Session Data, ASN.1, DER Encoded */
-#define STREAM_ENCRYPTED_FILE_GZIP_DATA   23   /* Encrypted, compressed data */
-#define STREAM_ENCRYPTED_WIN32_GZIP_DATA  24   /* Encrypted, compressed Win32 BackupRead data */
-#define STREAM_ENCRYPTED_MACOS_FORK_DATA  25   /* Encrypted, uncompressed Mac resource fork */
-
-
-/*
- *  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.
- *
- *  This is stored as 32 bits on tape, but only FT_MASK bits are
- *    used for the file type. The upper bits are used to indicate
- *    additional optional fields in the attribute record.
- */
-#define FT_MASK       0xFFFF          /* Bits used by FT (type) */
-#define FT_LNKSAVED   1               /* hard link to file already saved */
-#define FT_REGE       2               /* Regular file but empty */
-#define FT_REG        3               /* Regular file */
-#define FT_LNK        4               /* Soft Link */
-#define FT_DIREND     5               /* Directory at end (saved) */
-#define FT_SPEC       6               /* Special file -- chr, blk, fifo, sock */
-#define FT_NOACCESS   7               /* Not able to access */
-#define FT_NOFOLLOW   8               /* Could not follow link */
-#define FT_NOSTAT     9               /* Could not stat file */
-#define FT_NOCHG     10               /* Incremental option, file not changed */
-#define FT_DIRNOCHG  11               /* Incremental option, directory not changed */
-#define FT_ISARCH    12               /* Trying to save archive file */
-#define FT_NORECURSE 13               /* No recursion into directory */
-#define FT_NOFSCHG   14               /* Different file system, prohibited */
-#define FT_NOOPEN    15               /* Could not open directory */
-#define FT_RAW       16               /* Raw block device */
-#define FT_FIFO      17               /* Raw fifo device */
-/* This directory 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_INVALIDFS 19               /* File system not allowed for */
-#define FT_INVALIDDT 20               /* Drive type not allowed for */
-
-/* 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 ON_PURGE_TRUNCATE 1
+
 /* Size of File Address stored in STREAM_SPARSE_DATA. Do NOT change! */
-#define SPARSE_FADDR_SIZE (sizeof(uint64_t))
+#define OFFSET_FADDR_SIZE (sizeof(uint64_t))
 
 /* Size of crypto length stored at head of crypto buffer. Do NOT change! */
 #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.
@@ -299,7 +234,7 @@ void InitWinAPIWrapper();
 #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))
 
 
@@ -316,7 +251,7 @@ typedef int (INTHANDLER)();
 #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
@@ -350,26 +285,11 @@ typedef int (INTHANDLER)();
 
 #if defined(HAVE_WIN32)
 typedef int64_t   boffset_t;
+#define caddr_t  char *
 #else
 typedef off_t     boffset_t;
 #endif
 
-#if defined(DEBUG_MUTEX)
-extern void _p(char *file, int line, pthread_mutex_t *m);
-extern void _v(char *file, int line, pthread_mutex_t *m);
-
-#define P(x) _p(__FILE__, __LINE__, &(x))
-#define V(x) _v(__FILE__, __LINE__, &(x))
-
-#else
-extern void _p(pthread_mutex_t *m);
-extern void _v(pthread_mutex_t *m);
-
-#define P(x) _p(&(x))
-#define V(x) _v(&(x))
-
-#endif /* DEBUG_MUTEX */
-
 /* These probably should be subroutines */
 #define Pw(x) \
    do { int errstat; if ((errstat=rwl_writelock(&(x)))) \
@@ -392,12 +312,12 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 #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)
@@ -460,7 +380,7 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 
 
 
-/* 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)
@@ -478,7 +398,7 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 #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)
@@ -487,7 +407,7 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 #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)
@@ -495,8 +415,10 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 #define Jmsg4(jcr, typ, lvl, msg, a1, a2, a3, a4) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4)
 #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)
+#define Jmsg7(jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6, a7) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6, a7)
+#define Jmsg8(jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) j_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8)
 
-/* 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)
@@ -506,7 +428,7 @@ void b_memset(const char *file, int line, void *mem, int val, size_t num);
 #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)
@@ -530,13 +452,13 @@ class JCR;
 void d_msg(const char *file, int line, int level, const char *fmt,...);
 void p_msg(const char *file, int line, int level, const char *fmt,...);
 void e_msg(const char *file, int line, int type, int level, const char *fmt,...);
-void j_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
-void q_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
+void j_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const char *fmt,...);
+void q_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const char *fmt,...);
 int  m_msg(const char *file, int line, POOLMEM **msgbuf, const char *fmt,...);
 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)
@@ -550,11 +472,11 @@ int  m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...)
 #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
@@ -567,7 +489,10 @@ int  m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...)
 #define bmalloc(size) b_malloc(__FILE__, __LINE__, (size))
 #endif
 
-/*
+/** 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"
  */
@@ -576,8 +501,8 @@ int  m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...)
 #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))
 
@@ -586,54 +511,56 @@ int  m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...)
  *               OS Dependent defines
  * ============================================================= 
  */
-
-#ifndef HAVE_FSEEKO
-/* Bad news. This OS cannot handle 64 bit fseeks and ftells */
-#define fseeko fseek
-#define ftello ftell
-#endif
-
 #if defined (__digital__) && defined (__unix__)
 /* Tru64 - it does have fseeko and ftello , but since ftell/fseek are also 64 bit */
 /* take this 'shortcut' */
 #define fseeko fseek
 #define ftello ftell
+#else
+#ifndef HAVE_FSEEKO
+/* Bad news. This OS cannot handle 64 bit fseeks and ftells */
+#define fseeko fseek
+#define ftello ftell
 #endif
-
-
-#ifdef __alpha__
-#define OSF 1
 #endif
 
 #ifdef HAVE_SUN_OS
-   /*
-    * On Solaris 2.5, threads are not timesliced by default, so we need to
-    * explictly increase the conncurrency level.
-    */
+/*
+ * On Solaris 2.5/2.6/7 and 8, threads are not timesliced by default,
+ * so we need to explictly increase the conncurrency level.
+ */
+#ifdef USE_THR_SETCONCURRENCY
 #include <thread.h>
 #define set_thread_concurrency(x)  thr_setconcurrency(x)
 extern int thr_setconcurrency(int);
 #define SunOS 1
-
 #else
-
-
-/* Not needed on most systems */
 #define set_thread_concurrency(x)
-
 #endif
 
-#if defined(HAVE_DARWIN_OS) || defined(HAVE_OSF1_OS)
-/* Apparently someone forgot to wrap getdomainname as a C function */
-extern "C" int getdomainname(char *name, int len);
-#endif
+#else
+/*
+ * Not needed on most systems
+ */
+#define set_thread_concurrency(x)
 
-#ifdef HAVE_OSF1_OS
-extern "C" int mknod ( const char *path, int mode, dev_t device );
 #endif
 
+#ifdef HAVE_DARWIN_OS
+/* Apparently someone forgot to wrap getdomainname as a C function */
+#ifdef  __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+int getdomainname(char *name, int len);
+#ifdef  __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* HAVE_DARWIN_OS */
 
 #if defined(HAVE_WIN32)
+/*
+ *   Windows
+ */
 #define DEFAULT_CONFIGDIR "C:\\Documents and Settings\\All Users\\Application Data\\Bacula"
 #define PathSeparator '\\'
 
@@ -641,7 +568,13 @@ inline bool IsPathSeparator(int ch) { return ch == '/' || ch == '\\'; }
 inline char *first_path_separator(char *path) { return strpbrk(path, "/\\"); }
 inline const char *first_path_separator(const char *path) { return strpbrk(path, "/\\"); }
 
+extern void pause_msg(const char *file, const char *func, int line, const char *msg);
+#define pause(msg) if (debug_level) pause_msg(__FILE__, __func__, __LINE__, (msg))
+
 #else
+/*
+ *   Unix/Linix
+ */
 #define PathSeparator '/'
 /* Define Winsock functions if we aren't on Windows */
 
@@ -651,32 +584,45 @@ inline const char *first_path_separator(const char *path) { return strpbrk(path,
 inline bool IsPathSeparator(int ch) { return ch == '/'; }
 inline char *first_path_separator(char *path) { return strchr(path, '/'); }
 inline const char *first_path_separator(const char *path) { return strchr(path, '/'); }
+#define pause(msg)
 #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);
+#ifdef  __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+int getdomainname(char *name, int namelen);
+int setdomainname(char *name, int namelen);
+#ifdef  __cplusplus
+}
+#endif /* __cplusplus */
 #endif /* HAVE_HPUX_OS */
 
 
 #ifdef HAVE_OSF1_OS
-#undef HAVE_CHFLAGS  /* chflags is incorrectly detected */
-extern "C" int fchdir(int filedes);
-extern "C" long gethostid(void);
-#endif
-
-
-/* Disabled because it breaks internationalisation...
+#ifdef  __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+int fchdir(int filedes);
+long gethostid(void);
+int getdomainname(char *name, int len);
+#ifdef  __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* HAVE_OSF1_OS */
+
+
+/** Disabled because it breaks internationalisation...
 #undef HAVE_SETLOCALE
 #ifdef HAVE_SETLOCALE
 #include <locale.h>
@@ -690,4 +636,7 @@ extern "C" long gethostid(void);
 #endif
 */
 
+/** Determine endianes */
+static inline bool bigendian() { return htonl(1) == 1L; }
+
 #endif /* _BACONFIG_H */