Make API calls for setting/getting user settable variables static.
Modify Driver to handle SIGWINCH signals and automatically re-set the term-width variable. llvm-svn: 113506
This commit is contained in:
parent
0166c95fdd
commit
dd7598578f
|
@ -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:
|
||||
|
||||
|
|
|
@ -565,17 +565,19 @@ SBDebugger::FindDebuggerWithID (int id)
|
|||
return sb_debugger;
|
||||
}
|
||||
|
||||
const char *
|
||||
SBDebugger::GetInstanceName()
|
||||
{
|
||||
if (m_opaque_sp)
|
||||
return m_opaque_sp->GetInstanceName().AsCString();
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SBError
|
||||
SBDebugger::SetInternalVariable (const char *var_name, const char *value)
|
||||
SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
|
||||
{
|
||||
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();
|
||||
else
|
||||
debugger_instance_name = "";
|
||||
|
||||
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));
|
||||
|
|
|
@ -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.
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue