================ @@ -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, + int &ResultFd, + SmallVectorImpl<char> &ResultPath) { + const char *Middle = Suffix.empty() ? "-%%%%%%" : "-%%%%%%."; + auto EC = sys::fs::getPotentiallyUniqueFileName( +#ifdef _WIN32 + "\\\\.\\pipe\\LOCAL\\" +#else + "/tmp/" ---------------- SuibianP wrote:
On Windows FIFOs live on a virtual hierarchy `\\.\pipe\` not backed a real filesystem. I don't think it is possible to `mkdir` on them, although it is possible to specify something like `\\.\pipe\tmp\dir\myfifo` to `CreateNamedPipe`. 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