X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Ftempname.C;h=18699223a6b1952f48e4b9857c3ce65b09e57c3b;hb=aabd481ab63fd50606dd0d984c0b407e4b27e6a7;hp=791e586bd9e0d1765043cac9bda5eb54bc5945ab;hpb=fc8465aa1f6f29774d2f35d627b40198fa489cb1;p=lyx.git diff --git a/src/support/tempname.C b/src/support/tempname.C index 791e586bd9..18699223a6 100644 --- a/src/support/tempname.C +++ b/src/support/tempname.C @@ -1,55 +1,77 @@ -#include +/** + * \file tempname.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. + */ -#include -#include +#include -#include "LString.h" #include "support/lyxlib.h" + +#include "support/convert.h" #include "support/filetools.h" +#include "support/package.h" + #include "debug.h" -using std::endl; +#include + +#include +#ifdef HAVE_UNISTD_H +# include +#endif + +#if !defined(HAVE_MKSTEMP) && defined(HAVE_MKTEMP) +# include +# ifdef HAVE_SYS_STAT_H +# include +# endif +#endif + +using boost::scoped_array; -extern string system_tempdir; +using std::string; +using std::endl; namespace { inline -int make_tempfile(char * templ) +int make_tempfile(char * templ) { -#ifdef HAVE_MKSTEMP +#if defined(HAVE_MKSTEMP) return ::mkstemp(templ); -#else -#ifdef HAVE_MKTEMP +#elif defined(HAVE_MKTEMP) // This probably just barely works... ::mktemp(templ); - return ::open(templ, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); + return ::open(templ, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); #else -#warning FIX FIX FIX -#endif +#error FIX FIX FIX #endif } } // namespace anon -string const lyx::tempName(string const & dir, string const & mask) +string const lyx::support::tempName(string const & dir, string const & mask) { - string const tmpdir(dir.empty() ? system_tempdir : dir); + string const tmpdir(dir.empty() ? package().temp_dir() : dir); string tmpfl(AddName(tmpdir, mask)); - tmpfl += tostr(getpid()); + tmpfl += convert(getpid()); tmpfl += "XXXXXX"; // The supposedly safe mkstemp version - char * tmpl = new char[tmpfl.length() + 1]; // + 1 for '\0' - tmpfl.copy(tmpl, string::npos); + scoped_array tmpl(new char[tmpfl.length() + 1]); // + 1 for '\0' + tmpfl.copy(tmpl.get(), string::npos); tmpl[tmpfl.length()] = '\0'; // terminator - - int const tmpf = make_tempfile(tmpl); + + int const tmpf = make_tempfile(tmpl.get()); if (tmpf != -1) { - string const t(tmpl); + string const t(tmpl.get()); ::close(tmpf); - delete [] tmpl; lyxerr[Debug::FILES] << "Temporary file `" << t << "' created." << endl; return t; @@ -57,7 +79,6 @@ string const lyx::tempName(string const & dir, string const & mask) lyxerr[Debug::FILES] << "LyX Error: Unable to create temporary file." << endl; - delete [] tmpl; return string(); } }