From 0983e8b5c9d9f5f18078f20a03ab89596164e273 Mon Sep 17 00:00:00 2001
From: Ken Martin <ken.martin@kitware.com>
Date: Tue, 16 Dec 2003 14:26:19 -0500
Subject: [PATCH] is there any chance thiswill work on all platforms hmmm added
 removeAdirectory

---
 SystemTools.cxx    | 48 +++++++++++++++++++++++++++++++++++++++++++---
 SystemTools.hxx.in |  3 +++
 2 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/SystemTools.cxx b/SystemTools.cxx
index 3fc4a2a7..f5bdf771 100644
--- a/SystemTools.cxx
+++ b/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/SystemTools.hxx.in b/SystemTools.hxx.in
index 4600ca71..a4bdd822 100644
--- a/SystemTools.hxx.in
+++ b/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>());
-- 
GitLab