From 2e07aa11e32581ce5efd89ecbcf99344a8a4fcf0 Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Tue, 24 Nov 2020 17:30:54 +0100 Subject: [PATCH] Fixing compilation on Debian GNU/Hurd --- cmake/XRootDFindLibs.cmake | 6 ++-- cmake/XRootDOSDefs.cmake | 16 +++++++--- src/XProtocol/XProtocol.hh | 2 -- src/Xrd/XrdConfig.cc | 6 ++-- src/Xrd/XrdLink.cc | 2 +- src/Xrd/XrdLinkXeq.cc | 22 +++++++++----- src/Xrd/XrdScheduler.cc | 4 +-- src/XrdAcc/XrdAccAuthFile.hh | 3 +- src/XrdAcc/XrdAccGroups.cc | 1 + src/XrdApps/Xrdadler32.cc | 6 ++-- src/XrdCks/XrdCksConfig.cc | 1 + src/XrdCks/XrdCksManOss.cc | 1 + src/XrdCks/XrdCksManager.cc | 2 ++ src/XrdCl/XrdClAsyncSocketHandler.cc | 2 +- src/XrdCl/XrdClSocket.cc | 2 +- src/XrdCl/XrdClTaskManager.cc | 1 + src/XrdClient/XrdClientSock.cc | 7 ++--- src/XrdCms/XrdCmsLogin.cc | 19 ++++++++++-- src/XrdDig/XrdDigFS.cc | 2 +- src/XrdFrm/XrdFrmAdmin.cc | 1 + src/XrdFrm/XrdFrmAdminUnlink.cc | 1 + src/XrdFrm/XrdFrmCns.cc | 1 + src/XrdFrm/XrdFrmXfrJob.hh | 1 + src/XrdNet/XrdNetSocket.cc | 4 ++- src/XrdOfs/XrdOfsCPFile.cc | 1 + src/XrdOss/XrdOssAio.cc | 6 ++++ src/XrdOss/XrdOssAt.cc | 1 + src/XrdOss/XrdOssCache.hh | 2 +- src/XrdOss/XrdOssCopy.cc | 2 ++ src/XrdOss/XrdOssStat.cc | 1 + src/XrdOss/XrdOssUnlink.cc | 1 + src/XrdOuc/XrdOucBackTrace.cc | 3 ++ src/XrdOuc/XrdOucStream.cc | 5 +--- src/XrdPfc/XrdPfcFile.cc | 2 +- src/XrdPosix/XrdPosix.cc | 10 +++---- src/XrdPosix/XrdPosixDir.cc | 2 +- src/XrdPosix/XrdPosixExtern.hh | 4 +-- src/XrdPosix/XrdPosixInfo.hh | 1 + src/XrdPosix/XrdPosixOsDep.hh | 4 +++ src/XrdPosix/XrdPosixPreload.cc | 6 ++-- src/XrdPosix/XrdPosixPreload32.cc | 6 ++-- src/XrdPosix/XrdPosixXrootd.cc | 8 ++--- src/XrdPosix/XrdPosixXrootdPath.cc | 1 + src/XrdSecpwd/XrdSecpwdPlatform.hh | 2 +- src/XrdSfs/XrdSfsFAttr.hh | 2 +- src/XrdSfs/XrdSfsNative.cc | 2 +- src/XrdSsi/XrdSsiClient.cc | 2 +- src/XrdSsi/XrdSsiShMam.cc | 2 +- src/XrdSys/XrdSysE2T.cc | 16 +++++++--- src/XrdSys/XrdSysFAttr.cc | 17 ++++------- src/XrdSys/XrdSysFD.hh | 4 +-- src/XrdSys/XrdSysPlatform.hh | 42 ++++++++++++++++++--------- src/XrdSys/XrdSysPthread.cc | 4 +-- src/XrdSys/XrdSysPthread.hh | 2 +- src/XrdSys/XrdSysUtils.cc | 2 +- src/XrdThrottle/XrdThrottleManager.cc | 2 +- src/XrdThrottle/XrdThrottleManager.hh | 4 +-- src/XrdXrootd/XrdXrootdXeqFAttr.cc | 15 +++++++++- 58 files changed, 190 insertions(+), 107 deletions(-) diff --git a/cmake/XRootDFindLibs.cmake b/cmake/XRootDFindLibs.cmake index bcea5fafe84..a2b21491439 100644 --- a/cmake/XRootDFindLibs.cmake +++ b/cmake/XRootDFindLibs.cmake @@ -54,7 +54,7 @@ if( ENABLE_KRB5 ) endif() # mac fuse not supported -if( ENABLE_FUSE AND Linux ) +if( ENABLE_FUSE AND LINUX ) find_package( fuse ) if( FUSE_FOUND ) add_definitions( -DHAVE_FUSE ) @@ -111,7 +111,7 @@ else() set( BUILD_SCITOKENS FALSE ) endif() -if( ENABLE_PYTHON AND (Linux OR APPLE) ) +if( ENABLE_PYTHON AND (LINUX OR Hurd OR MacOSX) ) find_package( PythonInterp ${XRD_PYTHON_REQ_VERSION} ) find_package( PythonLibs ${XRD_PYTHON_REQ_VERSION} ) if( PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND ) @@ -122,7 +122,7 @@ if( ENABLE_PYTHON AND (Linux OR APPLE) ) endif() endif() -if( ENABLE_VOMS AND Linux ) +if( ENABLE_VOMS AND (LINUX OR Hurd) ) find_package( VOMS ) if( VOMS_FOUND ) set( BUILD_VOMS TRUE ) diff --git a/cmake/XRootDOSDefs.cmake b/cmake/XRootDOSDefs.cmake index a65c4cfb8ab..ec81384207e 100644 --- a/cmake/XRootDOSDefs.cmake +++ b/cmake/XRootDOSDefs.cmake @@ -4,7 +4,8 @@ include( CheckCXXSourceRuns ) -set( Linux FALSE ) +set( LINUX FALSE ) +set( Hurd FALSE ) set( MacOSX FALSE ) set( Solaris FALSE ) @@ -77,9 +78,17 @@ endif() # Linux #------------------------------------------------------------------------------- if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" ) - set( Linux TRUE ) + set( LINUX TRUE ) + include( GNUInstallDirs ) + set( EXTRA_LIBS rt ) +endif() + +#------------------------------------------------------------------------------- +# GNU/Hurd +#------------------------------------------------------------------------------- +if( ${CMAKE_SYSTEM_NAME} STREQUAL "GNU" ) + set( Hurd TRUE ) include( GNUInstallDirs ) - add_definitions( -D__linux__=1 ) set( EXTRA_LIBS rt ) endif() @@ -97,7 +106,6 @@ if( APPLE ) # this is here because of Apple deprecating openssl and krb5 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations" ) - add_definitions( -D__macos__=1 ) add_definitions( -DLT_MODULE_EXT=".dylib" ) set( CMAKE_INSTALL_LIBDIR "lib" ) set( CMAKE_INSTALL_BINDIR "bin" ) diff --git a/src/XProtocol/XProtocol.hh b/src/XProtocol/XProtocol.hh index 7703d2c48df..5a4d7585a6e 100644 --- a/src/XProtocol/XProtocol.hh +++ b/src/XProtocol/XProtocol.hh @@ -1284,10 +1284,8 @@ struct ALIGN_CHECK {char chkszreq[25-sizeof(ClientRequest)]; #endif #ifndef EBADRQC -#if defined(__APPLE__) #define EBADRQC EBADRPC #endif -#endif #ifndef EAUTH #define EAUTH EBADE diff --git a/src/Xrd/XrdConfig.cc b/src/Xrd/XrdConfig.cc index ff8131aecba..b19b433000b 100644 --- a/src/Xrd/XrdConfig.cc +++ b/src/Xrd/XrdConfig.cc @@ -88,7 +88,7 @@ #include "XrdTls/XrdTls.hh" #include "XrdTls/XrdTlsContext.hh" -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) #include #endif #ifdef __APPLE__ @@ -1143,7 +1143,7 @@ int XrdConfig::setFDL() // The scheduler will have already set the thread limit. We just report it // -#if defined(__linux__) && defined(RLIMIT_NPROC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(RLIMIT_NPROC) // Obtain the actual limit now (Scheduler construction sets this to rlim_max) // @@ -1177,7 +1177,7 @@ int XrdConfig::Setup(char *dfltp, char *libProt) // Special handling for Linux sendfile() // -#if defined(__linux__) && defined(TCP_CORK) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(TCP_CORK) { int sokFD, setON = 1; if ((sokFD = socket(PF_INET, SOCK_STREAM, 0)) >= 0) {setsockopt(sokFD, XrdNetUtils::ProtoID("tcp"), TCP_NODELAY, diff --git a/src/Xrd/XrdLink.cc b/src/Xrd/XrdLink.cc index 5eb8da1d72d..919a723dd9e 100644 --- a/src/Xrd/XrdLink.cc +++ b/src/Xrd/XrdLink.cc @@ -34,7 +34,7 @@ #include #include -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) #include #if !defined(TCP_CORK) #undef HAVE_SENDFILE diff --git a/src/Xrd/XrdLinkXeq.cc b/src/Xrd/XrdLinkXeq.cc index d7e1d971890..e24edb85e0d 100644 --- a/src/Xrd/XrdLinkXeq.cc +++ b/src/Xrd/XrdLinkXeq.cc @@ -36,7 +36,7 @@ #include #include -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) #include #if !defined(TCP_CORK) #undef HAVE_SENDFILE @@ -79,12 +79,6 @@ extern XrdScheduler Sched; extern XrdTlsContext *tlsCtx; XrdTcpMonPin *TcpMonPin = 0; extern int devNull; - -#ifdef IOV_MAX - int maxIOV = IOV_MAX; -#else - int maxIOV = sysconf(_SC_IOV_MAX); -#endif }; using namespace XrdGlobal; @@ -554,6 +548,18 @@ int XrdLinkXeq::Send(const char *Buff, int Blen) int XrdLinkXeq::Send(const struct iovec *iov, int iocnt, int bytes) { int retc; + static int maxIOV = -1; + if (maxIOV == -1) { +#ifdef _SC_IOV_MAX + maxIOV = sysconf(_SC_IOV_MAX); + if (maxIOV == -1) +#endif +#ifdef IOV_MAX + maxIOV = IOV_MAX; +#else + maxIOV = 1024; +#endif + } // Get a lock and assume we will be successful (statistically we are) // @@ -668,7 +674,7 @@ do{retc = sendfilev(LinkInfo.FD, vecSFP, sfN, &xframt); Log.Emsg("Link", retc, "send file to", ID); return -1; -#elif defined(__linux__) +#elif defined(__linux__) || defined(__GNU__) static const int setON = 1, setOFF = 0; ssize_t retc = 0, bytesleft; diff --git a/src/Xrd/XrdScheduler.cc b/src/Xrd/XrdScheduler.cc index 89182b4b6d7..3e1aba829b1 100644 --- a/src/Xrd/XrdScheduler.cc +++ b/src/Xrd/XrdScheduler.cc @@ -107,7 +107,7 @@ XrdScheduler::XrdScheduler(XrdSysError *eP, XrdOucTrace *tP, // Make sure we are using the maximum number of threads allowed (Linux only) // -#if defined(__linux__) && defined(RLIMIT_NPROC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(RLIMIT_NPROC) struct rlimit rlim; @@ -165,7 +165,7 @@ XrdScheduler::XrdScheduler(int minw, int maxw, int maxi) // Get a file descriptor mirroring standard error // -#if defined(__linux__) && defined(O_CLOEXEC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(F_DUPFD_CLOEXEC) eFD = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 0); #else eFD = dup(STDERR_FILENO); diff --git a/src/XrdAcc/XrdAccAuthFile.hh b/src/XrdAcc/XrdAccAuthFile.hh index 9b83285a848..18321952a50 100644 --- a/src/XrdAcc/XrdAccAuthFile.hh +++ b/src/XrdAcc/XrdAccAuthFile.hh @@ -34,6 +34,7 @@ #include #include #include "XrdSys/XrdSysError.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysPthread.hh" #include "XrdOuc/XrdOucStream.hh" #include "XrdAcc/XrdAccAuthDB.hh" @@ -75,6 +76,6 @@ time_t modtime; XrdSysMutex DBcontext; char recname_buff[MAXHOSTNAMELEN+1]; // Max record name by default -char path_buff[PATH_MAX+2]; // Max path name +char path_buff[MAXPATHLEN+2]; // Max path name }; #endif diff --git a/src/XrdAcc/XrdAccGroups.cc b/src/XrdAcc/XrdAccGroups.cc index d698a43308d..d6f500c847a 100644 --- a/src/XrdAcc/XrdAccGroups.cc +++ b/src/XrdAcc/XrdAccGroups.cc @@ -40,6 +40,7 @@ #include #include "XrdSys/XrdSysHeaders.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysPwd.hh" #include "XrdAcc/XrdAccCapability.hh" #include "XrdAcc/XrdAccGroups.hh" diff --git a/src/XrdApps/Xrdadler32.cc b/src/XrdApps/Xrdadler32.cc index ae5be1a2448..1f441112f6c 100644 --- a/src/XrdApps/Xrdadler32.cc +++ b/src/XrdApps/Xrdadler32.cc @@ -43,7 +43,7 @@ #include #include #include -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) #include #endif #include @@ -71,7 +71,7 @@ void fSetXattrAdler32(const char *path, int fd, const char* attr, char *value) // Remove any old attribute at this point // -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) fremovexattr(fd, attr); #elif defined(__solaris__) int attrfd; @@ -90,7 +90,7 @@ int fGetXattrAdler32(int fd, const char* attr, char *value) if (fstat(fd, &st)) return 0; sprintf(mtime, "%ld", st.st_mtime); -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) rc = fgetxattr(fd, attr, attr_val, 25); #elif defined(__solaris__) int attrfd; diff --git a/src/XrdCks/XrdCksConfig.cc b/src/XrdCks/XrdCksConfig.cc index bcd4694bc76..9e2553eeee3 100644 --- a/src/XrdCks/XrdCksConfig.cc +++ b/src/XrdCks/XrdCksConfig.cc @@ -46,6 +46,7 @@ #include "XrdOuc/XrdOucStream.hh" #include "XrdOuc/XrdOucUtils.hh" #include "XrdSys/XrdSysError.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysPlugin.hh" /******************************************************************************/ diff --git a/src/XrdCks/XrdCksManOss.cc b/src/XrdCks/XrdCksManOss.cc index 6b742b242cc..d269cd9686e 100644 --- a/src/XrdCks/XrdCksManOss.cc +++ b/src/XrdCks/XrdCksManOss.cc @@ -43,6 +43,7 @@ #include "XrdOss/XrdOss.hh" #include "XrdOuc/XrdOucEnv.hh" #include "XrdSys/XrdSysError.hh" +#include "XrdSys/XrdSysPlatform.hh" /******************************************************************************/ /* L o c a l S t a t i c s */ diff --git a/src/XrdCks/XrdCksManager.cc b/src/XrdCks/XrdCksManager.cc index 97c282aa0f2..c0e144800c4 100644 --- a/src/XrdCks/XrdCksManager.cc +++ b/src/XrdCks/XrdCksManager.cc @@ -179,6 +179,8 @@ int XrdCksManager::Calc(const char *Pfn, time_t &MTime, XrdCksCalc *csP) {if ((inBuff = (char *)mmap(0, ioSize, PROT_READ, #if defined(__FreeBSD__) MAP_RESERVED0040|MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) +#elif defined(__GNU__) + MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) #else MAP_NORESERVE|MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) #endif diff --git a/src/XrdCl/XrdClAsyncSocketHandler.cc b/src/XrdCl/XrdClAsyncSocketHandler.cc index 5e71b52cf43..ef1c8f36be5 100644 --- a/src/XrdCl/XrdClAsyncSocketHandler.cc +++ b/src/XrdCl/XrdClAsyncSocketHandler.cc @@ -119,7 +119,7 @@ namespace XrdCl log->Error( AsyncSockMsg, "[%s] Unable to turn on keepalive: %s", st.ToString().c_str() ); -#if defined(__linux__) && defined( TCP_KEEPIDLE ) && \ +#if ( defined(__linux__) || defined(__GNU__) ) && defined( TCP_KEEPIDLE ) && \ defined( TCP_KEEPINTVL ) && defined( TCP_KEEPCNT ) param = DefaultTCPKeepAliveTime; diff --git a/src/XrdCl/XrdClSocket.cc b/src/XrdCl/XrdClSocket.cc index aabf8065bac..4942303ece6 100644 --- a/src/XrdCl/XrdClSocket.cc +++ b/src/XrdCl/XrdClSocket.cc @@ -463,7 +463,7 @@ namespace XrdCl //-------------------------------------------------------------------------- // We use send with MSG_NOSIGNAL to avoid SIGPIPEs on Linux //-------------------------------------------------------------------------- -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) int status = ::send( pSocket, buffer, size, MSG_NOSIGNAL ); #else int status = ::write( pSocket, buffer, size ); diff --git a/src/XrdCl/XrdClTaskManager.cc b/src/XrdCl/XrdClTaskManager.cc index b6bbc125218..e22795d782c 100644 --- a/src/XrdCl/XrdClTaskManager.cc +++ b/src/XrdCl/XrdClTaskManager.cc @@ -242,6 +242,7 @@ namespace XrdCl // Enable the cancelation and go to sleep //------------------------------------------------------------------------ pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, 0 ); + pthread_testcancel(); XrdSysTimer::Wait( pResolution*1000 ); } } diff --git a/src/XrdClient/XrdClientSock.cc b/src/XrdClient/XrdClientSock.cc index 8d8b29003c5..565f5988e4e 100644 --- a/src/XrdClient/XrdClientSock.cc +++ b/src/XrdClient/XrdClientSock.cc @@ -57,10 +57,6 @@ #include "XrdSys/XrdWin32.hh" #endif -#ifdef __FreeBSD__ -#include -#endif - #if __cplusplus >= 201103L #define XRDCL_SMART_PTR_T std::unique_ptr #else @@ -460,7 +456,8 @@ int XrdClientSock::TryConnect_low(bool isUnix, int altport, int windowsz) if( XrdNetSocket::setOpts( sock, XRDNET_KEEPALIVE, 0 ) != 0 ) Error( "ClientSock::TryConnect_low", "Unable to set the TCP Keep Alive option" ); -#if defined(__linux__) && defined( TCP_KEEPIDLE ) && defined( TCP_KEEPINTVL ) && defined( TCP_KEEPCNT ) +#if ( defined(__linux__) || defined(__GNU__) ) && defined( TCP_KEEPIDLE ) && \ + defined( TCP_KEEPINTVL ) && defined( TCP_KEEPCNT ) int val = EnvGetLong( NAME_TCP_KEEPALIVE_TIME ); if( setsockopt( sock, SOL_TCP, TCP_KEEPIDLE, (char *)&val, sizeof( val ) ) < 0 ) diff --git a/src/XrdCms/XrdCmsLogin.cc b/src/XrdCms/XrdCmsLogin.cc index 51fdc14d3c6..cea76af176f 100644 --- a/src/XrdCms/XrdCmsLogin.cc +++ b/src/XrdCms/XrdCmsLogin.cc @@ -29,6 +29,7 @@ /******************************************************************************/ #include +#include #include "XProtocol/YProtocol.hh" @@ -210,6 +211,18 @@ int XrdCmsLogin::sendData(XrdLink *Link, CmsLoginData &Data) char Work[xNum*12]; struct iovec Liov[xNum]; CmsRRHdr Resp={0, kYR_login, 0, 0}; + static int iovmax = -1; + if (iovmax == -1) { +#ifdef _SC_IOV_MAX + iovmax = sysconf(_SC_IOV_MAX); + if (iovmax == -1) +#endif +#ifdef IOV_MAX + iovmax = IOV_MAX; +#else + iovmax = 1024; +#endif + } // Pack the response (ignore the auth token for now) // @@ -225,11 +238,11 @@ int XrdCmsLogin::sendData(XrdLink *Link, CmsLoginData &Data) // Send off the data *break it up to IOV_MAX chunks, mostly for Solaris) // n = 0; iovcnt++; - if (iovcnt <= IOV_MAX) Link->Send(Liov, iovcnt); + if (iovcnt <= iovmax) Link->Send(Liov, iovcnt); else while(iovcnt > 0) - {iovnum = (iovcnt > IOV_MAX ? IOV_MAX : iovcnt); + {iovnum = (iovcnt > iovmax ? iovmax : iovcnt); Link->Send(&Liov[n], iovnum); - n += IOV_MAX; iovcnt -= IOV_MAX; + n += iovmax; iovcnt -= iovmax; } // Return success diff --git a/src/XrdDig/XrdDigFS.cc b/src/XrdDig/XrdDigFS.cc index c0ef67d462b..891961dfebb 100644 --- a/src/XrdDig/XrdDigFS.cc +++ b/src/XrdDig/XrdDigFS.cc @@ -239,7 +239,7 @@ const char *XrdDigDirectory::nextEntry() // Read the next directory entry // -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) do{errno = 0; rp = readdir(dh); if (!rp) diff --git a/src/XrdFrm/XrdFrmAdmin.cc b/src/XrdFrm/XrdFrmAdmin.cc index 5e7691b4cf2..2f99a913b1f 100644 --- a/src/XrdFrm/XrdFrmAdmin.cc +++ b/src/XrdFrm/XrdFrmAdmin.cc @@ -52,6 +52,7 @@ #include "XrdOuc/XrdOucTList.hh" #include "XrdOuc/XrdOucTokenizer.hh" #include "XrdSys/XrdSysE2T.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysTimer.hh" using namespace XrdFrc; diff --git a/src/XrdFrm/XrdFrmAdminUnlink.cc b/src/XrdFrm/XrdFrmAdminUnlink.cc index d341ad3f94d..7b370127e6c 100644 --- a/src/XrdFrm/XrdFrmAdminUnlink.cc +++ b/src/XrdFrm/XrdFrmAdminUnlink.cc @@ -43,6 +43,7 @@ #include "XrdOss/XrdOss.hh" #include "XrdOss/XrdOssPath.hh" #include "XrdOuc/XrdOucNSWalk.hh" +#include "XrdSys/XrdSysPlatform.hh" using namespace XrdFrc; using namespace XrdFrm; diff --git a/src/XrdFrm/XrdFrmCns.cc b/src/XrdFrm/XrdFrmCns.cc index a59719f73df..592847100ad 100644 --- a/src/XrdFrm/XrdFrmCns.cc +++ b/src/XrdFrm/XrdFrmCns.cc @@ -42,6 +42,7 @@ #include "XrdFrm/XrdFrmConfig.hh" #include "XrdOuc/XrdOucSxeq.hh" #include "XrdOuc/XrdOucUtils.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysPthread.hh" #include "XrdSys/XrdSysTimer.hh" diff --git a/src/XrdFrm/XrdFrmXfrJob.hh b/src/XrdFrm/XrdFrmXfrJob.hh index 446cd4bfdd6..441c2abe68c 100644 --- a/src/XrdFrm/XrdFrmXfrJob.hh +++ b/src/XrdFrm/XrdFrmXfrJob.hh @@ -32,6 +32,7 @@ #include #include "XrdFrc/XrdFrcRequest.hh" +#include "XrdSys/XrdSysPlatform.hh" class XrdFrcReqFile; class XrdOucTList; diff --git a/src/XrdNet/XrdNetSocket.cc b/src/XrdNet/XrdNetSocket.cc index 004478a4eb4..51c43f7c963 100644 --- a/src/XrdNet/XrdNetSocket.cc +++ b/src/XrdNet/XrdNetSocket.cc @@ -347,7 +347,9 @@ int XrdNetSocket::setOpts(int xfd, int opts, XrdSysError *eDest) { int rc = 0; const int one = 1; +#if defined(__linux__) || defined(__GNU__) const int szint = sizeof(int); +#endif const SOCKLEN_t szone = (SOCKLEN_t)sizeof(one); static int tcpprotid = XrdNetUtils::ProtoID("tcp"); static struct linger liopts = {1, XRDNETSOCKET_LINGER}; @@ -371,7 +373,7 @@ int XrdNetSocket::setOpts(int xfd, int opts, XrdSysError *eDest) {rc = 1; if (eDest) eDest->Emsg("setOpts", errno, "set socket KEEPALIVE"); } -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) else if (opts & XRDNET_SERVER) // Following are inherited in Linux {if (XrdNetSocketCFG::ka_Idle && setsockopt(xfd,SOL_TCP,TCP_KEEPIDLE,&XrdNetSocketCFG::ka_Idle,szint)) diff --git a/src/XrdOfs/XrdOfsCPFile.cc b/src/XrdOfs/XrdOfsCPFile.cc index 493a4a9cfbb..b955bacf1a2 100644 --- a/src/XrdOfs/XrdOfsCPFile.cc +++ b/src/XrdOfs/XrdOfsCPFile.cc @@ -44,6 +44,7 @@ #include "XrdOuc/XrdOucIOVec.hh" #include "XrdSys/XrdSysE2T.hh" #include "XrdSys/XrdSysFD.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdSys/XrdSysPthread.hh" #include "XrdSys/XrdSysXAttr.hh" diff --git a/src/XrdOss/XrdOssAio.cc b/src/XrdOss/XrdOssAio.cc index cba9089f85e..092b20b2cbf 100644 --- a/src/XrdOss/XrdOssAio.cc +++ b/src/XrdOss/XrdOssAio.cc @@ -62,6 +62,12 @@ #undef _POSIX_ASYNCHRONOUS_IO #endif +#ifdef __GNU__ +// Compiler warning: +// warning: sigwaitinfo is not implemented and will always fail +#undef HAVE_SIGWTI +#endif + /******************************************************************************/ /* G l o b a l s */ /******************************************************************************/ diff --git a/src/XrdOss/XrdOssAt.cc b/src/XrdOss/XrdOssAt.cc index 87cdb4f2639..39ff8a310c7 100644 --- a/src/XrdOss/XrdOssAt.cc +++ b/src/XrdOss/XrdOssAt.cc @@ -42,6 +42,7 @@ #include "XrdOss/XrdOssPath.hh" #include "XrdSys/XrdSysError.hh" #include "XrdSys/XrdSysFD.hh" +#include "XrdSys/XrdSysPlatform.hh" /******************************************************************************/ /* E x t e r n a l O b j e c t s */ diff --git a/src/XrdOss/XrdOssCache.hh b/src/XrdOss/XrdOssCache.hh index d926c04f0f8..2786de087c8 100644 --- a/src/XrdOss/XrdOssCache.hh +++ b/src/XrdOss/XrdOssCache.hh @@ -48,7 +48,7 @@ #define FS_BLKSZ f_frsize #define FS_FFREE f_favail #endif -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) #include #define FS_Stat(a,b) statfs(a,b) #define STATFS_t struct statfs diff --git a/src/XrdOss/XrdOssCopy.cc b/src/XrdOss/XrdOssCopy.cc index 1b0846896f4..c1230a77d63 100644 --- a/src/XrdOss/XrdOssCopy.cc +++ b/src/XrdOss/XrdOssCopy.cc @@ -109,6 +109,8 @@ off_t XrdOssCopy::Copy(const char *inFn, const char *outFn, int outFD) {if ((inBuff = (char *)mmap(0, ioSize, PROT_READ, #if defined(__FreeBSD__) MAP_RESERVED0040|MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) +#elif defined(__GNU__) + MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) #else MAP_NORESERVE|MAP_PRIVATE, In.FD, Offset)) == MAP_FAILED) #endif diff --git a/src/XrdOss/XrdOssStat.cc b/src/XrdOss/XrdOssStat.cc index 5e95ea40f16..e27e74321a2 100644 --- a/src/XrdOss/XrdOssStat.cc +++ b/src/XrdOss/XrdOssStat.cc @@ -40,6 +40,7 @@ #include #include "XrdSys/XrdSysHeaders.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdOss/XrdOssApi.hh" #include "XrdOss/XrdOssCache.hh" #include "XrdOss/XrdOssConfig.hh" diff --git a/src/XrdOss/XrdOssUnlink.cc b/src/XrdOss/XrdOssUnlink.cc index d9cd9e48efe..36031a2dcd2 100644 --- a/src/XrdOss/XrdOssUnlink.cc +++ b/src/XrdOss/XrdOssUnlink.cc @@ -38,6 +38,7 @@ #include #include "XrdSys/XrdSysHeaders.hh" +#include "XrdSys/XrdSysPlatform.hh" #include "XrdOss/XrdOssApi.hh" #include "XrdOss/XrdOssCache.hh" #include "XrdOss/XrdOssConfig.hh" diff --git a/src/XrdOuc/XrdOucBackTrace.cc b/src/XrdOuc/XrdOucBackTrace.cc index 8d3ffb0e497..c4624417e8f 100644 --- a/src/XrdOuc/XrdOucBackTrace.cc +++ b/src/XrdOuc/XrdOucBackTrace.cc @@ -44,6 +44,9 @@ #if defined(__linux__) || defined(__APPLE__) #define TidType long long #define TidFmt "%lld" +#elif defined(__GNU__) +#define TidType pthread_t // int +#define TidFmt "%d" #else #define TidType pthread_t #define TidFmt "%p" diff --git a/src/XrdOuc/XrdOucStream.cc b/src/XrdOuc/XrdOucStream.cc index 9bbb51b8d5a..e80caa6a0f5 100644 --- a/src/XrdOuc/XrdOucStream.cc +++ b/src/XrdOuc/XrdOucStream.cc @@ -36,10 +36,7 @@ #include #include #include -#if !defined(__linux__) && !defined(__CYGWIN__) -#ifdef __FreeBSD__ -#include -#endif +#if !defined(__linux__) && !defined(__CYGWIN__) && !defined(__GNU__) #include #endif #include diff --git a/src/XrdPfc/XrdPfcFile.cc b/src/XrdPfc/XrdPfcFile.cc index b658b6497c7..2226ca61f14 100644 --- a/src/XrdPfc/XrdPfcFile.cc +++ b/src/XrdPfc/XrdPfcFile.cc @@ -1239,7 +1239,7 @@ void File::ProcessBlockResponse(BlockResponseHandler* brh, int res) TRACEF(Error, tpfx << "block " << b << ", idx=" << b->m_offset/BufferSize() << ", off=" << b->m_offset << " error=" << res); } else { TRACEF(Error, tpfx << "block " << b << ", idx=" << b->m_offset/BufferSize() << ", off=" << b->m_offset << " incomplete, got " << res << " expected " << b->get_size()); -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__GNU__) res = -EIO; #else res = -EREMOTEIO; diff --git a/src/XrdPosix/XrdPosix.cc b/src/XrdPosix/XrdPosix.cc index f582eb4617c..3cdcb43cf82 100644 --- a/src/XrdPosix/XrdPosix.cc +++ b/src/XrdPosix/XrdPosix.cc @@ -213,7 +213,7 @@ int XrdPosix_Fdatasync(int fildes) /* X r d P o s i x _ F g e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { long long XrdPosix_Fgetxattr (int fd, const char *name, void *value, @@ -310,7 +310,7 @@ size_t XrdPosix_Fread(void *ptr, size_t size, size_t nitems, FILE *stream) // if (bytes > 0 && size) rc = bytes/size; #ifndef SUNX86 -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) else if (bytes < 0) stream->_flags |= _IO_ERR_SEEN; else stream->_flags |= _IO_EOF_SEEN; #elif defined(__APPLE__) || defined(__FreeBSD__) @@ -481,7 +481,7 @@ size_t XrdPosix_Fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream // if (bytes > 0 && size) rc = bytes/size; #ifndef SUNX86 -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) else stream->_flags |= _IO_ERR_SEEN; #elif defined(__APPLE__) || defined(__FreeBSD__) else stream->_flags |= __SERR; @@ -498,7 +498,7 @@ size_t XrdPosix_Fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream /* X r d P o s i x _ G e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { long long XrdPosix_Getxattr (const char *path, const char *name, void *value, @@ -518,7 +518,7 @@ long long XrdPosix_Getxattr (const char *path, const char *name, void *value, /* X r d P o s i x _ L g e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { long long XrdPosix_Lgetxattr (const char *path, const char *name, void *value, diff --git a/src/XrdPosix/XrdPosixDir.cc b/src/XrdPosix/XrdPosixDir.cc index 445512c17fc..c190aa97c12 100644 --- a/src/XrdPosix/XrdPosixDir.cc +++ b/src/XrdPosix/XrdPosixDir.cc @@ -73,7 +73,7 @@ dirent64 *XrdPosixDir::nextEntry(dirent64 *dp) #ifndef __solaris__ dp->d_type = DT_DIR; #endif -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__GNU__) dp->d_fileno = nxtEnt; dp->d_namlen = d_nlen; #else diff --git a/src/XrdPosix/XrdPosixExtern.hh b/src/XrdPosix/XrdPosixExtern.hh index 3356ecba70d..d3e08cc158f 100644 --- a/src/XrdPosix/XrdPosixExtern.hh +++ b/src/XrdPosix/XrdPosixExtern.hh @@ -100,7 +100,7 @@ extern int XrdPosix_Fdatasync(int fildes); extern int XrdPosix_Fflush(FILE *stream); -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern long long XrdPosix_Fgetxattr (int fd, const char *name, void *value, unsigned long long size); #endif @@ -129,7 +129,7 @@ extern int XrdPosix_Ftruncate(int fildes, long long offset); extern size_t XrdPosix_Fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern long long XrdPosix_Getxattr (const char *path, const char *name, void *value, unsigned long long size); diff --git a/src/XrdPosix/XrdPosixInfo.hh b/src/XrdPosix/XrdPosixInfo.hh index ec0d5f20721..ce1f863ead5 100644 --- a/src/XrdPosix/XrdPosixInfo.hh +++ b/src/XrdPosix/XrdPosixInfo.hh @@ -32,6 +32,7 @@ #include #include +#include class XrdPosixCallBack; diff --git a/src/XrdPosix/XrdPosixOsDep.hh b/src/XrdPosix/XrdPosixOsDep.hh index 59672088da8..a3143e385b3 100644 --- a/src/XrdPosix/XrdPosixOsDep.hh +++ b/src/XrdPosix/XrdPosixOsDep.hh @@ -72,4 +72,8 @@ #define ELIBACC EFTYPE #endif +#ifdef __GNU__ +#define ELIBACC EFTYPE +#endif + #endif diff --git a/src/XrdPosix/XrdPosixPreload.cc b/src/XrdPosix/XrdPosixPreload.cc index 3169b46bb85..07cfca04a4c 100644 --- a/src/XrdPosix/XrdPosixPreload.cc +++ b/src/XrdPosix/XrdPosixPreload.cc @@ -351,7 +351,7 @@ size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream) /* f g e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { ssize_t fgetxattr (int fd, const char *name, void *value, size_t size) @@ -367,7 +367,7 @@ ssize_t fgetxattr (int fd, const char *name, void *value, size_t size) /* g e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { ssize_t getxattr (const char *path, const char *name, void *value, size_t size) @@ -383,7 +383,7 @@ ssize_t getxattr (const char *path, const char *name, void *value, size_t size) /* l g e t x a t t r */ /******************************************************************************/ -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) extern "C" { ssize_t lgetxattr (const char *path, const char *name, void *value, size_t size) diff --git a/src/XrdPosix/XrdPosixPreload32.cc b/src/XrdPosix/XrdPosixPreload32.cc index fa2343afcef..adc916963b6 100644 --- a/src/XrdPosix/XrdPosixPreload32.cc +++ b/src/XrdPosix/XrdPosixPreload32.cc @@ -85,7 +85,7 @@ namespace {bool isLite = (getenv("XRD_POSIX_PRELOAD_LITE") != 0);} // making CopyDirent() superfluous. In Solaris x86 there are no 32 bit interfaces. // #if !defined(__LP64__) && !defined(_LP64) -#if !defined(__APPLE__) && !defined(SUNX86) && !defined(__FreeBSD__) +#if !defined(__APPLE__) && !defined(SUNX86) && !defined(__FreeBSD__) && !defined(__GNU__) int XrdPosix_CopyDirent(struct dirent *dent, struct dirent64 *dent64) { const unsigned long long LLMask = 0xffffffff00000000LL; @@ -390,7 +390,7 @@ struct dirent* readdir(DIR *dirp) else if (!(dp64 = XrdPosix_Readdir64(dirp))) return 0; -#if !defined(__APPLE__) && !defined(_LP64) && !defined(__LP64__) +#if !defined(__APPLE__) && !defined(_LP64) && !defined(__LP64__) && !defined(__GNU__) if (XrdPosix_CopyDirent((struct dirent *)dp64, dp64)) return 0; #endif @@ -409,7 +409,7 @@ extern "C" int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) { static int Init = Xunix.Init(&Init); -#if defined(__APPLE__) || defined(__LP64__) || defined(_LP64) +#if defined(__APPLE__) || defined(__LP64__) || defined(_LP64) || defined(__GNU__) return XrdPosix_Readdir_r(dirp, entry, result); #else char buff[sizeof(struct dirent64) + 2048]; diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc index cb2b0c97647..ae784572195 100644 --- a/src/XrdPosix/XrdPosixXrootd.cc +++ b/src/XrdPosix/XrdPosixXrootd.cc @@ -949,7 +949,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp) dp32 = (struct dirent *)dp64; if (dp32->d_name != dp64->d_name) {dp32->d_ino = dp64->d_ino; -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) dp32->d_off = dp64->d_off; #endif #ifndef __solaris__ @@ -998,7 +998,7 @@ int XrdPosixXrootd::Readdir_r(DIR *dirp, struct dirent *entry, {*result = 0; return rc;} entry->d_ino = dp64->d_ino; -#if !defined(__APPLE__) && !defined(__FreeBSD__) +#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) entry->d_off = dp64->d_off; #endif #ifndef __solaris__ @@ -1196,10 +1196,10 @@ int XrdPosixXrootd::Statfs(const char *path, struct statfs *buf) #else buf->f_frsize = myVfs.f_frsize; #endif -#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__GNU__) buf->f_bavail = myVfs.f_bavail; #endif -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) buf->f_namelen = myVfs.f_namemax; #elif defined(__FreeBSD__) buf->f_namemax = myVfs.f_namemax; diff --git a/src/XrdPosix/XrdPosixXrootdPath.cc b/src/XrdPosix/XrdPosixXrootdPath.cc index 33557042d30..2dfba176403 100644 --- a/src/XrdPosix/XrdPosixXrootdPath.cc +++ b/src/XrdPosix/XrdPosixXrootdPath.cc @@ -39,6 +39,7 @@ #include "XrdPosix/XrdPosixTrace.hh" #include "XrdPosix/XrdPosixXrootdPath.hh" #include "XrdSys/XrdSysHeaders.hh" +#include "XrdSys/XrdSysPlatform.hh" /******************************************************************************/ /* S t a t i c s */ diff --git a/src/XrdSecpwd/XrdSecpwdPlatform.hh b/src/XrdSecpwd/XrdSecpwdPlatform.hh index e17f0abb7aa..744ecd870e1 100644 --- a/src/XrdSecpwd/XrdSecpwdPlatform.hh +++ b/src/XrdSecpwd/XrdSecpwdPlatform.hh @@ -31,7 +31,7 @@ // // crypt // -#if defined(__linux__) || defined(__solaris__) +#if defined(__linux__) || defined(__solaris__) || defined(__GNU__) #include #endif #if defined(__osf__) || defined(__sgi) || defined(__APPLE__) diff --git a/src/XrdSfs/XrdSfsFAttr.hh b/src/XrdSfs/XrdSfsFAttr.hh index 396cf10c044..e0b8cb6039a 100644 --- a/src/XrdSfs/XrdSfsFAttr.hh +++ b/src/XrdSfs/XrdSfsFAttr.hh @@ -46,7 +46,7 @@ char *Name; //!< Variable name char *Value; //!< Variable value int VLen; //!< Variable value length (aligned) short NLen; //!< Length of name not including null byte -short faRC; //!< Action return code for this element +int faRC; //!< Action return code for this element XrdSfsFAInfo() : Value(0), VLen(0), NLen(0), faRC(0) {} ~XrdSfsFAInfo() {} diff --git a/src/XrdSfs/XrdSfsNative.cc b/src/XrdSfs/XrdSfsNative.cc index 370a9dc2180..7ccef627e2c 100644 --- a/src/XrdSfs/XrdSfsNative.cc +++ b/src/XrdSfs/XrdSfsNative.cc @@ -197,7 +197,7 @@ const char *XrdSfsNativeDirectory::nextEntry() // Read the next directory entry // -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) errno = 0; rp = readdir(dh); if (!rp) diff --git a/src/XrdSsi/XrdSsiClient.cc b/src/XrdSsi/XrdSsiClient.cc index 00aadddc91e..b2c59f1ebf6 100644 --- a/src/XrdSsi/XrdSsiClient.cc +++ b/src/XrdSsi/XrdSsiClient.cc @@ -275,7 +275,7 @@ void XrdSsiClientProvider::SetLogger() // Get a file descriptor mirroring standard error // -#if defined(__linux__) && defined(O_CLOEXEC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(F_DUPFD_CLOEXEC) eFD = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 0); #else eFD = dup(STDERR_FILENO); diff --git a/src/XrdSsi/XrdSsiShMam.cc b/src/XrdSsi/XrdSsiShMam.cc index 61218165d77..0ef76b859c8 100644 --- a/src/XrdSsi/XrdSsiShMam.cc +++ b/src/XrdSsi/XrdSsiShMam.cc @@ -154,7 +154,7 @@ pthread_rwlock_t *mtxP; namespace { -#if defined(__linux__) && defined(O_CLOEXEC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(O_CLOEXEC) && defined(F_DUPFD_CLOEXEC) inline int ShMam_Dup(int oldfd) {return fcntl(oldfd, F_DUPFD_CLOEXEC, 0);} diff --git a/src/XrdSys/XrdSysE2T.cc b/src/XrdSys/XrdSysE2T.cc index 510445e2dc5..20f3a8e477b 100644 --- a/src/XrdSys/XrdSysE2T.cc +++ b/src/XrdSys/XrdSysE2T.cc @@ -34,6 +34,12 @@ #include "XrdSys/XrdSysPthread.hh" +#ifdef __GNU__ +#define ERRNOBASE 0x40000000 +#else +#define ERRNOBASE 0 +#endif + namespace { static const int errSlots = 144; @@ -49,7 +55,7 @@ int initErrTable() // Premap all known error codes. // for(int i = 1; i = 0 && errcode <= maxErrno) return Errno2String[errcode]; + if (errcode == 0) return Errno2String[0]; + if (errcode > ERRNOBASE && errcode <= ERRNOBASE + maxErrno) + return Errno2String[errcode - ERRNOBASE]; // If this is a negative value, then return a generic message // if (errcode < 0) return "negative error"; -// Out errrno registration wasn't sufficient, so check if it's already +// Our errno registration wasn't sufficient, so check if it's already // registered and if not, register it. // e2sMutex.Lock(); diff --git a/src/XrdSys/XrdSysFAttr.cc b/src/XrdSys/XrdSysFAttr.cc index 37ba560bdbc..2681f60ba01 100644 --- a/src/XrdSys/XrdSysFAttr.cc +++ b/src/XrdSys/XrdSysFAttr.cc @@ -68,28 +68,23 @@ XrdSysXAttr *XrdSysFAttr::Xat = &dfltXAttr; #if defined(__FreeBSD__) #include "XrdSys/XrdSysFAttrBsd.icc" -#elif defined(__linux__) +#elif defined(__linux__) || defined(__GNU__) #include "XrdSys/XrdSysFAttrLnx.icc" #elif defined(__APPLE__) #include "XrdSys/XrdSysFAttrMac.icc" #elif defined(__solaris__) #include "XrdSys/XrdSysFAttrSun.icc" #else -int XrdSysFAttr::Del(const char *Aname, const char *Path) +int XrdSysFAttr::Del(const char *Aname, const char *Path, int fd) {return -ENOTSUP;} -int XrdSysFAttr::Del(const char *Aname, int fd) +int XrdSysFAttr::List(AList **aPL, const char *Path, int fd, int getSz) {return -ENOTSUP;} -int XrdSysFAttr::Get(const char *Aname, void *Aval, int Avsz, const char *Path) - {return -ENOTSUP;} -int XrdSysFAttr::Get(const char *Aname, void *Aval, int Avsz, int fd) - {return -ENOTSUP;} -int XrdSysFAttr::Set(const char *Aname, const void *Aval, int Avsz, - const char *Path, int isNew) +int XrdSysFAttr::Get(const char *Aname, void *Aval, int Avsz, + const char *Path, int fd) {return -ENOTSUP;} int XrdSysFAttr::Set(const char *Aname, const void *Aval, int Avsz, - int fd, int isNew) + const char *Path, int fd, int isNew) {return -ENOTSUP;} -int XrdSysFAttr::Set(XrdSysError *erp) {return 0;} #endif /******************************************************************************/ diff --git a/src/XrdSys/XrdSysFD.hh b/src/XrdSys/XrdSysFD.hh index 561fed03726..863ef481471 100644 --- a/src/XrdSys/XrdSysFD.hh +++ b/src/XrdSys/XrdSysFD.hh @@ -47,7 +47,7 @@ namespace { -#if defined(__linux__) && defined(SOCK_CLOEXEC) && defined(O_CLOEXEC) +#if ( defined(__linux__) || defined(__GNU__) ) && defined(SOCK_CLOEXEC) && defined(O_CLOEXEC) inline int XrdSysFD_Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {return accept4(sockfd, addr, addrlen, SOCK_CLOEXEC);} @@ -124,7 +124,7 @@ inline DIR* XrdSysFD_OpenDir(const char *path) if (fd < 0) return 0; fcntl(fd, F_SETFD, FD_CLOEXEC); DIR *dP = fdopendir(fd); - if (!dP) {int rc = errno, close(fd); errno = rc;} + if (!dP) {int rc = errno; close(fd); errno = rc;} return dP; } diff --git a/src/XrdSys/XrdSysPlatform.hh b/src/XrdSys/XrdSysPlatform.hh index 82f6599095d..a0d90e05cd5 100644 --- a/src/XrdSys/XrdSysPlatform.hh +++ b/src/XrdSys/XrdSysPlatform.hh @@ -32,17 +32,20 @@ // Include stdlib so that ENDIAN macros are defined properly // #include + #ifdef __linux__ #include #include #include -#include +#include #include #define MAXNAMELEN NAME_MAX #endif + #ifdef __APPLE__ #include #include +#include #define fdatasync(x) fsync(x) #define MAXNAMELEN NAME_MAX #ifndef dirent64 @@ -58,8 +61,29 @@ #endif #endif #endif + #ifdef __FreeBSD__ #include +#include +#define MAXNAMELEN NAME_MAX +#endif + +#ifdef __GNU__ +#include +#include +// These are undefined on purpose in GNU/Hurd. +// The values below are the ones used in Linux. +// The proper fix is to rewrite the code to not use hardcoded values, +// but instead allocate memory dynamically at runtime when sizes are known. +// This is true also for systems where these constants are defined. +#define MAXNAMELEN 255 +#define MAXPATHLEN 4096 +#define MAXHOSTNAMELEN 64 +#endif + +#ifdef WIN32 +#define MAXNAMELEN 256 +#define MAXPATHLEN 1024 #endif // The following provides historical support for Solaris 5.10.x @@ -70,7 +94,7 @@ #define __USE_LEGACY_PROTOTYPES__ 1 #endif -#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__GNU__) #define S_IAMB 0x1FF /* access mode bits */ @@ -112,7 +136,6 @@ typedef off_t offset_t; // For alternative platforms // #ifdef __APPLE__ -#include #ifndef POLLRDNORM #define POLLRDNORM 0 #endif @@ -216,8 +239,8 @@ extern "C" # endif # endif #endif -#if defined(__MACH__) && defined(__i386__) -# define R__GLIBC +#if defined(__GNU__) +# define XR__GLIBC #endif #if defined(_AIX) || \ (defined(XR__SUNGCC3) && !defined(__arch64__)) @@ -257,15 +280,6 @@ extern "C" #define net_errno errno #endif -#ifdef WIN32 -#define MAXNAMELEN 256 -#define MAXPATHLEN 1024 -#else -#include -#if defined(__FreeBSD__) -#define MAXNAMELEN 256 -#endif -#endif // The following gets arround a relative new gcc compiler bug // #define XRDABS(x) (x < 0 ? -x : x) diff --git a/src/XrdSys/XrdSysPthread.cc b/src/XrdSys/XrdSysPthread.cc index 39addf6f4ec..d8375460c94 100644 --- a/src/XrdSys/XrdSysPthread.cc +++ b/src/XrdSys/XrdSysPthread.cc @@ -167,7 +167,7 @@ int XrdSysCondVar::WaitMS(int msec) /* C o n d W a i t */ /******************************************************************************/ -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__GNU__) int XrdSysSemaphore::CondWait() { @@ -188,7 +188,7 @@ int XrdSysSemaphore::CondWait() void XrdSysSemaphore::Post() { // Add one to the semaphore counter. If we the value is > 0 and there is a -// thread waiting for the sempagore, signal it to get the semaphore. +// thread waiting for the semaphore, signal it to get the semaphore. // semVar.Lock(); semVal++; diff --git a/src/XrdSys/XrdSysPthread.hh b/src/XrdSys/XrdSysPthread.hh index aae295b5dc6..a673c204833 100644 --- a/src/XrdSys/XrdSysPthread.hh +++ b/src/XrdSys/XrdSysPthread.hh @@ -374,7 +374,7 @@ XrdSysRWLock *lck; // semaphores need to be implemented based on condition // variables since no native implementation is available. -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__GNU__) class XrdSysSemaphore { public: diff --git a/src/XrdSys/XrdSysUtils.cc b/src/XrdSys/XrdSysUtils.cc index 994ca569197..6d0b52fab13 100644 --- a/src/XrdSys/XrdSysUtils.cc +++ b/src/XrdSys/XrdSysUtils.cc @@ -71,7 +71,7 @@ const char *XrdSysUtils::ExecName() // Get the exec name based on platform // -#ifdef __linux__ +#if defined(__linux__) || defined(__GNU__) {char epBuff[2048]; int epLen; if ((epLen = readlink("/proc/self/exe", epBuff, sizeof(epBuff)-1)) > 0) diff --git a/src/XrdThrottle/XrdThrottleManager.cc b/src/XrdThrottle/XrdThrottleManager.cc index 83e26a829a0..963f17d55b8 100644 --- a/src/XrdThrottle/XrdThrottleManager.cc +++ b/src/XrdThrottle/XrdThrottleManager.cc @@ -15,7 +15,7 @@ XrdThrottleManager::TraceID = "ThrottleManager"; const int XrdThrottleManager::m_max_users = 1024; -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) int clock_id; int XrdThrottleTimer::clock_id = clock_getcpuclockid(0, &clock_id) != ENOENT ? CLOCK_THREAD_CPUTIME_ID : CLOCK_MONOTONIC; #else diff --git a/src/XrdThrottle/XrdThrottleManager.hh b/src/XrdThrottle/XrdThrottleManager.hh index 86af12fc573..8ab27ef9d46 100644 --- a/src/XrdThrottle/XrdThrottleManager.hh +++ b/src/XrdThrottle/XrdThrottleManager.hh @@ -141,7 +141,7 @@ public: void StopTimer() { struct timespec end_timer = {0, 0}; -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) int retval = clock_gettime(clock_id, &end_timer); #else int retval = -1; @@ -177,7 +177,7 @@ protected: XrdThrottleTimer(XrdThrottleManager & manager) : m_manager(manager) { -#if defined(__linux__) +#if defined(__linux__) || defined(__GNU__) int retval = clock_gettime(clock_id, &m_timer); #else int retval = -1; diff --git a/src/XrdXrootd/XrdXrootdXeqFAttr.cc b/src/XrdXrootd/XrdXrootdXeqFAttr.cc index ed66d6fd7eb..6129d3ac9ba 100644 --- a/src/XrdXrootd/XrdXrootdXeqFAttr.cc +++ b/src/XrdXrootd/XrdXrootdXeqFAttr.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include "XProtocol/XProtocol.hh" #include "Xrd/XrdBuffer.hh" @@ -179,7 +180,19 @@ class IOVec { public: struct iovec *Alloc(int &num) - {if (num > IOV_MAX) num = IOV_MAX; + {static int iovmax = -1; + if (iovmax == -1) { +#ifdef _SC_IOV_MAX + iovmax = sysconf(_SC_IOV_MAX); + if (iovmax == -1) +#endif +#ifdef IOV_MAX + iovmax = IOV_MAX; +#else + iovmax = 1024; +#endif + } + if (num > iovmax) num = iovmax; theIOV = new struct iovec[num]; return theIOV; }