]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Interpreter/OptionValueRegex.cpp
Fix a memory leak in if_delgroups() introduced in r334118.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Interpreter / OptionValueRegex.cpp
1 //===-- OptionValueRegex.cpp ------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "lldb/Interpreter/OptionValueRegex.h"
10
11 #include "lldb/Utility/Stream.h"
12
13 using namespace lldb;
14 using namespace lldb_private;
15
16 void OptionValueRegex::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
17                                  uint32_t dump_mask) {
18   if (dump_mask & eDumpOptionType)
19     strm.Printf("(%s)", GetTypeAsCString());
20   if (dump_mask & eDumpOptionValue) {
21     if (dump_mask & eDumpOptionType)
22       strm.PutCString(" = ");
23     if (m_regex.IsValid()) {
24       llvm::StringRef regex_text = m_regex.GetText();
25       strm.Printf("%s", regex_text.str().c_str());
26     }
27   }
28 }
29
30 Status OptionValueRegex::SetValueFromString(llvm::StringRef value,
31                                             VarSetOperationType op) {
32   Status error;
33   switch (op) {
34   case eVarSetOperationInvalid:
35   case eVarSetOperationInsertBefore:
36   case eVarSetOperationInsertAfter:
37   case eVarSetOperationRemove:
38   case eVarSetOperationAppend:
39     error = OptionValue::SetValueFromString(value, op);
40     break;
41
42   case eVarSetOperationClear:
43     Clear();
44     NotifyValueChanged();
45     break;
46
47   case eVarSetOperationReplace:
48   case eVarSetOperationAssign:
49     if (m_regex.Compile(value)) {
50       m_value_was_set = true;
51       NotifyValueChanged();
52     } else {
53       char regex_error[1024];
54       if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
55         error.SetErrorString(regex_error);
56       else
57         error.SetErrorStringWithFormat("regex error %u",
58                                        m_regex.GetErrorCode());
59     }
60     break;
61   }
62   return error;
63 }
64
65 lldb::OptionValueSP OptionValueRegex::DeepCopy() const {
66   return OptionValueSP(new OptionValueRegex(m_regex.GetText().str().c_str()));
67 }