X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmover.C;h=52c9d0064819656f46ed507296874de1a93b9f75;hb=9667cb383640866f47aea57f059a9d2a5caefc3d;hp=24950a870691af7de9cd53dc9be1f0402acd73ac;hpb=6c300f72a217722652dc27db9108e1050028979c;p=lyx.git diff --git a/src/mover.C b/src/mover.C index 24950a8706..52c9d00648 100644 --- a/src/mover.C +++ b/src/mover.C @@ -17,40 +17,65 @@ #include "support/lyxlib.h" #include "support/systemcall.h" +#include #include namespace lyx { +using std::ios; using std::string; Movers movers; Movers system_movers; -bool Mover::do_copy(string const & from, string const & to, - string const &) const +bool Mover::copy(support::FileName const & from, support::FileName const & to, + unsigned long int mode) const { - return support::copy(from, to); + return do_copy(from, to, to.absFilename(), mode); } -bool Mover::do_rename(string const & from, string const & to, +bool Mover::do_copy(support::FileName const & from, support::FileName const & to, + string const &, unsigned long int mode) const +{ + return support::copy(from, to, mode); +} + + +bool Mover::rename(support::FileName const & from, + support::FileName const & to) const +{ + return do_rename(from, to, to.absFilename()); +} + + +bool Mover::do_rename(support::FileName const & from, support::FileName const & to, string const &) const { return support::rename(from, to); } -bool SpecialisedMover::do_copy(string const & from, string const & to, - string const & latex) const +bool SpecialisedMover::do_copy(support::FileName const & from, support::FileName const & to, + string const & latex, unsigned long int mode) const { if (command_.empty()) - return Mover::do_copy(from, to, latex); + return Mover::do_copy(from, to, latex, mode); + + if (mode != (unsigned long int)-1) { + std::ofstream ofs(to.toFilesystemEncoding().c_str(), ios::binary | ios::out | ios::trunc); + if (!ofs) + return false; + ofs.close(); + if (!support::chmod(to, mode)) + return false; + } string command = support::libScriptSearch(command_); - command = support::subst(command, "$$i", from); - command = support::subst(command, "$$o", to); + command = support::subst(command, "$$i", from.toFilesystemEncoding()); + command = support::subst(command, "$$o", to.toFilesystemEncoding()); command = support::subst(command, "$$l", latex); support::Systemcall one; @@ -58,13 +83,13 @@ bool SpecialisedMover::do_copy(string const & from, string const & to, } -bool SpecialisedMover::do_rename(string const & from, string const & to, +bool SpecialisedMover::do_rename(support::FileName const & from, support::FileName const & to, string const & latex) const { if (command_.empty()) return Mover::do_rename(from, to, latex); - if (!do_copy(from, to, latex)) + if (!do_copy(from, to, latex, (unsigned long int)-1)) return false; return support::unlink(from) == 0; }