167cc0636SGreg Clayton //===-- OptionValueFileSpec.cpp ---------------------------------*- C++ -*-===// 267cc0636SGreg Clayton // 367cc0636SGreg Clayton // The LLVM Compiler Infrastructure 467cc0636SGreg Clayton // 567cc0636SGreg Clayton // This file is distributed under the University of Illinois Open Source 667cc0636SGreg Clayton // License. See LICENSE.TXT for details. 767cc0636SGreg Clayton // 867cc0636SGreg Clayton //===----------------------------------------------------------------------===// 967cc0636SGreg Clayton 10*93a64300SDaniel Malea #include "lldb/lldb-python.h" 11*93a64300SDaniel Malea 1267cc0636SGreg Clayton #include "lldb/Interpreter/OptionValueFileSpec.h" 1367cc0636SGreg Clayton 1467cc0636SGreg Clayton // C Includes 1567cc0636SGreg Clayton // C++ Includes 1667cc0636SGreg Clayton // Other libraries and framework includes 1767cc0636SGreg Clayton // Project includes 1867cc0636SGreg Clayton #include "lldb/Core/FormatManager.h" 1967cc0636SGreg Clayton #include "lldb/Core/State.h" 2067cc0636SGreg Clayton #include "lldb/Interpreter/Args.h" 2167cc0636SGreg Clayton #include "lldb/Interpreter/CommandCompletions.h" 2267cc0636SGreg Clayton 2367cc0636SGreg Clayton using namespace lldb; 2467cc0636SGreg Clayton using namespace lldb_private; 2567cc0636SGreg Clayton 26b5f0feabSGreg Clayton 27b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec () : 28b5f0feabSGreg Clayton OptionValue(), 29b5f0feabSGreg Clayton m_current_value (), 30b5f0feabSGreg Clayton m_default_value (), 31b5f0feabSGreg Clayton m_data_sp(), 32b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 33b5f0feabSGreg Clayton { 34b5f0feabSGreg Clayton } 35b5f0feabSGreg Clayton 36b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec (const FileSpec &value) : 37b5f0feabSGreg Clayton OptionValue(), 38b5f0feabSGreg Clayton m_current_value (value), 39b5f0feabSGreg Clayton m_default_value (value), 40b5f0feabSGreg Clayton m_data_sp(), 41b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 42b5f0feabSGreg Clayton { 43b5f0feabSGreg Clayton } 44b5f0feabSGreg Clayton 45b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec (const FileSpec ¤t_value, 46b5f0feabSGreg Clayton const FileSpec &default_value) : 47b5f0feabSGreg Clayton OptionValue(), 48b5f0feabSGreg Clayton m_current_value (current_value), 49b5f0feabSGreg Clayton m_default_value (default_value), 50b5f0feabSGreg Clayton m_data_sp(), 51b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 52b5f0feabSGreg Clayton { 53b5f0feabSGreg Clayton } 54b5f0feabSGreg Clayton 5567cc0636SGreg Clayton void 5667cc0636SGreg Clayton OptionValueFileSpec::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) 5767cc0636SGreg Clayton { 5867cc0636SGreg Clayton if (dump_mask & eDumpOptionType) 5967cc0636SGreg Clayton strm.Printf ("(%s)", GetTypeAsCString ()); 6067cc0636SGreg Clayton if (dump_mask & eDumpOptionValue) 6167cc0636SGreg Clayton { 6267cc0636SGreg Clayton if (dump_mask & eDumpOptionType) 6367cc0636SGreg Clayton strm.PutCString (" = "); 6467cc0636SGreg Clayton 6567cc0636SGreg Clayton if (m_current_value) 6667cc0636SGreg Clayton { 6767cc0636SGreg Clayton if (m_current_value.GetDirectory()) 6867cc0636SGreg Clayton { 6967cc0636SGreg Clayton strm << '"' << m_current_value.GetDirectory(); 7067cc0636SGreg Clayton if (m_current_value.GetFilename()) 7167cc0636SGreg Clayton strm << '/' << m_current_value.GetFilename(); 7267cc0636SGreg Clayton strm << '"'; 7367cc0636SGreg Clayton } 7467cc0636SGreg Clayton else 7567cc0636SGreg Clayton { 7667cc0636SGreg Clayton strm << '"' << m_current_value.GetFilename() << '"'; 7767cc0636SGreg Clayton } 7867cc0636SGreg Clayton } 7967cc0636SGreg Clayton } 8067cc0636SGreg Clayton } 8167cc0636SGreg Clayton 8267cc0636SGreg Clayton Error 8367cc0636SGreg Clayton OptionValueFileSpec::SetValueFromCString (const char *value_cstr, 8467cc0636SGreg Clayton VarSetOperationType op) 8567cc0636SGreg Clayton { 8667cc0636SGreg Clayton Error error; 8767cc0636SGreg Clayton switch (op) 8867cc0636SGreg Clayton { 8967cc0636SGreg Clayton case eVarSetOperationClear: 9067cc0636SGreg Clayton Clear (); 9167cc0636SGreg Clayton break; 9267cc0636SGreg Clayton 9367cc0636SGreg Clayton case eVarSetOperationReplace: 9467cc0636SGreg Clayton case eVarSetOperationAssign: 9567cc0636SGreg Clayton if (value_cstr && value_cstr[0]) 9667cc0636SGreg Clayton { 9767cc0636SGreg Clayton m_value_was_set = true; 983f9fa52cSJason Molenda m_current_value.SetFile(value_cstr, value_cstr[0] == '~'); 9967cc0636SGreg Clayton } 10067cc0636SGreg Clayton else 10167cc0636SGreg Clayton { 10267cc0636SGreg Clayton error.SetErrorString("invalid value string"); 10367cc0636SGreg Clayton } 10467cc0636SGreg Clayton break; 10567cc0636SGreg Clayton 10667cc0636SGreg Clayton case eVarSetOperationInsertBefore: 10767cc0636SGreg Clayton case eVarSetOperationInsertAfter: 10867cc0636SGreg Clayton case eVarSetOperationRemove: 10967cc0636SGreg Clayton case eVarSetOperationAppend: 11067cc0636SGreg Clayton case eVarSetOperationInvalid: 11167cc0636SGreg Clayton error = OptionValue::SetValueFromCString (value_cstr, op); 11267cc0636SGreg Clayton break; 11367cc0636SGreg Clayton } 11467cc0636SGreg Clayton return error; 11567cc0636SGreg Clayton } 11667cc0636SGreg Clayton 11767cc0636SGreg Clayton lldb::OptionValueSP 11867cc0636SGreg Clayton OptionValueFileSpec::DeepCopy () const 11967cc0636SGreg Clayton { 12067cc0636SGreg Clayton return OptionValueSP(new OptionValueFileSpec(*this)); 12167cc0636SGreg Clayton } 12267cc0636SGreg Clayton 12367cc0636SGreg Clayton 12467cc0636SGreg Clayton size_t 12567cc0636SGreg Clayton OptionValueFileSpec::AutoComplete (CommandInterpreter &interpreter, 12667cc0636SGreg Clayton const char *s, 12767cc0636SGreg Clayton int match_start_point, 12867cc0636SGreg Clayton int max_return_elements, 12967cc0636SGreg Clayton bool &word_complete, 13067cc0636SGreg Clayton StringList &matches) 13167cc0636SGreg Clayton { 13267cc0636SGreg Clayton word_complete = false; 13367cc0636SGreg Clayton matches.Clear(); 13467cc0636SGreg Clayton CommandCompletions::InvokeCommonCompletionCallbacks (interpreter, 135b5f0feabSGreg Clayton m_completion_mask, 13667cc0636SGreg Clayton s, 13767cc0636SGreg Clayton match_start_point, 13867cc0636SGreg Clayton max_return_elements, 13967cc0636SGreg Clayton NULL, 14067cc0636SGreg Clayton word_complete, 14167cc0636SGreg Clayton matches); 14267cc0636SGreg Clayton return matches.GetSize(); 14367cc0636SGreg Clayton } 14467cc0636SGreg Clayton 14567cc0636SGreg Clayton 14667cc0636SGreg Clayton 1476920b52bSGreg Clayton const lldb::DataBufferSP & 1480b0b512fSGreg Clayton OptionValueFileSpec::GetFileContents(bool null_terminate) 1496920b52bSGreg Clayton { 1506920b52bSGreg Clayton if (!m_data_sp && m_current_value) 1510b0b512fSGreg Clayton { 1520b0b512fSGreg Clayton if (null_terminate) 1530b0b512fSGreg Clayton m_data_sp = m_current_value.ReadFileContentsAsCString(); 1540b0b512fSGreg Clayton else 1556920b52bSGreg Clayton m_data_sp = m_current_value.ReadFileContents(); 1560b0b512fSGreg Clayton } 1576920b52bSGreg Clayton return m_data_sp; 1586920b52bSGreg Clayton } 1596920b52bSGreg Clayton 16067cc0636SGreg Clayton 161