diff options
Diffstat (limited to 'lldb/tools/driver/Driver.cpp')
| -rw-r--r-- | lldb/tools/driver/Driver.cpp | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp index afb1a1ff95c3..15cb0134fec8 100644 --- a/lldb/tools/driver/Driver.cpp +++ b/lldb/tools/driver/Driver.cpp @@ -61,12 +61,13 @@ enum ID { #undef OPTION }; -#define PREFIX(NAME, VALUE) \ - static constexpr StringLiteral NAME##_init[] = VALUE; \ - static constexpr ArrayRef<StringLiteral> NAME(NAME##_init, \ - std::size(NAME##_init) - 1); +#define OPTTABLE_STR_TABLE_CODE #include "Options.inc" -#undef PREFIX +#undef OPTTABLE_STR_TABLE_CODE + +#define OPTTABLE_PREFIXES_TABLE_CODE +#include "Options.inc" +#undef OPTTABLE_PREFIXES_TABLE_CODE static constexpr opt::OptTable::Info InfoTable[] = { #define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__), @@ -76,7 +77,8 @@ static constexpr opt::OptTable::Info InfoTable[] = { class LLDBOptTable : public opt::GenericOptTable { public: - LLDBOptTable() : opt::GenericOptTable(InfoTable) {} + LLDBOptTable() + : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {} }; } // namespace @@ -444,12 +446,8 @@ int Driver::MainLoop() { m_debugger.SetUseExternalEditor(m_option_data.m_use_external_editor); m_debugger.SetShowInlineDiagnostics(true); - struct winsize window_size; - if ((isatty(STDIN_FILENO) != 0) && - ::ioctl(STDIN_FILENO, TIOCGWINSZ, &window_size) == 0) { - if (window_size.ws_col > 0) - m_debugger.SetTerminalWidth(window_size.ws_col); - } + // Set the terminal dimensions. + UpdateWindowSize(); SBCommandInterpreter sb_interpreter = m_debugger.GetCommandInterpreter(); @@ -625,20 +623,24 @@ int Driver::MainLoop() { return sb_interpreter.GetQuitStatus(); } -void Driver::ResizeWindow(unsigned short col) { - GetDebugger().SetTerminalWidth(col); -} - -void sigwinch_handler(int signo) { +void Driver::UpdateWindowSize() { struct winsize window_size; if ((isatty(STDIN_FILENO) != 0) && ::ioctl(STDIN_FILENO, TIOCGWINSZ, &window_size) == 0) { - if ((window_size.ws_col > 0) && g_driver != nullptr) { - g_driver->ResizeWindow(window_size.ws_col); - } + if (window_size.ws_col > 0) + m_debugger.SetTerminalWidth(window_size.ws_col); +#ifndef _WIN32 + if (window_size.ws_row > 0) + m_debugger.SetTerminalHeight(window_size.ws_row); +#endif } } +void sigwinch_handler(int signo) { + if (g_driver != nullptr) + g_driver->UpdateWindowSize(); +} + void sigint_handler(int signo) { #ifdef _WIN32 // Restore handler as it is not persistent on Windows signal(SIGINT, sigint_handler); |
