Path: blob/main/contrib/llvm-project/lldb/source/Interpreter/OptionValueFileSpec.cpp
39587 views
//===-- OptionValueFileSpec.cpp -------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Interpreter/OptionValueFileSpec.h"910#include "lldb/DataFormatters/FormatManager.h"11#include "lldb/Host/FileSystem.h"12#include "lldb/Interpreter/CommandCompletions.h"13#include "lldb/Interpreter/CommandInterpreter.h"14#include "lldb/Utility/Args.h"15#include "lldb/Utility/State.h"1617using namespace lldb;18using namespace lldb_private;1920OptionValueFileSpec::OptionValueFileSpec(bool resolve) : m_resolve(resolve) {}2122OptionValueFileSpec::OptionValueFileSpec(const FileSpec &value, bool resolve)23: m_current_value(value), m_default_value(value),2425m_resolve(resolve) {}2627OptionValueFileSpec::OptionValueFileSpec(const FileSpec ¤t_value,28const FileSpec &default_value,29bool resolve)30: m_current_value(current_value), m_default_value(default_value),3132m_resolve(resolve) {}3334void OptionValueFileSpec::DumpValue(const ExecutionContext *exe_ctx,35Stream &strm, uint32_t dump_mask) {36if (dump_mask & eDumpOptionType)37strm.Printf("(%s)", GetTypeAsCString());38if (dump_mask & eDumpOptionValue) {39if (dump_mask & eDumpOptionType)40strm.PutCString(" = ");4142if (m_current_value) {43strm << '"' << m_current_value.GetPath().c_str() << '"';44}45}46}4748Status OptionValueFileSpec::SetValueFromString(llvm::StringRef value,49VarSetOperationType op) {50Status error;51switch (op) {52case eVarSetOperationClear:53Clear();54NotifyValueChanged();55break;5657case eVarSetOperationReplace:58case eVarSetOperationAssign:59if (value.size() > 0) {60value = value.trim("\"' \t");61m_value_was_set = true;62m_current_value.SetFile(value.str(), FileSpec::Style::native);63if (m_resolve)64FileSystem::Instance().Resolve(m_current_value);65m_data_sp.reset();66m_data_mod_time = llvm::sys::TimePoint<>();67NotifyValueChanged();68} else {69error.SetErrorString("invalid value string");70}71break;7273case eVarSetOperationInsertBefore:74case eVarSetOperationInsertAfter:75case eVarSetOperationRemove:76case eVarSetOperationAppend:77case eVarSetOperationInvalid:78error = OptionValue::SetValueFromString(value, op);79break;80}81return error;82}8384void OptionValueFileSpec::AutoComplete(CommandInterpreter &interpreter,85CompletionRequest &request) {86lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(87interpreter, m_completion_mask, request, nullptr);88}8990const lldb::DataBufferSP &OptionValueFileSpec::GetFileContents() {91if (m_current_value) {92const auto file_mod_time = FileSystem::Instance().GetModificationTime(m_current_value);93if (m_data_sp && m_data_mod_time == file_mod_time)94return m_data_sp;95m_data_sp =96FileSystem::Instance().CreateDataBuffer(m_current_value.GetPath());97m_data_mod_time = file_mod_time;98}99return m_data_sp;100}101102103