From: Pavel Sanda Date: Fri, 7 Dec 2018 22:10:46 +0000 (+0100) Subject: Keep permissions of the saved files intact. X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e1708490679b2e401638e1873b73090808a2164e;p=features.git Keep permissions of the saved files intact. Previously the permission were destroyed by the newly created temporary file -- which is later used as new saved file. Tested on symlinks as well but only on Linux. --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 41a86ba1a9..1f6436662d 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1443,6 +1443,9 @@ bool Buffer::save() const FileName savefile(tempfile->name()); LYXERR(Debug::FILES, "Saving to " << savefile.absFileName()); + if (!savefile.clonePermissions(fileName())) + LYXERR0("Failed to clone the permission from " << fileName().absFileName() << " to " << savefile.absFileName()); + if (!writeFile(savefile)) return false; diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp index 3d22acbe70..b485ae9395 100644 --- a/src/support/FileName.cpp +++ b/src/support/FileName.cpp @@ -288,6 +288,13 @@ bool FileName::changePermission(unsigned long int mode) const return true; } +bool FileName::clonePermissions(FileName const & source) +{ + QFile fin(toqstr(source.absFileName())); + QFile f(toqstr(absFileName())); + + return f.setPermissions(fin.permissions()); +} string FileName::toFilesystemEncoding() const { diff --git a/src/support/FileName.h b/src/support/FileName.h index 8264d8087b..fad5077bdf 100644 --- a/src/support/FileName.h +++ b/src/support/FileName.h @@ -150,6 +150,8 @@ public: /// support this. /// \return true on success. bool changePermission(unsigned long int mode) const; + // sets permission based on the file given as an argument + bool clonePermissions(FileName const & target); /// remove pointed directory and all contents. /// \return true on success.