From 2b34877c5dbf24eabf331a124b1e68d901a72cba Mon Sep 17 00:00:00 2001 From: Julian Büning Date: Wed, 3 Oct 2018 14:42:37 +0200 Subject: refactor klee_open_output_file to return std::unique_ptr and introduce klee_open_compressed_output_file with similar behavior along some other minor improvements --- lib/Support/CompressionStream.cpp | 3 ++- lib/Support/FileHandling.cpp | 33 +++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'lib/Support') diff --git a/lib/Support/CompressionStream.cpp b/lib/Support/CompressionStream.cpp index 01fe1352..d17e1df1 100644 --- a/lib/Support/CompressionStream.cpp +++ b/lib/Support/CompressionStream.cpp @@ -23,7 +23,7 @@ namespace klee { -compressed_fd_ostream::compressed_fd_ostream(const char *Filename, +compressed_fd_ostream::compressed_fd_ostream(const std::string &Filename, std::string &ErrorInfo) : llvm::raw_ostream(), pos(0) { ErrorInfo = ""; @@ -38,6 +38,7 @@ compressed_fd_ostream::compressed_fd_ostream(const char *Filename, if (EC) { ErrorInfo = EC.message(); FD = -1; + return; } // Initialize the compression library strm.zalloc = Z_NULL; 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 +klee_open_output_file(const std::string &path, std::string &error) { + error = ""; + std::unique_ptr 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(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(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(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 +klee_open_compressed_output_file(const std::string &path, std::string &error) { + error = ""; + std::unique_ptr f(new compressed_fd_ostream(path, error)); + if (!error.empty()) { + f.reset(nullptr); + } + return f; +} +#endif } -- cgit 1.4.1