X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsupport%2FFileName.h;h=f0d1b54748089290e20de80d149f0bc774769da6;hb=329eae5605d7bc40a53ebafa817470d9739ff632;hp=e1bc0de83d45a3b9e06e57d114a4d4eef40ec951;hpb=5e4e4b674c00bc546213d42258f19e13a2b28bc3;p=lyx.git diff --git a/src/support/FileName.h b/src/support/FileName.h index e1bc0de83d..f0d1b54748 100644 --- a/src/support/FileName.h +++ b/src/support/FileName.h @@ -16,6 +16,7 @@ #include "support/strfwd.h" #include +#include namespace lyx { @@ -55,8 +56,8 @@ public: * \param filename the file in question. Must have an absolute path. * Encoding is always UTF-8. */ - virtual void set(std::string const & filename); - virtual void set(FileName const & fn, std::string const & suffix); + void set(std::string const & filename); + void set(FileName const & fn, std::string const & suffix); virtual void erase(); /// Is this filename empty? bool empty() const; @@ -123,7 +124,9 @@ public: /// \return true when file/directory is writable (write test file) /// \warning This methods has different semantics when system level /// copy command, it will overwrite the \c target file if it exists, - bool copyTo(FileName const & target) const; + /// If \p keepsymlink is true, the copy will be written to the symlink + /// target. Otherwise, the symlink will be destroyed. + bool copyTo(FileName const & target, bool keepsymlink = false) const; /// remove pointed file. /// \return true on success. @@ -136,6 +139,8 @@ public: bool renameTo(FileName const & target) const; /// move pointed file to \param target. + /// If \p target exists it will be overwritten (if it is a symlink, + /// the symlink will be destroyed). /// \return true on success. bool moveTo(FileName const & target) const; @@ -170,13 +175,6 @@ public: void changeExtension(std::string const & extension); static FileName fromFilesystemEncoding(std::string const & name); - /// (securely) create a temporary file with the given mask. - /// \p mask must be in filesystem encoding, if it contains a - /// relative path, the template file will be created in the global - /// temporary directory as given by 'package().temp_dir()'. - static FileName tempName(std::string const & mask); - static FileName tempName(FileName const & temp_dir, - std::string const & mask); /// get the current working directory static FileName getcwd(); @@ -210,6 +208,12 @@ public: private: friend bool equivalent(FileName const &, FileName const &); + /// Set for tracking of already visited file names. + /// Uses operator==() (which may be case insensitive), and not + /// equvalent(), so that symlinks are not resolved. + typedef std::set FileNameSet; + /// Helper for public copyTo() to find circular symlink chains + bool copyTo(FileName const &, bool, FileNameSet &) const; /// struct Private; Private * const d; @@ -251,7 +255,7 @@ public: * \param buffer_path if \c filename has a relative path, generate * the absolute path using this. */ - virtual void set(std::string const & filename, std::string const & buffer_path); + void set(std::string const & filename, std::string const & buffer_path); /// void erase(); ///