1 //===-- OptionGroupOutputFile.cpp -----------------------------------------===//
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/OptionGroupOutputFile.h"
10
11 #include "lldb/Host/OptionParser.h"
12
13 using namespace lldb;
14 using namespace lldb_private;
15
OptionGroupOutputFile()16 OptionGroupOutputFile::OptionGroupOutputFile() : m_append(false, false) {}
17
18 static const uint32_t SHORT_OPTION_APND = 0x61706e64; // 'apnd'
19
20 static constexpr OptionDefinition g_option_table[] = {
21 {LLDB_OPT_SET_1, false, "outfile", 'o', OptionParser::eRequiredArgument,
22 nullptr, {}, 0, eArgTypeFilename,
23 "Specify a path for capturing command output."},
24 {LLDB_OPT_SET_1, false, "append-outfile", SHORT_OPTION_APND,
25 OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
26 "Append to the file specified with '--outfile <path>'."},
27 };
28
GetDefinitions()29 llvm::ArrayRef<OptionDefinition> OptionGroupOutputFile::GetDefinitions() {
30 return llvm::makeArrayRef(g_option_table);
31 }
32
33 Status
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)34 OptionGroupOutputFile::SetOptionValue(uint32_t option_idx,
35 llvm::StringRef option_arg,
36 ExecutionContext *execution_context) {
37 Status error;
38 const int short_option = g_option_table[option_idx].short_option;
39
40 switch (short_option) {
41 case 'o':
42 error = m_file.SetValueFromString(option_arg);
43 break;
44
45 case SHORT_OPTION_APND:
46 m_append.SetCurrentValue(true);
47 break;
48
49 default:
50 llvm_unreachable("Unimplemented option");
51 }
52
53 return error;
54 }
55
OptionParsingStarting(ExecutionContext * execution_context)56 void OptionGroupOutputFile::OptionParsingStarting(
57 ExecutionContext *execution_context) {
58 m_file.Clear();
59 m_append.Clear();
60 }
61