aboutsummaryrefslogtreecommitdiff
path: root/source/Interpreter/OptionValueFileSpec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Interpreter/OptionValueFileSpec.cpp')
-rw-r--r--source/Interpreter/OptionValueFileSpec.cpp232
1 files changed, 95 insertions, 137 deletions
diff --git a/source/Interpreter/OptionValueFileSpec.cpp b/source/Interpreter/OptionValueFileSpec.cpp
index 3a282f177fea..a6eb5375851d 100644
--- a/source/Interpreter/OptionValueFileSpec.cpp
+++ b/source/Interpreter/OptionValueFileSpec.cpp
@@ -9,162 +9,120 @@
#include "lldb/Interpreter/OptionValueFileSpec.h"
-// C Includes
-// C++ Includes
-// Other libraries and framework includes
-// Project includes
#include "lldb/Core/State.h"
#include "lldb/DataFormatters/FormatManager.h"
+#include "lldb/Host/FileSystem.h"
#include "lldb/Interpreter/Args.h"
#include "lldb/Interpreter/CommandCompletions.h"
+#include "lldb/Interpreter/CommandInterpreter.h"
using namespace lldb;
using namespace lldb_private;
-
-OptionValueFileSpec::OptionValueFileSpec (bool resolve) :
- OptionValue(),
- m_current_value (),
- m_default_value (),
- m_data_sp(),
- m_data_mod_time (),
- m_completion_mask (CommandCompletions::eDiskFileCompletion),
- m_resolve (resolve)
-{
-}
-
-OptionValueFileSpec::OptionValueFileSpec (const FileSpec &value,
- bool resolve) :
- OptionValue(),
- m_current_value (value),
- m_default_value (value),
- m_data_sp(),
- m_data_mod_time (),
- m_completion_mask (CommandCompletions::eDiskFileCompletion),
- m_resolve (resolve)
-{
-}
-
-OptionValueFileSpec::OptionValueFileSpec (const FileSpec &current_value,
- const FileSpec &default_value,
- bool resolve) :
- OptionValue(),
- m_current_value (current_value),
- m_default_value (default_value),
- m_data_sp(),
- m_data_mod_time (),
- m_completion_mask (CommandCompletions::eDiskFileCompletion),
- m_resolve (resolve)
-{
-}
-
-void
-OptionValueFileSpec::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
-{
+OptionValueFileSpec::OptionValueFileSpec(bool resolve)
+ : OptionValue(), m_current_value(), m_default_value(), m_data_sp(),
+ m_data_mod_time(),
+ m_completion_mask(CommandCompletions::eDiskFileCompletion),
+ m_resolve(resolve) {}
+
+OptionValueFileSpec::OptionValueFileSpec(const FileSpec &value, bool resolve)
+ : OptionValue(), m_current_value(value), m_default_value(value),
+ m_data_sp(), m_data_mod_time(),
+ m_completion_mask(CommandCompletions::eDiskFileCompletion),
+ m_resolve(resolve) {}
+
+OptionValueFileSpec::OptionValueFileSpec(const FileSpec &current_value,
+ const FileSpec &default_value,
+ bool resolve)
+ : OptionValue(), m_current_value(current_value),
+ m_default_value(default_value), m_data_sp(), m_data_mod_time(),
+ m_completion_mask(CommandCompletions::eDiskFileCompletion),
+ m_resolve(resolve) {}
+
+void OptionValueFileSpec::DumpValue(const ExecutionContext *exe_ctx,
+ Stream &strm, uint32_t dump_mask) {
+ if (dump_mask & eDumpOptionType)
+ strm.Printf("(%s)", GetTypeAsCString());
+ if (dump_mask & eDumpOptionValue) {
if (dump_mask & eDumpOptionType)
- strm.Printf ("(%s)", GetTypeAsCString ());
- if (dump_mask & eDumpOptionValue)
- {
- if (dump_mask & eDumpOptionType)
- strm.PutCString (" = ");
+ strm.PutCString(" = ");
- if (m_current_value)
- {
- strm << '"' << m_current_value.GetPath().c_str() << '"';
- }
+ if (m_current_value) {
+ strm << '"' << m_current_value.GetPath().c_str() << '"';
}
+ }
}
-Error
-OptionValueFileSpec::SetValueFromString (llvm::StringRef value,
- VarSetOperationType op)
-{
- Error error;
- switch (op)
- {
- case eVarSetOperationClear:
- Clear ();
- NotifyValueChanged();
- break;
-
- case eVarSetOperationReplace:
- case eVarSetOperationAssign:
- if (value.size() > 0)
- {
- // The setting value may have whitespace, double-quotes, or single-quotes around the file
- // path to indicate that internal spaces are not word breaks. Strip off any ws & quotes
- // from the start and end of the file path - we aren't doing any word // breaking here so
- // the quoting is unnecessary. NB this will cause a problem if someone tries to specify
- // a file path that legitimately begins or ends with a " or ' character, or whitespace.
- value = value.trim("\"' \t");
- m_value_was_set = true;
- m_current_value.SetFile(value.str().c_str(), m_resolve);
- m_data_sp.reset();
- m_data_mod_time.Clear();
- NotifyValueChanged();
- }
- else
- {
- error.SetErrorString("invalid value string");
- }
- break;
-
- case eVarSetOperationInsertBefore:
- case eVarSetOperationInsertAfter:
- case eVarSetOperationRemove:
- case eVarSetOperationAppend:
- case eVarSetOperationInvalid:
- error = OptionValue::SetValueFromString (value, op);
- break;
+Error OptionValueFileSpec::SetValueFromString(llvm::StringRef value,
+ VarSetOperationType op) {
+ Error error;
+ switch (op) {
+ case eVarSetOperationClear:
+ Clear();
+ NotifyValueChanged();
+ break;
+
+ case eVarSetOperationReplace:
+ case eVarSetOperationAssign:
+ if (value.size() > 0) {
+ // The setting value may have whitespace, double-quotes, or single-quotes
+ // around the file
+ // path to indicate that internal spaces are not word breaks. Strip off
+ // any ws & quotes
+ // from the start and end of the file path - we aren't doing any word //
+ // breaking here so
+ // the quoting is unnecessary. NB this will cause a problem if someone
+ // tries to specify
+ // a file path that legitimately begins or ends with a " or ' character,
+ // or whitespace.
+ value = value.trim("\"' \t");
+ m_value_was_set = true;
+ m_current_value.SetFile(value.str(), m_resolve);
+ m_data_sp.reset();
+ m_data_mod_time = llvm::sys::TimePoint<>();
+ NotifyValueChanged();
+ } else {
+ error.SetErrorString("invalid value string");
}
- return error;
+ break;
+
+ case eVarSetOperationInsertBefore:
+ case eVarSetOperationInsertAfter:
+ case eVarSetOperationRemove:
+ case eVarSetOperationAppend:
+ case eVarSetOperationInvalid:
+ error = OptionValue::SetValueFromString(value, op);
+ break;
+ }
+ return error;
}
-lldb::OptionValueSP
-OptionValueFileSpec::DeepCopy () const
-{
- return OptionValueSP(new OptionValueFileSpec(*this));
+lldb::OptionValueSP OptionValueFileSpec::DeepCopy() const {
+ return OptionValueSP(new OptionValueFileSpec(*this));
}
-
-size_t
-OptionValueFileSpec::AutoComplete (CommandInterpreter &interpreter,
- const char *s,
- int match_start_point,
- int max_return_elements,
- bool &word_complete,
- StringList &matches)
-{
- word_complete = false;
- matches.Clear();
- CommandCompletions::InvokeCommonCompletionCallbacks (interpreter,
- m_completion_mask,
- s,
- match_start_point,
- max_return_elements,
- nullptr,
- word_complete,
- matches);
- return matches.GetSize();
+size_t OptionValueFileSpec::AutoComplete(
+ CommandInterpreter &interpreter, llvm::StringRef s, int match_start_point,
+ int max_return_elements, bool &word_complete, StringList &matches) {
+ word_complete = false;
+ matches.Clear();
+ CommandCompletions::InvokeCommonCompletionCallbacks(
+ interpreter, m_completion_mask, s, match_start_point, max_return_elements,
+ nullptr, word_complete, matches);
+ return matches.GetSize();
}
-
-
const lldb::DataBufferSP &
-OptionValueFileSpec::GetFileContents(bool null_terminate)
-{
- if (m_current_value)
- {
- const TimeValue file_mod_time = m_current_value.GetModificationTime();
- if (m_data_sp && m_data_mod_time == file_mod_time)
- return m_data_sp;
- if (null_terminate)
- m_data_sp = m_current_value.ReadFileContentsAsCString();
- else
- m_data_sp = m_current_value.ReadFileContents();
- m_data_mod_time = file_mod_time;
- }
- return m_data_sp;
+OptionValueFileSpec::GetFileContents(bool null_terminate) {
+ if (m_current_value) {
+ const auto file_mod_time = FileSystem::GetModificationTime(m_current_value);
+ if (m_data_sp && m_data_mod_time == file_mod_time)
+ return m_data_sp;
+ if (null_terminate)
+ m_data_sp = m_current_value.ReadFileContentsAsCString();
+ else
+ m_data_sp = m_current_value.ReadFileContents();
+ m_data_mod_time = file_mod_time;
+ }
+ return m_data_sp;
}
-
-