diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2019-06-21 10:55:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-21 10:55:03 -0700 |
commit | cf9dfb9be23b4f802989fecd18756ed62aecc8e4 (patch) | |
tree | 3f1f45759bf85b451b458aab98cf62892f7aef17 /src/util/utility.cpp | |
parent | 073335156ff7644364d12a91d4d41af776cfb91b (diff) |
Use TMPDIR environment variable for temp files (#2849)
Previously, we were just writing temporary files to `/tmp/` but this
commit allows the user to use the `TMPDIR` environment variable to
determine which directory the temporary file should be written to. The
commit adds a helper function for this and also includes some minor
cleanup of existing code.
Diffstat (limited to 'src/util/utility.cpp')
-rw-r--r-- | src/util/utility.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/util/utility.cpp b/src/util/utility.cpp new file mode 100644 index 000000000..9936504d2 --- /dev/null +++ b/src/util/utility.cpp @@ -0,0 +1,56 @@ +/********************* */ +/*! \file utility.cpp + ** \verbatim + ** Top contributors (to current version): + ** Andres Noetzli + ** This file is part of the CVC4 project. + ** Copyright (c) 2009-2019 by the authors listed in the file AUTHORS + ** in the top-level source directory) and their institutional affiliations. + ** All rights reserved. See the file COPYING in the top-level source + ** directory for licensing information.\endverbatim + ** + ** \brief Some standard STL-related utility functions for CVC4 + ** + ** Some standard STL-related utility functions for CVC4. + **/ + +#include "util/utility.h" + +#include <unistd.h> + +#include <cstdlib> +#include <iostream> + +#include "base/cvc4_check.h" + +namespace CVC4 { + +std::fstream openTmpFile(std::string* pattern) +{ + char* tmpDir = getenv("TMPDIR"); + if (tmpDir != nullptr) + { + *pattern = std::string(tmpDir) + "/" + *pattern; + } + else + { + *pattern = "/tmp/" + *pattern; + } + + // Note: With C++17, we can avoid creating a copy using std::string::data(). + char* tmpName = new char[pattern->size() + 1]; + pattern->copy(tmpName, pattern->size()); + tmpName[pattern->size()] = '\0'; + int r = mkstemp(tmpName); + if (r == -1) + { + CVC4_FATAL() << "Could not create temporary file " << *pattern; + } + std::fstream tmpStream(tmpName); + close(r); + *pattern = std::string(tmpName); + delete[] tmpName; + return tmpStream; +} + +} // namespace CVC4 |