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:
Caroline Tice 2010-09-09 17:45:09 +00:00
parent 0166c95fdd
commit dd7598578f
3 changed files with 41 additions and 19 deletions

View File

@ -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:

View File

@ -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));

View File

@ -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.
{