summaryrefslogtreecommitdiffstats
path: root/Source/kwsys/SystemTools.cxx
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2006-12-04 22:26:41 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2006-12-04 22:26:41 (GMT)
commit3a32cec96923cf057aad00274b4a8ab7ad82a82f (patch)
tree304527c04dbad8b51ce2bccda1a434f424bf1a9a /Source/kwsys/SystemTools.cxx
parentde8ffcaef492e23af57ed5489dd8a21fdd7ad5d8 (diff)
downloadCMake-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.cxx32
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