| //===- ToolOutputFile.h ---------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_SUPPORT_TOOLOUTPUTFILE_H |
| #define MCLD_SUPPORT_TOOLOUTPUTFILE_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| |
| #include <string> |
| #include <mcld/Support/FileHandle.h> |
| |
| namespace llvm { |
| class formatted_raw_ostream; |
| } // end of namespace llvm |
| |
| namespace mcld { |
| |
| class Path; |
| class FileHandle; |
| |
| /** \class ToolOutputFile |
| * \brief ToolOutputFile has the following features: |
| * - The file is automatically deleted if the process is killed. |
| * - The file is automatically deleted when the TooOutputFile object is |
| * destoryed unless the client calls keep(). |
| */ |
| class ToolOutputFile |
| { |
| public: |
| ToolOutputFile(const sys::fs::Path& pPath, |
| FileHandle::OpenMode pMode, |
| FileHandle::Permission pPermission); |
| |
| ~ToolOutputFile(); |
| |
| /// fd - Retutn the output file handle |
| FileHandle& fd() { return m_FileHandle; } |
| |
| /// os - Return the contained raw_fd_ostream |
| llvm::raw_fd_ostream& os(); |
| |
| /// formatted_os - Return the contained formatted_raw_ostream |
| llvm::formatted_raw_ostream& formatted_os(); |
| |
| /// keep - Indicate that the tool's job wrt this output file has been |
| /// successful and the file should not be deleted. |
| void keep(); |
| |
| private: |
| class CleanupInstaller |
| { |
| public: |
| explicit CleanupInstaller(const sys::fs::Path& pPath); |
| |
| ~CleanupInstaller(); |
| |
| /// Keep - The flag which indicates whether we should not delete the file. |
| bool Keep; |
| |
| private: |
| sys::fs::Path m_Path; |
| }; |
| |
| private: |
| FileHandle m_FileHandle; |
| CleanupInstaller m_Installer; |
| llvm::raw_fd_ostream* m_pFdOstream; |
| llvm::formatted_raw_ostream* m_pFormattedOstream; |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |