summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2003-12-16 19:26:19 (GMT)
committerKen Martin <ken.martin@kitware.com>2003-12-16 19:26:19 (GMT)
commitcd5ec5ee1b8a23ada1ddae9ba9037659d00168d8 (patch)
tree698b9b514595d10bd58d3588fcb9e6e4708051ac
parent303cb13e0b763452546dd08eeb77ac02e8ce5d03 (diff)
downloadCMake-cd5ec5ee1b8a23ada1ddae9ba9037659d00168d8.zip
CMake-cd5ec5ee1b8a23ada1ddae9ba9037659d00168d8.tar.gz
CMake-cd5ec5ee1b8a23ada1ddae9ba9037659d00168d8.tar.bz2
is there any chance thiswill work on all platforms hmmm added removeAdirectory
-rw-r--r--Source/kwsys/SystemTools.cxx48
-rw-r--r--Source/kwsys/SystemTools.hxx.in3
2 files changed, 48 insertions, 3 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index aecec71..5a318aa 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -13,6 +13,7 @@
=========================================================================*/
#include "kwsysPrivate.h"
#include KWSYS_HEADER(SystemTools.hxx)
+#include KWSYS_HEADER(Directory.hxx)
#include KWSYS_HEADER(std/iostream)
#include KWSYS_HEADER(std/fstream)
@@ -44,6 +45,10 @@ inline int Mkdir(const char* dir)
{
return _mkdir(dir);
}
+inline int Rmdir(const char* dir)
+{
+ return _rmdir(dir);
+}
inline const char* Getcwd(char* buf, unsigned int len)
{
return _getcwd(buf, len);
@@ -64,6 +69,10 @@ inline int Mkdir(const char* dir)
{
return mkdir(dir, 00777);
}
+inline int Rmdir(const char* dir)
+{
+ return rmdir(dir);
+}
inline const char* Getcwd(char* buf, unsigned int len)
{
return getcwd(buf, len);
@@ -1005,6 +1014,38 @@ bool SystemTools::RemoveFile(const char* source)
return unlink(source) != 0 ? false : true;
}
+bool SystemTools::RemoveADirectory(const char* source)
+{
+ Directory dir;
+ dir.Load(source);
+ size_t fileNum;
+ for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum)
+ {
+ if (strcmp(dir.GetFile(static_cast<unsigned long>(fileNum)),".") &&
+ strcmp(dir.GetFile(static_cast<unsigned long>(fileNum)),".."))
+ {
+ kwsys_std::string fullPath = source;
+ fullPath += "/";
+ fullPath += dir.GetFile(static_cast<unsigned long>(fileNum));
+ if(SystemTools::FileIsDirectory(fullPath.c_str()))
+ {
+ if (!SystemTools::RemoveADirectory(fullPath.c_str()))
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if(!SystemTools::RemoveFile(fullPath.c_str()))
+ {
+ return false;
+ }
+ }
+ }
+ }
+
+ return (Rmdir(source) == 0);
+}
/**
* Find the file the given name. Searches the given path and then
@@ -1042,9 +1083,10 @@ kwsys_std::string SystemTools::FindFile(const char* name,
* the system search path. Returns the full path to the executable if it is
* found. Otherwise, the empty string is returned.
*/
-kwsys_std::string SystemTools::FindProgram(const char* name,
- const kwsys_std::vector<kwsys_std::string>& userPaths,
- bool no_system_path)
+kwsys_std::string SystemTools::FindProgram(
+ const char* name,
+ const kwsys_std::vector<kwsys_std::string>& userPaths,
+ bool no_system_path)
{
if(!name)
{
diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index d6320a0..98556d1 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -150,6 +150,9 @@ public:
///! Remove a file.
static bool RemoveFile(const char* source);
+ ///! Remove a directory
+ static bool RemoveADirectory(const char* source);
+
///! Find a file in the system PATH, with optional extra paths.
static kwsys_std::string FindFile(const char* name,
const kwsys_std::vector<kwsys_std::string>& path= kwsys_std::vector<kwsys_std::string>());