diff options
Diffstat (limited to 'lib/Support/FileHandling.cpp')
-rw-r--r-- | lib/Support/FileHandling.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/lib/Support/FileHandling.cpp b/lib/Support/FileHandling.cpp index 3e156f3c..068ce44b 100644 --- a/lib/Support/FileHandling.cpp +++ b/lib/Support/FileHandling.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// #include "klee/Internal/Support/FileHandling.h" + #include "klee/Config/Version.h" #include "klee/Config/config.h" #include "klee/Internal/Support/ErrorHandling.h" @@ -15,25 +16,41 @@ #include "llvm/Support/FileSystem.h" #endif +#ifdef HAVE_ZLIB_H +#include "klee/Internal/Support/CompressionStream.h" +#endif + namespace klee { -llvm::raw_fd_ostream *klee_open_output_file(std::string &path, - std::string &error) { - llvm::raw_fd_ostream *f; +std::unique_ptr<llvm::raw_fd_ostream> +klee_open_output_file(const std::string &path, std::string &error) { + error = ""; + std::unique_ptr<llvm::raw_fd_ostream> f; #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6) std::error_code ec; - f = new llvm::raw_fd_ostream(path.c_str(), ec, llvm::sys::fs::F_None); + f = std::unique_ptr<llvm::raw_fd_ostream>(new llvm::raw_fd_ostream(path.c_str(), ec, llvm::sys::fs::F_None)); // FIXME C++14 if (ec) error = ec.message(); #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5) - f = new llvm::raw_fd_ostream(path.c_str(), error, llvm::sys::fs::F_None); + f = std::unique_ptr<llvm::raw_fd_ostream>(new llvm::raw_fd_ostream(path.c_str(), error, llvm::sys::fs::F_None)); // FIXME C++14 #else - f = new llvm::raw_fd_ostream(path.c_str(), error, llvm::sys::fs::F_Binary); + f = std::unique_ptr<llvm::raw_fd_ostream>(new llvm::raw_fd_ostream(path.c_str(), error, llvm::sys::fs::F_Binary)); // FIXME C++14 #endif if (!error.empty()) { - delete f; - f = NULL; + f.reset(nullptr); } return f; } + +#ifdef HAVE_ZLIB_H +std::unique_ptr<llvm::raw_ostream> +klee_open_compressed_output_file(const std::string &path, std::string &error) { + error = ""; + std::unique_ptr<llvm::raw_ostream> f(new compressed_fd_ostream(path, error)); + if (!error.empty()) { + f.reset(nullptr); + } + return f; +} +#endif } |