mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-12 20:39:49 -05:00
Merge topic 'file-WRITE-chmod'
bdd0174df1 file(WRITE): Avoid toggling permissions between 644 and 664
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2246
This commit is contained in:
@@ -208,16 +208,20 @@ bool cmFileCommand::HandleWriteCommand(std::vector<std::string> const& args,
|
||||
cmSystemTools::MakeDirectory(dir);
|
||||
|
||||
mode_t mode = 0;
|
||||
bool writable = false;
|
||||
|
||||
// Set permissions to writable
|
||||
if (cmSystemTools::GetPermissions(fileName.c_str(), mode)) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(),
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
mode | S_IWRITE
|
||||
writable = mode & S_IWRITE;
|
||||
mode_t newMode = mode | S_IWRITE;
|
||||
#else
|
||||
mode | S_IWUSR | S_IWGRP
|
||||
writable = mode & S_IWUSR;
|
||||
mode_t newMode = mode | S_IWUSR | S_IWGRP;
|
||||
#endif
|
||||
);
|
||||
if (!writable) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(), newMode);
|
||||
}
|
||||
}
|
||||
// If GetPermissions fails, pretend like it is ok. File open will fail if
|
||||
// the file is not writable
|
||||
@@ -242,7 +246,7 @@ bool cmFileCommand::HandleWriteCommand(std::vector<std::string> const& args,
|
||||
return false;
|
||||
}
|
||||
file.close();
|
||||
if (mode) {
|
||||
if (mode && !writable) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(), mode);
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -45,16 +45,20 @@ bool cmWriteFileCommand::InitialPass(std::vector<std::string> const& args,
|
||||
cmSystemTools::MakeDirectory(dir);
|
||||
|
||||
mode_t mode = 0;
|
||||
bool writable = false;
|
||||
|
||||
// Set permissions to writable
|
||||
if (cmSystemTools::GetPermissions(fileName.c_str(), mode)) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(),
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
mode | S_IWRITE
|
||||
writable = mode & S_IWRITE;
|
||||
mode_t newMode = mode | S_IWRITE;
|
||||
#else
|
||||
mode | S_IWUSR | S_IWGRP
|
||||
writable = mode & S_IWUSR;
|
||||
mode_t newMode = mode | S_IWUSR | S_IWGRP;
|
||||
#endif
|
||||
);
|
||||
if (!writable) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(), newMode);
|
||||
}
|
||||
}
|
||||
// If GetPermissions fails, pretend like it is ok. File open will fail if
|
||||
// the file is not writable
|
||||
@@ -69,7 +73,7 @@ bool cmWriteFileCommand::InitialPass(std::vector<std::string> const& args,
|
||||
}
|
||||
file << message << std::endl;
|
||||
file.close();
|
||||
if (mode) {
|
||||
if (mode && !writable) {
|
||||
cmSystemTools::SetPermissions(fileName.c_str(), mode);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user