#include "support/strfwd.h"
#include <ctime>
+#include <set>
namespace lyx {
/// \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.
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;
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();
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<FileName> FileNameSet;
+ /// Helper for public copyTo() to find circular symlink chains
+ bool copyTo(FileName const &, bool, FileNameSet &) const;
///
struct Private;
Private * const d;