|
@@ -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);
|
|
|
}
|
|
|
|