X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FFileName.h;h=cfa0c653e605854bb2604241eb1cb5b455f1280c;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=83d9e946f26898c9d092e87a49471bdeb6f1c072;hpb=db0ba3a3c68d2243722822e1c53535ff44d523bf;p=lyx.git diff --git a/src/support/FileName.h b/src/support/FileName.h index 83d9e946f2..cfa0c653e6 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,8 +139,11 @@ 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; + bool link(FileName const & name) const; /// change mode of pointed file. /// This methods does nothing and return true on platforms that does not @@ -170,15 +176,6 @@ public: void changeExtension(std::string const & extension); static FileName fromFilesystemEncoding(std::string const & name); - /// 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()'. - /// CAUTION: This method may create race conditions. - /// Do not use, use the TempFile class instead. - 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(); @@ -212,6 +209,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; @@ -253,7 +256,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(); ///