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 1067cc0636SGreg Clayton #include "lldb/Interpreter/OptionValueFileSpec.h" 1167cc0636SGreg Clayton 1267cc0636SGreg Clayton // C Includes 1367cc0636SGreg Clayton // C++ Includes 1467cc0636SGreg Clayton // Other libraries and framework includes 1567cc0636SGreg Clayton // Project includes 1667cc0636SGreg Clayton #include "lldb/Core/FormatManager.h" 1767cc0636SGreg Clayton #include "lldb/Core/State.h" 1867cc0636SGreg Clayton #include "lldb/Interpreter/Args.h" 1967cc0636SGreg Clayton #include "lldb/Interpreter/CommandCompletions.h" 2067cc0636SGreg Clayton 2167cc0636SGreg Clayton using namespace lldb; 2267cc0636SGreg Clayton using namespace lldb_private; 2367cc0636SGreg Clayton 24b5f0feabSGreg Clayton 25b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec () : 26b5f0feabSGreg Clayton OptionValue(), 27b5f0feabSGreg Clayton m_current_value (), 28b5f0feabSGreg Clayton m_default_value (), 29b5f0feabSGreg Clayton m_data_sp(), 30b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 31b5f0feabSGreg Clayton { 32b5f0feabSGreg Clayton } 33b5f0feabSGreg Clayton 34b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec (const FileSpec &value) : 35b5f0feabSGreg Clayton OptionValue(), 36b5f0feabSGreg Clayton m_current_value (value), 37b5f0feabSGreg Clayton m_default_value (value), 38b5f0feabSGreg Clayton m_data_sp(), 39b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 40b5f0feabSGreg Clayton { 41b5f0feabSGreg Clayton } 42b5f0feabSGreg Clayton 43b5f0feabSGreg Clayton OptionValueFileSpec::OptionValueFileSpec (const FileSpec ¤t_value, 44b5f0feabSGreg Clayton const FileSpec &default_value) : 45b5f0feabSGreg Clayton OptionValue(), 46b5f0feabSGreg Clayton m_current_value (current_value), 47b5f0feabSGreg Clayton m_default_value (default_value), 48b5f0feabSGreg Clayton m_data_sp(), 49b5f0feabSGreg Clayton m_completion_mask (CommandCompletions::eDiskFileCompletion) 50b5f0feabSGreg Clayton { 51b5f0feabSGreg Clayton } 52b5f0feabSGreg Clayton 5367cc0636SGreg Clayton void 5467cc0636SGreg Clayton OptionValueFileSpec::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) 5567cc0636SGreg Clayton { 5667cc0636SGreg Clayton if (dump_mask & eDumpOptionType) 5767cc0636SGreg Clayton strm.Printf ("(%s)", GetTypeAsCString ()); 5867cc0636SGreg Clayton if (dump_mask & eDumpOptionValue) 5967cc0636SGreg Clayton { 6067cc0636SGreg Clayton if (dump_mask & eDumpOptionType) 6167cc0636SGreg Clayton strm.PutCString (" = "); 6267cc0636SGreg Clayton 6367cc0636SGreg Clayton if (m_current_value) 6467cc0636SGreg Clayton { 6567cc0636SGreg Clayton if (m_current_value.GetDirectory()) 6667cc0636SGreg Clayton { 6767cc0636SGreg Clayton strm << '"' << m_current_value.GetDirectory(); 6867cc0636SGreg Clayton if (m_current_value.GetFilename()) 6967cc0636SGreg Clayton strm << '/' << m_current_value.GetFilename(); 7067cc0636SGreg Clayton strm << '"'; 7167cc0636SGreg Clayton } 7267cc0636SGreg Clayton else 7367cc0636SGreg Clayton { 7467cc0636SGreg Clayton strm << '"' << m_current_value.GetFilename() << '"'; 7567cc0636SGreg Clayton } 7667cc0636SGreg Clayton } 7767cc0636SGreg Clayton } 7867cc0636SGreg Clayton } 7967cc0636SGreg Clayton 8067cc0636SGreg Clayton Error 8167cc0636SGreg Clayton OptionValueFileSpec::SetValueFromCString (const char *value_cstr, 8267cc0636SGreg Clayton VarSetOperationType op) 8367cc0636SGreg Clayton { 8467cc0636SGreg Clayton Error error; 8567cc0636SGreg Clayton switch (op) 8667cc0636SGreg Clayton { 8767cc0636SGreg Clayton case eVarSetOperationClear: 8867cc0636SGreg Clayton Clear (); 8967cc0636SGreg Clayton break; 9067cc0636SGreg Clayton 9167cc0636SGreg Clayton case eVarSetOperationReplace: 9267cc0636SGreg Clayton case eVarSetOperationAssign: 9367cc0636SGreg Clayton if (value_cstr && value_cstr[0]) 9467cc0636SGreg Clayton { 9567cc0636SGreg Clayton m_value_was_set = true; 96*3f9fa52cSJason Molenda m_current_value.SetFile(value_cstr, value_cstr[0] == '~'); 9767cc0636SGreg Clayton } 9867cc0636SGreg Clayton else 9967cc0636SGreg Clayton { 10067cc0636SGreg Clayton error.SetErrorString("invalid value string"); 10167cc0636SGreg Clayton } 10267cc0636SGreg Clayton break; 10367cc0636SGreg Clayton 10467cc0636SGreg Clayton case eVarSetOperationInsertBefore: 10567cc0636SGreg Clayton case eVarSetOperationInsertAfter: 10667cc0636SGreg Clayton case eVarSetOperationRemove: 10767cc0636SGreg Clayton case eVarSetOperationAppend: 10867cc0636SGreg Clayton case eVarSetOperationInvalid: 10967cc0636SGreg Clayton error = OptionValue::SetValueFromCString (value_cstr, op); 11067cc0636SGreg Clayton break; 11167cc0636SGreg Clayton } 11267cc0636SGreg Clayton return error; 11367cc0636SGreg Clayton } 11467cc0636SGreg Clayton 11567cc0636SGreg Clayton lldb::OptionValueSP 11667cc0636SGreg Clayton OptionValueFileSpec::DeepCopy () const 11767cc0636SGreg Clayton { 11867cc0636SGreg Clayton return OptionValueSP(new OptionValueFileSpec(*this)); 11967cc0636SGreg Clayton } 12067cc0636SGreg Clayton 12167cc0636SGreg Clayton 12267cc0636SGreg Clayton size_t 12367cc0636SGreg Clayton OptionValueFileSpec::AutoComplete (CommandInterpreter &interpreter, 12467cc0636SGreg Clayton const char *s, 12567cc0636SGreg Clayton int match_start_point, 12667cc0636SGreg Clayton int max_return_elements, 12767cc0636SGreg Clayton bool &word_complete, 12867cc0636SGreg Clayton StringList &matches) 12967cc0636SGreg Clayton { 13067cc0636SGreg Clayton word_complete = false; 13167cc0636SGreg Clayton matches.Clear(); 13267cc0636SGreg Clayton CommandCompletions::InvokeCommonCompletionCallbacks (interpreter, 133b5f0feabSGreg Clayton m_completion_mask, 13467cc0636SGreg Clayton s, 13567cc0636SGreg Clayton match_start_point, 13667cc0636SGreg Clayton max_return_elements, 13767cc0636SGreg Clayton NULL, 13867cc0636SGreg Clayton word_complete, 13967cc0636SGreg Clayton matches); 14067cc0636SGreg Clayton return matches.GetSize(); 14167cc0636SGreg Clayton } 14267cc0636SGreg Clayton 14367cc0636SGreg Clayton 14467cc0636SGreg Clayton 1456920b52bSGreg Clayton const lldb::DataBufferSP & 1460b0b512fSGreg Clayton OptionValueFileSpec::GetFileContents(bool null_terminate) 1476920b52bSGreg Clayton { 1486920b52bSGreg Clayton if (!m_data_sp && m_current_value) 1490b0b512fSGreg Clayton { 1500b0b512fSGreg Clayton if (null_terminate) 1510b0b512fSGreg Clayton m_data_sp = m_current_value.ReadFileContentsAsCString(); 1520b0b512fSGreg Clayton else 1536920b52bSGreg Clayton m_data_sp = m_current_value.ReadFileContents(); 1540b0b512fSGreg Clayton } 1556920b52bSGreg Clayton return m_data_sp; 1566920b52bSGreg Clayton } 1576920b52bSGreg Clayton 15867cc0636SGreg Clayton 159