diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2006-12-04 22:26:41 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2006-12-04 22:26:41 (GMT) |
commit | 3a32cec96923cf057aad00274b4a8ab7ad82a82f (patch) | |
tree | 304527c04dbad8b51ce2bccda1a434f424bf1a9a /Source/kwsys/SystemTools.cxx | |
parent | de8ffcaef492e23af57ed5489dd8a21fdd7ad5d8 (diff) | |
download | CMake-3a32cec96923cf057aad00274b4a8ab7ad82a82f.zip CMake-3a32cec96923cf057aad00274b4a8ab7ad82a82f.tar.gz CMake-3a32cec96923cf057aad00274b4a8ab7ad82a82f.tar.bz2 |
ENH: merge in changes for beos support
Diffstat (limited to 'Source/kwsys/SystemTools.cxx')
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index f491cbf..33d3e64 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -108,6 +108,34 @@ public: #define _chdir chdir #endif +#if defined(__BEOS__) && !defined(__ZETA__) +#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) +{ + ::snooze(msec); +} + +// BeOS 5 also doesn't have realpath(), but its C++ API offers something close. +static inline char *realpath(const char *path, char *resolved_path) +{ + const size_t maxlen = KWSYS_SYSTEMTOOLS_MAXPATH; + snprintf(resolved_path, maxlen, "%s", path); + BPath normalized(resolved_path, NULL, true); + const char *resolved = normalized.Path(); + if (resolved != NULL) // NULL == No such file. + { + if (snprintf(resolved_path, maxlen, "%s", resolved) < maxlen) + { + return resolved_path; + } + } + return NULL; // something went wrong. +} +#endif + #if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__)) inline int Mkdir(const char* dir) { @@ -291,7 +319,9 @@ void SystemTools::GetPath(kwsys_stl::vector<kwsys_stl::string>& path, const char kwsys_stl::string::size_type endpos = pathEnv.find(pathSep, start); if(endpos != kwsys_stl::string::npos) { - path.push_back(pathEnv.substr(start, endpos-start)); + kwsys_stl::string convertedPath; + Realpath(pathEnv.substr(start, endpos-start).c_str(), convertedPath); + path.push_back(convertedPath); start = endpos+1; } else |