================ @@ -24,41 +30,95 @@ using namespace llvm; namespace lldb_dap { -FifoFile::FifoFile(StringRef path) : m_path(path) {} +std::error_code EC; +FifoFile::FifoFile(StringRef path) + : m_path(path), m_file(fopen(path.data(), "r+")) { + if (m_file == nullptr) { + EC = std::error_code(errno, std::generic_category()); + llvm::errs() << "Failed to open fifo file " << path << ": " << EC.message() + << "\n"; + std::terminate(); + } + if (setvbuf(m_file, NULL, _IONBF, 0)) + llvm::errs() << "Error setting unbuffered mode on C FILE\n"; +} +FifoFile::FifoFile(StringRef path, FILE *f) : m_path(path), m_file(f) {} +FifoFile::FifoFile(FifoFile &&other) + : m_path(other.m_path), m_file(other.m_file) { + other.m_file = nullptr; +} FifoFile::~FifoFile() { + if (m_file) + fclose(m_file); #if !defined(_WIN32) + // Unreferenced named pipes are deleted automatically on Win32 unlink(m_path.c_str()); #endif } -Expected<std::shared_ptr<FifoFile>> CreateFifoFile(StringRef path) { -#if defined(_WIN32) - return createStringError(inconvertibleErrorCode(), "Unimplemented"); +// This probably belongs to llvm::sys::fs as another FSEntity type +std::error_code createNamedPipe(const Twine &Prefix, StringRef Suffix, ---------------- SuibianP wrote:
`llvm::sys::fs` functions seem to have a convention on returning `std::error_code` so I followed them. The function does not have any additional information to add on, so I think `error_code` should be sufficient. Are there benefits using `llvm::Error`? https://github.com/llvm/llvm-project/pull/121269 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits