X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fbaconfig.h;h=dd7c223ebd82e7b4a93be8fdd17c3950853341c9;hb=66428745d8fa73237c0f5d3336b8cd075cbf90e8;hp=ee58dbf3c028c52f18269f4f5b73e96219c5ba42;hpb=e5f5d52c7ca02da4a5264a6fa2967d4a7958143f;p=bacula%2Fbacula diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index ee58dbf3c0..dd7c223ebd 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -5,24 +5,32 @@ * Version $Id$ */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Bacula® - The Network Backup Solution - 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. + Copyright (C) 2000-2006 Free Software Foundation Europe e.V. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of + 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. + + 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + 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. - */ + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ #ifndef _BACONFIG_H @@ -30,9 +38,24 @@ /* Bacula common configuration defines */ +#undef TRUE +#undef FALSE #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 have_tls 0 +#endif + #ifndef ETIME #define ETIME ETIMEDOUT #endif @@ -46,31 +69,94 @@ #ifdef DEBUG #define ASSERT(x) if (!(x)) { \ char *jcr = NULL; \ - Emsg1(M_ERROR, 0, "Failed ASSERT: %s\n", #x); \ + Emsg1(M_ERROR, 0, _("Failed ASSERT: %s\n"), #x); \ jcr[0] = 0; } #else #define ASSERT(x) #endif /* Allow printing of NULL pointers */ -#define NPRT(x) (x)?(x):"*None*" +#define NPRT(x) (x)?(x):_("*None*") + +#if defined(HAVE_WIN32) +void InitWinAPIWrapper(); -#ifdef ENABLE_NLS -#include -#define _(s) gettext((s)) -#define N_(s) (s) +#define OSDependentInit() InitWinAPIWrapper() + +#define sbrk(x) 0 + + +#if defined(BUILDING_DLL) +# define DLL_IMP_EXP _declspec(dllexport) +#elif defined(USING_DLL) +# define DLL_IMP_EXP _declspec(dllimport) #else -#define _(s) (s) -#define N_(s) (s) -#define textdomain(x) +# define DLL_IMP_EXP #endif +#if defined(USING_CATS) +# define CATS_IMP_EXP _declspec(dllimport) +#else +# define CATS_IMP_EXP +#endif + +#else + +#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 + + +#ifdef ENABLE_NLS + #include + #include + #ifndef _ + #define _(s) gettext((s)) + #endif /* _ */ + #ifndef N_ + #define N_(s) (s) + #endif /* N_ */ +#else /* !ENABLE_NLS */ + #undef _ + #undef N_ + #undef textdomain + #undef bindtextdomain + #undef setlocale + + #ifndef _ + #define _(s) (s) + #endif + #ifndef N_ + #define N_(s) (s) + #endif + #ifndef textdomain + #define textdomain(d) + #endif + #ifndef bindtextdomain + #define bindtextdomain(p, d) + #endif + #ifndef setlocale + #define setlocale(p, d) + #endif +#endif /* ENABLE_NLS */ + + +/* Use the following for strings not to be translated */ +#define NT_(s) (s) /* This should go away! ****FIXME***** */ #define MAXSTRING 500 /* Maximum length to edit time/date */ -#define MAX_TIME_LENGTH 30 +#define MAX_TIME_LENGTH 50 /* Maximum Name length including EOS */ #define MAX_NAME_LENGTH 128 @@ -80,45 +166,130 @@ /* All tape operations MUST be a multiple of this */ #define TAPE_BSIZE 1024 -#if !defined(DEV_BSIZE) && defined(BSIZE) -#define DEV_BSIZE BSIZE + +#ifdef DEV_BSIZE +#define B_DEV_BSIZE DEV_BSIZE +#endif + +#if !defined(B_DEV_BSIZE) & defined(BSIZE) +#define B_DEV_BSIZE BSIZE #endif -#ifndef DEV_BSIZE -#define DEV_BSIZE 512 +#ifndef B_DEV_BSIZE +#define B_DEV_BSIZE 512 #endif -/* Maximum number of bytes that you can push into a - * socket. +/* + * 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 + * from hanging because there is a dead connection on + * the other end. + */ +#define AUTH_TIMEOUT 60 * 10 + +/* + * Default network buffer size */ -#define MAX_NETWORK_BUFFER_SIZE (32 * 1024) +#define DEFAULT_NETWORK_BUFFER_SIZE (64 * 1024) -/* Stream definitions. Once defined these must NEVER +/* + * 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_UNIX_ATTRIBUTES 1 /* Generic Unix attributes */ -#define STREAM_FILE_DATA 2 /* Standard uncompressed data */ -#define STREAM_MD5_SIGNATURE 3 /* MD5 signature for the file */ -#define STREAM_GZIP_DATA 4 /* GZip compressed file data */ -#define STREAM_WIN32_ATTRIBUTES 5 /* Windows attributes (superset of Unix) */ -#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 /* SHA1 signature for the file */ -#define STREAM_WIN32_DATA 11 /* Win32 BackupRead data */ -#define STREAM_WIN32_GZIP_DATA 12 /* Gzipped Win32 BackupRead data */ +#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 */ + /* - * Internal code for Signature types + * 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 NO_SIG 0 -#define MD5_SIG 1 -#define SHA1_SIG 2 +#define B_BACULA_LABEL 0 +#define B_ANSI_LABEL 1 +#define B_IBM_LABEL 2 /* Size of File Address stored in STREAM_SPARSE_DATA. Do NOT change! */ #define SPARSE_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 * does it correctly, so it might be worthwhile @@ -130,6 +301,9 @@ #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 */ +#define B_TIMES10(d) ((d<<3)+(d<<1)) + typedef void (HANDLER)(); typedef int (INTHANDLER)(); @@ -176,7 +350,13 @@ typedef int (INTHANDLER)(); #define MODE_RW 0666 #endif -#ifdef DEBUG_MUTEX +#if defined(HAVE_WIN32) +typedef int64_t boffset_t; +#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); @@ -184,19 +364,11 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #define V(x) _v(__FILE__, __LINE__, &(x)) #else +extern void _p(pthread_mutex_t *m); +extern void _v(pthread_mutex_t *m); -/* These probably should be subroutines */ -#define P(x) \ - do { int errstat; if ((errstat=pthread_mutex_lock(&(x)))) \ - e_msg(__FILE__, __LINE__, M_ABORT, 0, "Mutex lock failure. ERR=%s\n",\ - strerror(errstat)); \ - } while(0) - -#define V(x) \ - do { int errstat; if ((errstat=pthread_mutex_unlock(&(x)))) \ - e_msg(__FILE__, __LINE__, M_ABORT, 0, "Mutex unlock failure. ERR=%s\n",\ - strerror(errstat)); \ - } while(0) +#define P(x) _p(&(x)) +#define V(x) _v(&(x)) #endif /* DEBUG_MUTEX */ @@ -213,6 +385,14 @@ extern void _v(char *file, int line, pthread_mutex_t *m); strerror(errstat)); \ } while(0) +#define LockRes() b_LockRes(__FILE__, __LINE__) +#define UnlockRes() b_UnlockRes(__FILE__, __LINE__) + +#ifdef DEBUG_MEMSET +#define memset(a, v, n) b_memset(__FILE__, __LINE__, a, v, n) +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 @@ -221,20 +401,20 @@ extern void _v(char *file, int line, pthread_mutex_t *m); */ /* Debug Messages that are printed */ #ifdef DEBUG -#define Dmsg0(lvl, msg) d_msg(__FILE__, __LINE__, lvl, msg) -#define Dmsg1(lvl, msg, a1) d_msg(__FILE__, __LINE__, lvl, msg, a1) -#define Dmsg2(lvl, msg, a1, a2) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2) -#define Dmsg3(lvl, msg, a1, a2, a3) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) -#define Dmsg4(lvl, msg, arg1, arg2, arg3, arg4) d_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) -#define Dmsg5(lvl, msg, a1, a2, a3, a4, a5) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) -#define Dmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) -#define Dmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) -#define Dmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) -#define Dmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) -#define Dmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) -#define Dmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) -#define Dmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) -#define Dmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#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) +#define Dmsg2(lvl, msg, a1, a2) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2) +#define Dmsg3(lvl, msg, a1, a2, a3) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) +#define Dmsg4(lvl, msg, arg1, arg2, arg3, arg4) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) +#define Dmsg5(lvl, msg, a1, a2, a3, a4, a5) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) +#define Dmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) +#define Dmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Dmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) if ((lvl)<=debug_level) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Dmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) +#define Dmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) +#define Dmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Dmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Dmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) if ((lvl)<=debug_level) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) #else #define Dmsg0(lvl, msg) #define Dmsg1(lvl, msg, a1) @@ -283,23 +463,23 @@ extern void _v(char *file, int line, pthread_mutex_t *m); /* Messages that are printed (uses d_msg) */ -#define Pmsg0(lvl, msg) d_msg(__FILE__, __LINE__, lvl, msg) -#define Pmsg1(lvl, msg, a1) d_msg(__FILE__, __LINE__, lvl, msg, a1) -#define Pmsg2(lvl, msg, a1, a2) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2) -#define Pmsg3(lvl, msg, a1, a2, a3) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) -#define Pmsg4(lvl, msg, arg1, arg2, arg3, arg4) d_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) -#define Pmsg5(lvl, msg, a1, a2, a3, a4, a5) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) -#define Pmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) -#define Pmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) -#define Pmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) d_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) -#define Pmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) -#define Pmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) -#define Pmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) -#define Pmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) -#define Pmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) -#define Pmsg14(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) d_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) - - +#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 Pmsg3(lvl, msg, a1, a2, a3) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) +#define Pmsg4(lvl, msg, arg1, arg2, arg3, arg4) p_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) +#define Pmsg5(lvl, msg, a1, a2, a3, a4, a5) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) +#define Pmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) +#define Pmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Pmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Pmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) +#define Pmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) +#define Pmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Pmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Pmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#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 */ #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) @@ -318,6 +498,15 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #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 */ +#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 Qmsg3(jcr, typ, lvl, msg, a1, a2, a3) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3) +#define Qmsg4(jcr, typ, lvl, msg, a1, a2, a3, a4) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4) +#define Qmsg5(jcr, typ, lvl, msg, a1, a2, a3, a4, a5) q_msg(__FILE__, __LINE__, jcr, typ, lvl, msg, a1, a2, a3, a4, a5) +#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 */ #define Mmsg0(buf, msg) m_msg(__FILE__, __LINE__, buf, msg) @@ -332,37 +521,94 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #define Mmsg11(buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) m_msg(__FILE__,__LINE__,buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) #define Mmsg15(buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) m_msg(__FILE__,__LINE__,buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) +class POOL_MEM; /* Edit message into Pool Memory buffer -- no __FILE__ and __LINE__ */ -int Mmsg(char **msgbuf, char *fmt,...); +int Mmsg(POOLMEM **msgbuf, const char *fmt,...); +int Mmsg(POOLMEM *&msgbuf, const char *fmt,...); +int Mmsg(POOL_MEM &msgbuf, const char *fmt,...); -struct JCR; -void d_msg(char *file, int line, int level, char *fmt,...); -void e_msg(char *file, int line, int type, int level, char *fmt,...); -void j_msg(char *file, int line, JCR *jcr, int type, int level, char *fmt,...); -int m_msg(char *file, int line, char **msgbuf, char *fmt,...); +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,...); +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 */ +#ifndef HAVE_WXCONSOLE #undef strdup #define strdup(buf) bad_call_on_strdup_use_bstrdup(buf) +#else +/* Groan, WxWidgets has its own way of doing NLS so cleanup */ +#ifndef ENABLE_NLS +#undef _ +#undef setlocale +#undef textdomain +#undef bindtextdomain +#endif +#endif + +/* 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 */ +#define sscanf bsscanf #ifdef DEBUG -#define bstrdup(str) strcpy((char *) b_malloc(__FILE__,__LINE__,strlen((str))+1),(str)) +#define bstrdup(str) strcpy((char *)b_malloc(__FILE__,__LINE__,strlen((str))+1),(str)) #else -#define bstrdup(str) strcpy((char *) bmalloc(strlen((str))+1),(str)) +#define bstrdup(str) strcpy((char *)bmalloc(strlen((str))+1),(str)) #endif #ifdef DEBUG #define bmalloc(size) b_malloc(__FILE__, __LINE__, (size)) #endif +/* + * Replace codes needed in both file routines and non-file routines + * Job replace codes -- in "replace" + */ +#define REPLACE_ALWAYS 'a' +#define REPLACE_IFNEWER 'w' +#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 */ +#define ALIGN_SIZE (sizeof(double)) +#define BALIGN(x) (((x) + ALIGN_SIZE - 1) & ~(ALIGN_SIZE -1)) + + +/* ============================================================= + * 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 +#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. */ @@ -379,39 +625,71 @@ extern int thr_setconcurrency(int); #endif -#ifdef HAVE_DARWIN_OS +#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, size_t len); - -/* Darwin lib fnmatch() doesn't work, so use our own */ -#undef HAVE_FNMATCH +extern "C" int getdomainname(char *name, int len); #endif -#ifdef HAVE_CYGWIN -/* They don't really have it */ -#undef HAVE_GETDOMAINNAME +#ifdef HAVE_OSF1_OS +extern "C" int mknod ( const char *path, int mode, dev_t device ); #endif -#ifdef HAVE_AIX_OS -#endif - -/* This probably should be done on a machine by machine basic, but it works */ -#define ALIGN_SIZE (sizeof(double)) -#define BALIGN(x) (((x) + ALIGN_SIZE - 1) & ~(ALIGN_SIZE -1)) +#if defined(HAVE_WIN32) +#define DEFAULT_CONFIGDIR "C:\\Documents and Settings\\All Users\\Application Data\\Bacula" +#define PathSeparator '\\' -/* Added by KES to deal with Win32 systems */ -#ifndef S_ISWIN32 -#define S_ISWIN32 020000 +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, "/\\"); } + +#else +#define PathSeparator '/' +/* Define Winsock functions if we aren't on Windows */ + +#define WSA_Init() 0 /* 0 = success */ +#define WSACleanup() 0 /* 0 = success */ + +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, '/'); } #endif -/* - * Replace codes needed in both file routines and non-file routines - * Job replace codes -- in "replace" + +/* 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 configure script detects that correctly. + * the problem is no system headers declares the prototypes for these functions + * this is done below */ -#define REPLACE_ALWAYS 'a' -#define REPLACE_IFNEWER 'w' -#define REPLACE_NEVER 'n' -#define REPLACE_IFOLDER 'o' +extern "C" int getdomainname(char *name, int namelen); +extern "C" int setdomainname(char *name, int namelen); +#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... +#undef HAVE_SETLOCALE +#ifdef HAVE_SETLOCALE +#include +#else +#define setlocale(x, y) ("ANSI_X3.4-1968") +#endif +#ifdef HAVE_NL_LANGINFO +#include +#else +#define nl_langinfo(x) ("ANSI_X3.4-1968") +#endif +*/ #endif /* _BACONFIG_H */