brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 7a07286 Raw
60 lines · cpp
1//===--- ToolOutputFile.cpp - Implement the ToolOutputFile class --------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This implements the ToolOutputFile class.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/Support/ToolOutputFile.h"14#include "llvm/Support/FileSystem.h"15#include "llvm/Support/Signals.h"16using namespace llvm;17 18static bool isStdout(StringRef Filename) { return Filename == "-"; }19 20CleanupInstaller::CleanupInstaller(StringRef Filename)21    : Filename(std::string(Filename)), Keep(false) {22  // Arrange for the file to be deleted if the process is killed.23  if (!isStdout(Filename))24    sys::RemoveFileOnSignal(Filename);25}26 27CleanupInstaller::~CleanupInstaller() {28  if (isStdout(Filename))29    return;30 31  // Delete the file if the client hasn't told us not to.32  if (!Keep)33    sys::fs::remove(Filename);34 35  // Ok, the file is successfully written and closed, or deleted. There's no36  // further need to clean it up on signals.37  sys::DontRemoveFileOnSignal(Filename);38}39 40ToolOutputFile::ToolOutputFile(StringRef Filename, std::error_code &EC,41                               sys::fs::OpenFlags Flags)42    : Installer(Filename) {43  if (isStdout(Filename)) {44    OS = &outs();45    EC = std::error_code();46    return;47  }48  OSHolder.emplace(Filename, EC, Flags);49  OS = &*OSHolder;50  // If open fails, no cleanup is needed.51  if (EC)52    Installer.Keep = true;53}54 55ToolOutputFile::ToolOutputFile(StringRef Filename, int FD)56    : Installer(Filename) {57  OSHolder.emplace(FD, true);58  OS = &*OSHolder;59}60