X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fbaconfig.h;h=d417d77c8aff1bfa0f726942c8ca18acbf715fd2;hb=d2623318ddf378c21bf842fc7aafe6eb143933e0;hp=9153d271178ff0b9d1f30c0e608593c185080356;hpb=463df9e4ba74a64f5ae90000e9e6bcdaedbdf4fb;p=bacula%2Fbacula diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index 9153d27117..d417d77c8a 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -5,22 +5,17 @@ * Version $Id$ */ /* - Copyright (C) 2000-2004 Kern Sibbald and John Walker + Copyright (C) 2000-2006 Kern Sibbald 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. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. 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. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -35,6 +30,19 @@ #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 @@ -48,35 +56,84 @@ #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() + +#undef ENABLE_NLS + +#if defined(BUILDING_DLL) +# define DLL_IMP_EXP _declspec(dllexport) +#elif defined(USING_DLL) +# define DLL_IMP_EXP _declspec(dllimport) #else -#undef _ -#define _(s) (s) -#undef N_ -#define N_(s) (s) -#undef textdomain -#define textdomain(d) -/* #define bindtextdomain(p, d) */ +# 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 */ + #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 50 +#define MAX_TIME_LENGTH 50 /* Maximum Name length including EOS */ #define MAX_NAME_LENGTH 128 @@ -86,18 +143,32 @@ /* 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 -#ifndef DEV_BSIZE -#define DEV_BSIZE 512 +#if !defined(B_DEV_BSIZE) & defined(BSIZE) +#define B_DEV_BSIZE BSIZE #endif +#ifndef B_DEV_BSIZE +#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 + * from hanging because there is a dead connection on + * the other end. + */ +#define AUTH_TIMEOUT 60 * 10 + /* * Default network buffer size */ -#define DEFAULT_NETWORK_BUFFER_SIZE (32 * 1024) +#define DEFAULT_NETWORK_BUFFER_SIZE (64 * 1024) /* * Stream definitions. Once defined these must NEVER @@ -108,12 +179,16 @@ * * STREAM_UNIX_ATTRIBUTES * STREAM_UNIX_ATTRIBUTES_EX - * STREAM_MD5_SIGNATURE - * STREAM_SHA1_SIGNATURE + * 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 /* MD5 signature for the file */ +#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 */ @@ -121,15 +196,29 @@ #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_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 */ -#define STREAM_UNIX_ATTRIBUTES_ACL 15 /* ACL attributes on UNIX */ +/*** 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). +/* + * 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. * @@ -138,7 +227,7 @@ * 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_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 */ @@ -159,16 +248,18 @@ * 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 */ /* - * Internal code for Signature types + * 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)) @@ -233,7 +324,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); @@ -241,19 +338,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 */ @@ -273,6 +362,11 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #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 @@ -281,20 +375,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) @@ -359,7 +453,7 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #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) @@ -401,22 +495,28 @@ 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(POOLMEM **msgbuf, const char *fmt,...); +int Mmsg(POOLMEM *&msgbuf, const char *fmt,...); +int Mmsg(POOL_MEM &msgbuf, const char *fmt,...); -struct JCR; +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, int level, const char *fmt,...); -void q_msg(const char *file, int line, JCR *jcr, 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) +#endif /* Use our fgets which handles interrupts */ #undef fgets @@ -435,12 +535,46 @@ int m_msg(const char *file, int line, POOLMEM **msgbuf, const char *fmt,...); #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. */ @@ -457,47 +591,59 @@ 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, int len); - -/* Darwin lib fnmatch() doesn't work, so use our own */ -#undef HAVE_FNMATCH #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 + +#if defined(HAVE_WIN32) +#define DEFAULT_CONFIGDIR "C:\\Documents and Settings\\All Users\\Application Data\\Bacula" + +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 Winsock functions if we aren't on Windows */ -#if (!defined HAVE_WIN32) || (defined HAVE_CYGWIN) + #define WSA_Init() 0 /* 0 = success */ #define WSACleanup() 0 /* 0 = success */ -#endif -#ifdef HAVE_AIX_OS +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 - -/* 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)) -/* Added by KES to deal with Win32 systems */ -#ifndef S_ISWIN32 -#define S_ISWIN32 020000 -#endif +/* HP-UX 11 specific workarounds */ -/* - * Replace codes needed in both file routines and non-file routines - * Job replace codes -- in "replace" +#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); +#define uLong unsigned long +#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 @@ -506,8 +652,9 @@ extern "C" int getdomainname(char *name, int len); #endif #ifdef HAVE_NL_LANGINFO #include -#else +#else #define nl_langinfo(x) ("ANSI_X3.4-1968") #endif +*/ #endif /* _BACONFIG_H */