[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