mgorny updated this revision to Diff 383112.
mgorny retitled this revision from "[lldb] [Host/Terminal] Add
llvm_unreachable() to appease Windows" to "[lldb] [Host/Terminal] Fix warnings
with termios disabled".
mgorny edited the summary of this revision.
mgorny added a comment.
Create the error for `!LLDB_ENABLE_TERMIOS` via a helper function, as suggested
by Nico Weber.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112632/new/
https://reviews.llvm.org/D112632
Files:
lldb/source/Host/common/Terminal.cpp
Index: lldb/source/Host/common/Terminal.cpp
===================================================================
--- lldb/source/Host/common/Terminal.cpp
+++ lldb/source/Host/common/Terminal.cpp
@@ -29,6 +29,13 @@
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 (!FileDescriptorIsValid())
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -46,8 +53,7 @@
"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 @@
"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 @@
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 @@
#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 @@
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 @@
"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 @@
}
}
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 @@
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 @@
"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)
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits