[Lldb-commits] [lldb] e9dcd8b - [lldb] [Host/Terminal] Fix warnings with termios disabled
Michał Górny via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 29 00:58:18 PDT 2021
Author: Michał Górny
Date: 2021-10-29T09:58:09+02:00
New Revision: e9dcd8b37b73236f9c1db71c6afa057c181bb0c8
URL: https://github.com/llvm/llvm-project/commit/e9dcd8b37b73236f9c1db71c6afa057c181bb0c8
DIFF: https://github.com/llvm/llvm-project/commit/e9dcd8b37b73236f9c1db71c6afa057c181bb0c8.diff
LOG: [lldb] [Host/Terminal] Fix warnings with termios disabled
Thanks to Nico Weber for the suggestion.
Differential Revision: https://reviews.llvm.org/D112632
Added:
Modified:
lldb/source/Host/common/Terminal.cpp
Removed:
################################################################################
diff --git a/lldb/source/Host/common/Terminal.cpp b/lldb/source/Host/common/Terminal.cpp
index 1efd1bb9139d3..2a1c12e667bcf 100644
--- a/lldb/source/Host/common/Terminal.cpp
+++ b/lldb/source/Host/common/Terminal.cpp
@@ -29,12 +29,19 @@ struct Terminal::Data {
bool Terminal::IsATerminal() const { return m_fd >= 0 && ::isatty(m_fd); }
+#if !LLDB_ENABLE_TERMIOS
+static llvm::Error termiosMissingError() {
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "termios support missing in LLDB");
+}
+#endif
+
llvm::Expected<Terminal::Data> Terminal::GetData() {
+#if LLDB_ENABLE_TERMIOS
if (!FileDescriptorIsValid())
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"invalid fd");
-#if LLDB_ENABLE_TERMIOS
if (!IsATerminal())
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"fd not a terminal");
@@ -46,8 +53,7 @@ llvm::Expected<Terminal::Data> Terminal::GetData() {
"unable to get teletype attributes");
return data;
#else // !LLDB_ENABLE_TERMIOS
- return llvm::createStringError(llvm::inconvertibleErrorCode(),
- "termios support missing in LLDB");
+ return termiosMissingError();
#endif // LLDB_ENABLE_TERMIOS
}
@@ -62,44 +68,48 @@ llvm::Error Terminal::SetData(const Terminal::Data &data) {
"unable to set teletype attributes");
return llvm::Error::success();
#else // !LLDB_ENABLE_TERMIOS
- llvm_unreachable("SetData() should not be called if !LLDB_ENABLE_TERMIOS");
+ return termiosMissingError();
#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetEcho(bool enabled) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
fd_termios.c_lflag &= ~ECHO;
if (enabled)
fd_termios.c_lflag |= ECHO;
return SetData(data.get());
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetCanonical(bool enabled) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
fd_termios.c_lflag &= ~ICANON;
if (enabled)
fd_termios.c_lflag |= ICANON;
return SetData(data.get());
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetRaw() {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
::cfmakeraw(&fd_termios);
@@ -109,7 +119,9 @@ llvm::Error Terminal::SetRaw() {
fd_termios.c_cc[VTIME] = 0;
return SetData(data.get());
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
#if LLDB_ENABLE_TERMIOS
@@ -258,11 +270,11 @@ static llvm::Optional<speed_t> baudRateToConst(unsigned int baud_rate) {
#endif
llvm::Error Terminal::SetBaudRate(unsigned int baud_rate) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
llvm::Optional<speed_t> val = baudRateToConst(baud_rate);
if (!val) // invalid value
@@ -278,15 +290,17 @@ llvm::Error Terminal::SetBaudRate(unsigned int baud_rate) {
std::error_code(errno, std::generic_category()),
"setting output baud rate failed");
return SetData(data.get());
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetStopBits(unsigned int stop_bits) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
switch (stop_bits) {
case 1:
@@ -301,15 +315,17 @@ llvm::Error Terminal::SetStopBits(unsigned int stop_bits) {
"invalid stop bit count: %d (must be 1 or 2)", stop_bits);
}
return SetData(data.get());
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetParity(Terminal::Parity parity) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
fd_termios.c_cflag &= ~(
#if defined(CMSPAR)
@@ -332,15 +348,17 @@ llvm::Error Terminal::SetParity(Terminal::Parity parity) {
}
}
return SetData(data.get());
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetParityCheck(Terminal::ParityCheck parity_check) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
struct termios &fd_termios = data->m_termios;
fd_termios.c_iflag &= ~(IGNPAR | PARMRK | INPCK);
@@ -352,15 +370,17 @@ llvm::Error Terminal::SetParityCheck(Terminal::ParityCheck parity_check) {
fd_termios.c_iflag |= PARMRK;
}
return SetData(data.get());
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
llvm::Error Terminal::SetHardwareFlowControl(bool enabled) {
+#if LLDB_ENABLE_TERMIOS
llvm::Expected<Data> data = GetData();
if (!data)
return data.takeError();
-#if LLDB_ENABLE_TERMIOS
#if defined(CRTSCTS)
struct termios &fd_termios = data->m_termios;
fd_termios.c_cflag &= ~CRTSCTS;
@@ -374,7 +394,9 @@ llvm::Error Terminal::SetHardwareFlowControl(bool enabled) {
"hardware flow control is not supported by the platform");
return llvm::Error::success();
#endif // defined(CRTSCTS)
-#endif // #if LLDB_ENABLE_TERMIOS
+#else // !LLDB_ENABLE_TERMIOS
+ return termiosMissingError();
+#endif // LLDB_ENABLE_TERMIOS
}
TerminalState::TerminalState(Terminal term, bool save_process_group)
More information about the lldb-commits
mailing list