diff options
Diffstat (limited to 'Source/kwsys/SystemTools.cxx')
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 299 |
1 files changed, 151 insertions, 148 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 7743e4e..0079da2 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -1,18 +1,19 @@ /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing#kwsys for details. */ #ifdef __osf__ -#define _OSF_SOURCE -#define _POSIX_C_SOURCE 199506L -#define _XOPEN_SOURCE_EXTENDED +# define _OSF_SOURCE +# define _POSIX_C_SOURCE 199506L +# define _XOPEN_SOURCE_EXTENDED #endif -#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || \ - defined(__BORLANDC__) || defined(__MINGW32__)) -#define KWSYS_WINDOWS_DIRS +#if defined(_WIN32) && \ + (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || \ + defined(__MINGW32__)) +# define KWSYS_WINDOWS_DIRS #else -#if defined(__SUNPRO_CC) -#include <fcntl.h> -#endif +# if defined(__SUNPRO_CC) +# include <fcntl.h> +# endif #endif #include "kwsysPrivate.h" @@ -32,25 +33,25 @@ // Work-around CMake dependency scanning limitation. This must // duplicate the above list of headers. #if 0 -#include "Directory.hxx.in" -#include "Encoding.hxx.in" -#include "FStream.hxx.in" -#include "RegularExpression.hxx.in" -#include "SystemTools.hxx.in" +# include "Directory.hxx.in" +# include "Encoding.hxx.in" +# include "FStream.hxx.in" +# include "RegularExpression.hxx.in" +# include "SystemTools.hxx.in" #endif #ifdef _MSC_VER -#pragma warning(disable : 4786) +# pragma warning(disable : 4786) #endif #if defined(__sgi) && !defined(__GNUC__) -#pragma set woff 1375 /* base class destructor not virtual */ +# pragma set woff 1375 /* base class destructor not virtual */ #endif #include <ctype.h> #include <errno.h> #ifdef __QNX__ -#include <malloc.h> /* for malloc/free on QNX */ +# include <malloc.h> /* for malloc/free on QNX */ #endif #include <stdio.h> #include <stdlib.h> @@ -58,42 +59,42 @@ #include <time.h> #if defined(_WIN32) && !defined(_MSC_VER) && defined(__GNUC__) -#include <strings.h> /* for strcasecmp */ +# include <strings.h> /* for strcasecmp */ #endif #ifdef _MSC_VER -#define umask _umask // Note this is still umask on Borland +# define umask _umask // Note this is still umask on Borland #endif // support for realpath call #ifndef _WIN32 -#include <limits.h> -#include <pwd.h> -#include <sys/ioctl.h> -#include <sys/time.h> -#include <sys/wait.h> -#include <unistd.h> -#include <utime.h> -#ifndef __VMS -#include <sys/param.h> -#include <termios.h> -#endif -#include <signal.h> /* sigprocmask */ +# include <limits.h> +# include <pwd.h> +# include <sys/ioctl.h> +# include <sys/time.h> +# include <sys/wait.h> +# include <unistd.h> +# include <utime.h> +# ifndef __VMS +# include <sys/param.h> +# include <termios.h> +# endif +# include <signal.h> /* sigprocmask */ #endif // Windows API. #if defined(_WIN32) -#include <windows.h> -#include <winioctl.h> -#ifndef INVALID_FILE_ATTRIBUTES -#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) -#endif -#if defined(_MSC_VER) && _MSC_VER >= 1800 -#define KWSYS_WINDOWS_DEPRECATED_GetVersionEx -#endif +# include <windows.h> +# include <winioctl.h> +# ifndef INVALID_FILE_ATTRIBUTES +# define INVALID_FILE_ATTRIBUTES ((DWORD)-1) +# endif +# if defined(_MSC_VER) && _MSC_VER >= 1800 +# define KWSYS_WINDOWS_DEPRECATED_GetVersionEx +# endif #elif defined(__CYGWIN__) -#include <windows.h> -#undef _WIN32 +# include <windows.h> +# undef _WIN32 #endif #if !KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H @@ -101,18 +102,18 @@ extern char** environ; #endif #ifdef __CYGWIN__ -#include <sys/cygwin.h> +# include <sys/cygwin.h> #endif // getpwnam doesn't exist on Windows and Cray Xt3/Catamount // same for TIOCGWINSZ #if defined(_WIN32) || defined(__LIBCATAMOUNT__) || \ (defined(HAVE_GETPWNAM) && HAVE_GETPWNAM == 0) -#undef HAVE_GETPWNAM -#undef HAVE_TTY_INFO +# undef HAVE_GETPWNAM +# undef HAVE_TTY_INFO #else -#define HAVE_GETPWNAM 1 -#define HAVE_TTY_INFO 1 +# define HAVE_GETPWNAM 1 +# define HAVE_TTY_INFO 1 #endif #define VTK_URL_PROTOCOL_REGEX "([a-zA-Z0-9]*)://(.*)" @@ -121,15 +122,15 @@ extern char** environ; "(.+)?" #ifdef _MSC_VER -#include <sys/utime.h> +# include <sys/utime.h> #else -#include <utime.h> +# include <utime.h> #endif // This is a hack to prevent warnings about these functions being // declared but not referenced. #if defined(__sgi) && !defined(__GNUC__) -#include <sys/termios.h> +# include <sys/termios.h> namespace KWSYS_NAMESPACE { class SystemToolsHack { @@ -147,32 +148,33 @@ public: } #endif -#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || \ - defined(__BORLANDC__) || defined(__MINGW32__)) -#include <direct.h> -#include <io.h> -#define _unlink unlink +#if defined(_WIN32) && \ + (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || \ + defined(__MINGW32__)) +# include <direct.h> +# include <io.h> +# define _unlink unlink #endif /* The maximum length of a file name. */ #if defined(PATH_MAX) -#define KWSYS_SYSTEMTOOLS_MAXPATH PATH_MAX +# define KWSYS_SYSTEMTOOLS_MAXPATH PATH_MAX #elif defined(MAXPATHLEN) -#define KWSYS_SYSTEMTOOLS_MAXPATH MAXPATHLEN +# define KWSYS_SYSTEMTOOLS_MAXPATH MAXPATHLEN #else -#define KWSYS_SYSTEMTOOLS_MAXPATH 16384 +# define KWSYS_SYSTEMTOOLS_MAXPATH 16384 #endif #if defined(__WATCOMC__) -#include <direct.h> -#define _mkdir mkdir -#define _rmdir rmdir -#define _getcwd getcwd -#define _chdir chdir +# include <direct.h> +# define _mkdir mkdir +# define _rmdir rmdir +# define _getcwd getcwd +# define _chdir chdir #endif #if defined(__BEOS__) && !defined(__ZETA__) -#include <be/kernel/OS.h> -#include <be/storage/Path.h> +# include <be/kernel/OS.h> +# include <be/storage/Path.h> // BeOS 5 doesn't have usleep(), but it has snooze(), which is identical. static inline void usleep(unsigned int msec) @@ -213,7 +215,7 @@ static time_t windows_filetime_to_posix_time(const FILETIME& ft) #endif #ifdef KWSYS_WINDOWS_DIRS -#include <wctype.h> +# include <wctype.h> inline int Mkdir(const std::string& dir) { @@ -245,11 +247,11 @@ inline const char* Getcwd(char* buf, unsigned int len) } inline int Chdir(const std::string& dir) { -#if defined(__BORLANDC__) +# if defined(__BORLANDC__) return chdir(dir.c_str()); -#else +# else return _wchdir(KWSYS_NAMESPACE::Encoding::ToWide(dir).c_str()); -#endif +# endif } inline void Realpath(const std::string& path, std::string& resolved_path, std::string* errorMessage = 0) @@ -284,10 +286,10 @@ inline void Realpath(const std::string& path, std::string& resolved_path, } } #else -#include <sys/types.h> +# include <sys/types.h> -#include <fcntl.h> -#include <unistd.h> +# include <fcntl.h> +# include <unistd.h> inline int Mkdir(const std::string& dir) { return mkdir(dir.c_str(), 00777); @@ -429,13 +431,13 @@ struct SystemToolsPathCaseCmp { bool operator()(std::string const& l, std::string const& r) const { -#ifdef _MSC_VER +# ifdef _MSC_VER return _stricmp(l.c_str(), r.c_str()) < 0; -#elif defined(__GNUC__) +# elif defined(__GNUC__) return strcasecmp(l.c_str(), r.c_str()) < 0; -#else +# else return SystemTools::Strucmp(l.c_str(), r.c_str()) < 0; -#endif +# endif } }; @@ -672,9 +674,9 @@ bool SystemTools::UnPutEnv(const std::string& env) environment values that may still reference memory we allocated. Then free the memory. This will not affect any environment values we never set. */ -#ifdef __INTEL_COMPILER -#pragma warning disable 444 /* base has non-virtual destructor */ -#endif +# ifdef __INTEL_COMPILER +# pragma warning disable 444 /* base has non-virtual destructor */ +# endif class kwsysEnv : public kwsysEnvSet { @@ -682,39 +684,39 @@ public: ~kwsysEnv() { for (iterator i = this->begin(); i != this->end(); ++i) { -#if defined(_WIN32) +# if defined(_WIN32) const std::string s = Encoding::ToNarrow(*i); kwsysUnPutEnv(s.c_str()); -#else +# else kwsysUnPutEnv(*i); -#endif +# endif free(const_cast<envchar*>(*i)); } } bool Put(const char* env) { -#if defined(_WIN32) +# if defined(_WIN32) const std::wstring wEnv = Encoding::ToWide(env); wchar_t* newEnv = _wcsdup(wEnv.c_str()); -#else +# else char* newEnv = strdup(env); -#endif +# endif Free oldEnv(this->Release(newEnv)); this->insert(newEnv); -#if defined(_WIN32) +# if defined(_WIN32) return _wputenv(newEnv) == 0; -#else +# else return putenv(newEnv) == 0; -#endif +# endif } bool UnPut(const char* env) { -#if defined(_WIN32) +# if defined(_WIN32) const std::wstring wEnv = Encoding::ToWide(env); Free oldEnv(this->Release(wEnv.c_str())); -#else +# else Free oldEnv(this->Release(env)); -#endif +# endif return kwsysUnPutEnv(env) == 0; } }; @@ -792,7 +794,7 @@ bool SystemTools::MakeDirectory(const std::string& path, const mode_t* mode) #ifdef __BORLANDC__ && (errno != EACCES) #endif - ) { + ) { return false; } } else if (mode != KWSYS_NULLPTR) { @@ -862,13 +864,13 @@ void SystemTools::ReplaceString(std::string& source, const char* replace, #if defined(_WIN32) && !defined(__CYGWIN__) -#if defined(KEY_WOW64_32KEY) && defined(KEY_WOW64_64KEY) -#define KWSYS_ST_KEY_WOW64_32KEY KEY_WOW64_32KEY -#define KWSYS_ST_KEY_WOW64_64KEY KEY_WOW64_64KEY -#else -#define KWSYS_ST_KEY_WOW64_32KEY 0x0200 -#define KWSYS_ST_KEY_WOW64_64KEY 0x0100 -#endif +# if defined(KEY_WOW64_32KEY) && defined(KEY_WOW64_64KEY) +# define KWSYS_ST_KEY_WOW64_32KEY KEY_WOW64_32KEY +# define KWSYS_ST_KEY_WOW64_64KEY KEY_WOW64_64KEY +# else +# define KWSYS_ST_KEY_WOW64_32KEY 0x0200 +# define KWSYS_ST_KEY_WOW64_64KEY 0x0100 +# endif static bool SystemToolsParseRegistryKey(const std::string& key, HKEY& primaryKey, std::string& second, @@ -1200,11 +1202,11 @@ bool SystemTools::FileExists(const std::string& filename) INVALID_FILE_ATTRIBUTES); #else // SCO OpenServer 5.0.7/3.2's command has 711 permission. -#if defined(_SCO_DS) +# if defined(_SCO_DS) return access(filename.c_str(), F_OK) == 0; -#else +# else return access(filename.c_str(), R_OK) == 0; -#endif +# endif #endif } @@ -1276,11 +1278,11 @@ int SystemTools::Stat(const std::string& path, SystemTools::Stat_t* buf) // long paths, but _wstat64 rejects paths with '?' in them, thinking // they are wildcards. std::wstring const& wpath = Encoding::ToWide(path); -#if defined(__BORLANDC__) +# if defined(__BORLANDC__) return _wstati64(wpath.c_str(), buf); -#else +# else return _wstat64(wpath.c_str(), buf); -#endif +# endif #else return stat(path.c_str(), buf); #endif @@ -1346,28 +1348,28 @@ bool SystemTools::Touch(const std::string& filename, bool create) } struct timeval mtime; gettimeofday(&mtime, 0); -#if KWSYS_CXX_HAS_UTIMES +# if KWSYS_CXX_HAS_UTIMES struct timeval atime; -#if KWSYS_CXX_STAT_HAS_ST_MTIM +# if KWSYS_CXX_STAT_HAS_ST_MTIM atime.tv_sec = st.st_atim.tv_sec; atime.tv_usec = st.st_atim.tv_nsec / 1000; -#elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC +# elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC atime.tv_sec = st.st_atimespec.tv_sec; atime.tv_usec = st.st_atimespec.tv_nsec / 1000; -#else +# else atime.tv_sec = st.st_atime; atime.tv_usec = 0; -#endif +# endif struct timeval times[2] = { atime, mtime }; if (utimes(filename.c_str(), times) < 0) { return false; } -#else +# else struct utimbuf times = { st.st_atime, mtime.tv_sec }; if (utime(filename.c_str(), ×) < 0) { return false; } -#endif +# endif #endif return true; } @@ -1387,7 +1389,7 @@ bool SystemTools::FileTimeCompare(const std::string& f1, const std::string& f2, if (stat(f2.c_str(), &s2) != 0) { return false; } -#if KWSYS_CXX_STAT_HAS_ST_MTIM +# if KWSYS_CXX_STAT_HAS_ST_MTIM // Compare using nanosecond resolution. if (s1.st_mtim.tv_sec < s2.st_mtim.tv_sec) { *result = -1; @@ -1398,7 +1400,7 @@ bool SystemTools::FileTimeCompare(const std::string& f1, const std::string& f2, } else if (s1.st_mtim.tv_nsec > s2.st_mtim.tv_nsec) { *result = 1; } -#elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC +# elif KWSYS_CXX_STAT_HAS_ST_MTIMESPEC // Compare using nanosecond resolution. if (s1.st_mtimespec.tv_sec < s2.st_mtimespec.tv_sec) { *result = -1; @@ -1409,14 +1411,14 @@ bool SystemTools::FileTimeCompare(const std::string& f1, const std::string& f2, } else if (s1.st_mtimespec.tv_nsec > s2.st_mtimespec.tv_nsec) { *result = 1; } -#else +# else // Compare using 1 second resolution. if (s1.st_mtime < s2.st_mtime) { *result = -1; } else if (s1.st_mtime > s2.st_mtime) { *result = 1; } -#endif +# endif #else // Windows version. Get the modification time from extended file attributes. WIN32_FILE_ATTRIBUTE_DATA f1d; @@ -1900,15 +1902,15 @@ void SystemTools::ConvertToUnixSlashes(std::string& path) // Also, reuse the loop to check for slash followed by another slash if (!hasDoubleSlash && *(pos0 + 1) == '/' && *(pos0 + 2) == '/') { -#ifdef _WIN32 +# ifdef _WIN32 // However, on windows if the first characters are both slashes, // then keep them that way, so that network paths can be handled. if (pos > 0) { hasDoubleSlash = true; } -#else +# else hasDoubleSlash = true; -#endif +# endif } pos0++; @@ -2396,7 +2398,7 @@ std::string SystemTools::GetLastSystemError() static bool IsJunction(const std::wstring& source) { -#ifdef FSCTL_GET_REPARSE_POINT +# ifdef FSCTL_GET_REPARSE_POINT const DWORD JUNCTION_ATTRS = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT; DWORD attrs = GetFileAttributesW(source.c_str()); @@ -2438,14 +2440,14 @@ static bool IsJunction(const std::wstring& source) return (success && (reparse_buffer->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)); -#else +# else return false; -#endif +# endif } static bool DeleteJunction(const std::wstring& source) { -#ifdef FSCTL_DELETE_REPARSE_POINT +# ifdef FSCTL_DELETE_REPARSE_POINT // Adjust privileges so that we can succefully open junction points as // read/write. HANDLE token; @@ -2480,9 +2482,9 @@ static bool DeleteJunction(const std::wstring& source) CloseHandle(dir); return !!success; -#else +# else return false; -#endif +# endif } #endif @@ -3295,7 +3297,7 @@ std::string SystemTools::RelativePath(const std::string& local, #else localSplit[sameCount] == remoteSplit[sameCount] #endif - ) { + ) { // put the common parts of the path into the commonPath array commonPath.push_back(localSplit[sameCount]); // erase the common parts of the path from the original path arrays @@ -3601,13 +3603,13 @@ std::string SystemTools::JoinPath( bool SystemTools::ComparePath(const std::string& c1, const std::string& c2) { #if defined(_WIN32) || defined(__APPLE__) -#ifdef _MSC_VER +# ifdef _MSC_VER return _stricmp(c1.c_str(), c2.c_str()) == 0; -#elif defined(__APPLE__) || defined(__GNUC__) +# elif defined(__APPLE__) || defined(__GNUC__) return strcasecmp(c1.c_str(), c2.c_str()) == 0; -#else +# else return SystemTools::Strucmp(c1.c_str(), c2.c_str()) == 0; -#endif +# endif #else return c1 == c2; #endif @@ -4130,8 +4132,9 @@ bool SystemTools::GetPermissions(const std::string& file, mode_t& mode) } size_t dotPos = file.rfind('.'); const char* ext = dotPos == std::string::npos ? 0 : (file.c_str() + dotPos); - if (ext && (Strucmp(ext, ".exe") == 0 || Strucmp(ext, ".com") == 0 || - Strucmp(ext, ".cmd") == 0 || Strucmp(ext, ".bat") == 0)) { + if (ext && + (Strucmp(ext, ".exe") == 0 || Strucmp(ext, ".com") == 0 || + Strucmp(ext, ".cmd") == 0 || Strucmp(ext, ".bat") == 0)) { mode |= (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)); } #else @@ -4237,24 +4240,24 @@ std::string SystemTools::GetOperatingSystemNameAndVersion() ZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi); -#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx -#pragma warning(push) -#ifdef __INTEL_COMPILER -#pragma warning(disable : 1478) -#else -#pragma warning(disable : 4996) -#endif -#endif +# ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx +# pragma warning(push) +# ifdef __INTEL_COMPILER +# pragma warning(disable : 1478) +# else +# pragma warning(disable : 4996) +# endif +# endif bOsVersionInfoEx = GetVersionExA((OSVERSIONINFOA*)&osvi); if (!bOsVersionInfoEx) { return 0; } -#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx -#pragma warning(pop) -#endif +# ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx +# pragma warning(pop) +# endif switch (osvi.dwPlatformId) { - // Test for the Windows NT product family. + // Test for the Windows NT product family. case VER_PLATFORM_WIN32_NT: @@ -4372,7 +4375,7 @@ std::string SystemTools::GetOperatingSystemNameAndVersion() else { HKEY hKey; -#define BUFSIZE 80 +# define BUFSIZE 80 wchar_t szProductType[BUFSIZE]; DWORD dwBufLen = BUFSIZE; LONG lRet; @@ -4454,7 +4457,7 @@ std::string SystemTools::GetOperatingSystemNameAndVersion() break; - // Test for the Windows 95 product family. + // Test for the Windows 95 product family. case VER_PLATFORM_WIN32_WINDOWS: @@ -4655,9 +4658,9 @@ void SystemTools::ClassFinalize() } // namespace KWSYS_NAMESPACE #if defined(_MSC_VER) && defined(_DEBUG) -#include <crtdbg.h> -#include <stdio.h> -#include <stdlib.h> +# include <crtdbg.h> +# include <stdio.h> +# include <stdlib.h> namespace KWSYS_NAMESPACE { static int SystemToolsDebugReport(int, char* message, int*) |