summaryrefslogtreecommitdiffstats
path: root/Source/kwsys
diff options
context:
space:
mode:
Diffstat (limited to 'Source/kwsys')
-rw-r--r--Source/kwsys/SystemTools.cxx28
-rw-r--r--Source/kwsys/SystemTools.hxx.in27
2 files changed, 35 insertions, 20 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 72b109c..65f6259 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -1611,7 +1611,8 @@ kwsys_stl::string SystemTools::ConvertToWindowsOutputPath(const char* path)
}
bool SystemTools::CopyFileIfDifferent(const char* source,
- const char* destination)
+ const char* destination,
+ bool copyPermissions)
{
// special check for a destination that is a directory
// FilesDiffer does not handle file to directory compare
@@ -1624,7 +1625,8 @@ bool SystemTools::CopyFileIfDifferent(const char* source,
new_destination += SystemTools::GetFilenameName(source_name);
if(SystemTools::FilesDiffer(source, new_destination.c_str()))
{
- return SystemTools::CopyFileAlways(source, destination);
+ return SystemTools::CopyFileAlways(source, destination,
+ copyPermissions);
}
else
{
@@ -1637,7 +1639,7 @@ bool SystemTools::CopyFileIfDifferent(const char* source,
// are different
if(SystemTools::FilesDiffer(source, destination))
{
- return SystemTools::CopyFileAlways(source, destination);
+ return SystemTools::CopyFileAlways(source, destination, copyPermissions);
}
// at this point the files must be the same so return true
return true;
@@ -1718,10 +1720,12 @@ bool SystemTools::FilesDiffer(const char* source,
}
+//----------------------------------------------------------------------------
/**
* Copy a file named by "source" to the file named by "destination".
*/
-bool SystemTools::CopyFileAlways(const char* source, const char* destination)
+bool SystemTools::CopyFileAlways(const char* source, const char* destination,
+ bool copyPermissions)
{
// If files are the same do not copy
if ( SystemTools::SameFile(source, destination) )
@@ -1824,7 +1828,7 @@ bool SystemTools::CopyFileAlways(const char* source, const char* destination)
{
return false;
}
- if ( perms )
+ if ( copyPermissions && perms )
{
if ( !SystemTools::SetPermissions(destination, perm) )
{
@@ -1836,15 +1840,15 @@ bool SystemTools::CopyFileAlways(const char* source, const char* destination)
//----------------------------------------------------------------------------
bool SystemTools::CopyAFile(const char* source, const char* destination,
- bool always)
+ bool always, bool copyPermissions)
{
if(always)
{
- return SystemTools::CopyFileAlways(source, destination);
+ return SystemTools::CopyFileAlways(source, destination, copyPermissions);
}
else
{
- return SystemTools::CopyFileIfDifferent(source, destination);
+ return SystemTools::CopyFileIfDifferent(source, destination, copyPermissions);
}
}
@@ -1853,7 +1857,7 @@ bool SystemTools::CopyAFile(const char* source, const char* destination,
* "destination".
*/
bool SystemTools::CopyADirectory(const char* source, const char* destination,
- bool always)
+ bool always, bool copyPermissions)
{
Directory dir;
dir.Load(source);
@@ -1877,14 +1881,16 @@ bool SystemTools::CopyADirectory(const char* source, const char* destination,
fullDestPath += dir.GetFile(static_cast<unsigned long>(fileNum));
if (!SystemTools::CopyADirectory(fullPath.c_str(),
fullDestPath.c_str(),
- always))
+ always,
+ copyPermissions))
{
return false;
}
}
else
{
- if(!SystemTools::CopyAFile(fullPath.c_str(), destination, always))
+ if(!SystemTools::CopyAFile(fullPath.c_str(), destination, always,
+ copyPermissions))
{
return false;
}
diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index 1484b60..b092764 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -490,33 +490,42 @@ public:
/**
* Copy the source file to the destination file only
- * if the two files differ.
+ * if the two files differ. If the "copyPermissions"
+ * argument is true, the permissions of the copy are
+ * set to be the same as the permissions of the
+ * original.
*/
static bool CopyFileIfDifferent(const char* source,
- const char* destination);
-
+ const char* destination,
+ bool copyPermissions = true);
+
/**
* Compare the contents of two files. Return true if different
*/
static bool FilesDiffer(const char* source, const char* destination);
-
+
/**
* Return true if the two files are the same file
*/
static bool SameFile(const char* file1, const char* file2);
/**
- * Copy a file
+ * Copy a file. If the "copyPermissions" argument is true, the
+ * permissions of the copy are set to be the same as the permissions
+ * of the original.
*/
- static bool CopyFileAlways(const char* source, const char* destination);
+ static bool CopyFileAlways(const char* source, const char* destination,
+ bool copyPermissions = true);
/**
* Copy a file. If the "always" argument is true the file is always
* copied. If it is false, the file is copied only if it is new or
- * has changed.
+ * has changed. If the "copyPermissions" argument is true, the
+ * permissions of the copy are set to be the same as the permissions
+ * of the original.
*/
static bool CopyAFile(const char* source, const char* destination,
- bool always = true);
+ bool always = true, bool copyPermissions = true);
/**
* Copy content directory to another directory with all files and
@@ -525,7 +534,7 @@ public:
* are new are copied.
*/
static bool CopyADirectory(const char* source, const char* destination,
- bool always = true);
+ bool always = true, bool copyPermissions = true);
/**
* Remove a file