diff options
Diffstat (limited to 'lldb')
| -rw-r--r-- | lldb/include/lldb/API/SBDebugger.h | 11 | ||||
| -rw-r--r-- | lldb/source/API/SBDebugger.cpp | 26 | ||||
| -rw-r--r-- | lldb/tools/driver/Driver.cpp | 23 |
3 files changed, 41 insertions, 19 deletions
diff --git a/lldb/include/lldb/API/SBDebugger.h b/lldb/include/lldb/API/SBDebugger.h index 5cc4c2c9285..927af72afeb 100644 --- a/lldb/include/lldb/API/SBDebugger.h +++ b/lldb/include/lldb/API/SBDebugger.h @@ -142,14 +142,17 @@ public: void PushInputReader (lldb::SBInputReader &reader); + const char * + GetInstanceName (); + static SBDebugger FindDebuggerWithID (int id); - lldb::SBError - SetInternalVariable (const char *var_name, const char *value); + static lldb::SBError + SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name); - lldb::SBStringList - GetInternalVariableValue (const char *var_name); + static lldb::SBStringList + GetInternalVariableValue (const char *var_name, const char *debugger_instance_name); private: diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 1635cfad20a..540a1c06df5 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -565,17 +565,19 @@ SBDebugger::FindDebuggerWithID (int id) return sb_debugger; } -SBError -SBDebugger::SetInternalVariable (const char *var_name, const char *value) +const char * +SBDebugger::GetInstanceName() { - lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); - - const char *debugger_instance_name; - if (m_opaque_sp) - debugger_instance_name = m_opaque_sp->GetInstanceName().AsCString(); + return m_opaque_sp->GetInstanceName().AsCString(); else - debugger_instance_name = ""; + return NULL; +} + +SBError +SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) +{ + lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, false, debugger_instance_name); @@ -586,19 +588,13 @@ SBDebugger::SetInternalVariable (const char *var_name, const char *value) } lldb::SBStringList -SBDebugger::GetInternalVariableValue (const char *var_name) +SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) { SBStringList ret_value; lldb::SettableVariableType var_type; - const char *debugger_instance_name; lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController(); - if (m_opaque_sp) - debugger_instance_name = m_opaque_sp->GetInstanceName().AsCString(); - else - debugger_instance_name = ""; - StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name); for (unsigned i = 0; i != value.GetSize(); ++i) ret_value.AppendString (value.GetStringAtIndex(i)); diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp index 73aa3960a81..10ab1a11359 100644 --- a/lldb/tools/driver/Driver.cpp +++ b/lldb/tools/driver/Driver.cpp @@ -39,6 +39,8 @@ using namespace lldb; static void reset_stdin_termios (); static struct termios g_old_stdin_termios; +static char *g_debugger_name = (char *) ""; + // In the Driver::MainLoop, we change the terminal settings. This function is // added as an atexit handler to make sure we clean them up. static void @@ -90,6 +92,9 @@ Driver::Driver () : m_option_data (), m_waiting_for_command (false) { + g_debugger_name = (char *) m_debugger.GetInstanceName(); + if (g_debugger_name == NULL) + g_debugger_name = (char *) ""; } Driver::~Driver () @@ -1263,6 +1268,22 @@ Driver::ReadyForCommand () } +void +sigwinch_handler (int signo) +{ + struct winsize window_size; + if (isatty (STDIN_FILENO) + && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0) + { + if ((window_size.ws_col > 0) && (strlen (g_debugger_name) > 0)) + { + char width_str_buffer[25]; + ::sprintf (width_str_buffer, "%d", window_size.ws_col); + SBDebugger::SetInternalVariable ("term-width", width_str_buffer, g_debugger_name); + } + } +} + int main (int argc, char const *argv[]) { @@ -1270,6 +1291,8 @@ main (int argc, char const *argv[]) SBHostOS::ThreadCreated ("[main]"); + signal (SIGWINCH, sigwinch_handler); + // Create a scope for driver so that the driver object will destroy itself // before SBDebugger::Terminate() is called. { |

