summaryrefslogtreecommitdiff
path: root/lldb/tools/driver/Driver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/driver/Driver.cpp')
-rw-r--r--lldb/tools/driver/Driver.cpp42
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);