Browse Source

ENH: Add code for setting and getting permissions

Andy Cedilnik 22 years ago
parent
commit
7527fbccc2
2 changed files with 41 additions and 1 deletions
  1. 36 0
      Source/cmSystemTools.cxx
  2. 5 1
      Source/cmSystemTools.h

+ 36 - 0
Source/cmSystemTools.cxx

@@ -42,6 +42,8 @@
 #include <unistd.h>
 #endif
 
+#include <sys/stat.h>
+
 
 bool cmSystemTools::s_RunCommandHideConsole = false;
 bool cmSystemTools::s_DisableRunCommandOutput = false;
@@ -1205,3 +1207,37 @@ bool cmSystemTools::PutEnv(const char* value)
   localEnvironment.push_back(envVar);
   return ret == 0;
 }
+
+bool cmSystemTools::GetPermissions(const char* file, mode_t& mode)
+{
+  if ( !file )
+    {
+    return false;
+    }
+
+  struct stat st;
+  if ( stat(file, &st) < 0 )
+    {
+    return false;
+    }
+  mode = st.st_mode;
+  return true;
+}
+
+bool cmSystemTools::SetPermissions(const char* file, mode_t mode)
+{
+  if ( !file )
+    {
+    return false;
+    }
+  if ( !cmSystemTools::FileExists(file) )
+    {
+    return false;
+    }
+  if ( chmod(file, mode) < 0 )
+    {
+    return false;
+    }
+
+  return true;
+}

+ 5 - 1
Source/cmSystemTools.h

@@ -259,7 +259,11 @@ public:
   /** put a string into the environment
       of the form var=value */
   static bool PutEnv(const char* value);
-  
+
+  ///! Get permissions of the file
+  static bool GetPermissions(const char* file, mode_t& mode);
+  static bool SetPermissions(const char* file, mode_t mode);
+
 private:
   static bool s_ForceUnixPaths;
   static bool s_RunCommandHideConsole;