X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Ffiletools.h;h=05b3d705ec740f66b5de6150a3c51828f07e0138;hb=557c2f2bf0b22fb72b3af385571ea7b33ff377fd;hp=b041b366a2ca3ea1d08ce501be5b6e4d100df9ea;hpb=a3d5f27038826bb85fe6f1bed432d41bda69ff1e;p=lyx.git diff --git a/src/support/filetools.h b/src/support/filetools.h index b041b366a2..05b3d705ec 100644 --- a/src/support/filetools.h +++ b/src/support/filetools.h @@ -16,12 +16,35 @@ #include #include +#include namespace lyx { namespace support { class FileName; +/// Record used temp file names +static std::set tmp_names_; + +/// Get a temporary file name. +/** +* The actual temp file (QTemporaryFile object) is immediately +* destroyed after the name has been generated, so a new file +* has to be created manually from the name. +* This is needed if the temp file has to be manually removed +* (e.g., when temp files are used as conversion target, and the initial +* file only serves as a placeholder), since QTemporaryFile objects +* cannot be manually removed at least on Windows (they are always +* kept open internally even after close()). +* In order to avoid race conditions due to duplicate names, we record +* all used temp file names. +* If you don't have to remove the temp file manually, use TempFile instead! +*/ +FileName const tempFileName(std::string const &, bool const dir = false); + +/// Remove and unregister a temporary file. +void removeTempFile(FileName const &); + /** Creates the global LyX temp dir. \p deflt can be an existing directory name. In this case a new directory inside \p deflt is created. If \p deflt does not exist yet, \p deflt is @@ -220,9 +243,6 @@ std::string const unzippedFileName(std::string const & zipped_file); FileName const unzipFile(FileName const & zipped_file, std::string const & unzipped_file = std::string()); -/// Create absolute path. If impossible, don't do anything -std::string const expandPath(std::string const & path); - /** Convert relative path into absolute path based on a basepath. If relpath is absolute, just use that. If basepath doesn't exist use CWD. @@ -253,7 +273,7 @@ std::string const onlyPath(std::string const & fname); std::string const onlyFileName(std::string const & fname); /** Check and Replace Environmentvariables ${NAME} in Path. - Replaces all occurences of these, if they are found in the + Replaces all occurrences of these, if they are found in the environment. Variables are defined by Var := '${' [a-zA-Z_][a-zA-Z_0-9]* '}' */ @@ -261,9 +281,9 @@ std::string const replaceEnvironmentPath(std::string const & path); /** Return a string to be used as a prefix to a command for setting the - environment of the TeX engine with respect to the path \p path. + environment of the TeX engine with respect to the paths \p path and \p lpath. */ -std::string latexEnvCmdPrefix(std::string const & path); +std::string latexEnvCmdPrefix(std::string const &path, std::string const & lpath); /** Replace all references to a current directory (a lonely '.' or the prefix "./") in \c pathlist with \c path. Also prefixes @@ -285,7 +305,8 @@ bool readLink(FileName const & file, FileName & link); * \param format The file format as used by kpsewhich, e.g. "bib", "bst" etc. */ FileName const findtexfile(std::string const & fil, - std::string const & format); + std::string const & format, + bool const onlykpse = false); /** \param file1, file2 the two files to be compared. Must have absolute paths. * \returns 1 if \c file1 has a more recent timestamp than \c file2,