forked from OSchip/llvm-project
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
//===-- IOStream.h ----------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_TOOLS_LLDB_VSCODE_IOSTREAM_H
|
|
#define LLDB_TOOLS_LLDB_VSCODE_IOSTREAM_H
|
|
|
|
#include "llvm/Config/llvm-config.h" // for LLVM_ON_UNIX
|
|
|
|
#if defined(_WIN32)
|
|
// We need to #define NOMINMAX in order to skip `min()` and `max()` macro
|
|
// definitions that conflict with other system headers.
|
|
// We also need to #undef GetObject (which is defined to GetObjectW) because
|
|
// the JSON code we use also has methods named `GetObject()` and we conflict
|
|
// against these.
|
|
#define NOMINMAX
|
|
#include <windows.h>
|
|
#else
|
|
typedef int SOCKET;
|
|
#endif
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
|
|
#include <fstream>
|
|
#include <string>
|
|
|
|
// Windows requires different system calls for dealing with sockets and other
|
|
// types of files, so we can't simply have one code path that just uses read
|
|
// and write everywhere. So we need an abstraction in order to allow us to
|
|
// treat them identically.
|
|
namespace lldb_vscode {
|
|
struct StreamDescriptor {
|
|
StreamDescriptor();
|
|
~StreamDescriptor();
|
|
StreamDescriptor(StreamDescriptor &&other);
|
|
|
|
StreamDescriptor &operator=(StreamDescriptor &&other);
|
|
|
|
static StreamDescriptor from_socket(SOCKET s, bool close);
|
|
static StreamDescriptor from_file(int fd, bool close);
|
|
|
|
bool m_is_socket = false;
|
|
bool m_close = false;
|
|
union {
|
|
int m_fd;
|
|
SOCKET m_socket;
|
|
};
|
|
};
|
|
|
|
struct InputStream {
|
|
StreamDescriptor descriptor;
|
|
|
|
bool read_full(std::ofstream *log, size_t length, std::string &text);
|
|
|
|
bool read_line(std::ofstream *log, std::string &line);
|
|
|
|
bool read_expected(std::ofstream *log, llvm::StringRef expected);
|
|
};
|
|
|
|
struct OutputStream {
|
|
StreamDescriptor descriptor;
|
|
|
|
bool write_full(llvm::StringRef str);
|
|
};
|
|
} // namespace lldb_vscode
|
|
|
|
#endif
|