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