From: ThorstenB Date: Sat, 3 Mar 2012 16:06:51 +0000 (+0100) Subject: Dir::tempDir not working on some systems. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=13f96cdcc9f686d900770bb24215284f3774bec8;p=simgear.git Dir::tempDir not working on some systems. Only worked when TMPDIR environment variable had a trailing slash (i.e. "/tmp/" worked, but not "/tmp"). (Problem shown by simgear's "test suite". It's good to have tests!) --- diff --git a/simgear/misc/sg_dir.cxx b/simgear/misc/sg_dir.cxx index 1514c950..a9969e07 100644 --- a/simgear/misc/sg_dir.cxx +++ b/simgear/misc/sg_dir.cxx @@ -96,11 +96,14 @@ Dir Dir::tempDir(const std::string& templ) char buf[1024]; const char* tempPath = ::getenv("TMPDIR"); if (!tempPath) { - tempPath = "/tmp/"; + tempPath = "/tmp"; } + SGPath p(tempPath); + p.append(templ); // Mac OS-X / BSD manual says any number of 'X's, but GLibc manual // says exactly six, so that's what I'm going with - ::snprintf(buf, 1024, "%s%s-XXXXXX", tempPath, templ.c_str()); + p.concat("-XXXXXX"); + ::snprintf(buf, 1024, "%s", p.c_str()); if (!mkdtemp(buf)) { SG_LOG(SG_IO, SG_WARN, "mkdtemp failed:" << strerror(errno)); return Dir();