xref: /openbsd-src/gnu/llvm/lldb/source/Interpreter/OptionGroupOutputFile.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1dda28197Spatrick //===-- OptionGroupOutputFile.cpp -----------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "lldb/Interpreter/OptionGroupOutputFile.h"
10061da546Spatrick 
11061da546Spatrick #include "lldb/Host/OptionParser.h"
12061da546Spatrick 
13061da546Spatrick using namespace lldb;
14061da546Spatrick using namespace lldb_private;
15061da546Spatrick 
OptionGroupOutputFile()16be691f3bSpatrick OptionGroupOutputFile::OptionGroupOutputFile() : m_append(false, false) {}
17061da546Spatrick 
18061da546Spatrick static const uint32_t SHORT_OPTION_APND = 0x61706e64; // 'apnd'
19061da546Spatrick 
20061da546Spatrick static constexpr OptionDefinition g_option_table[] = {
21061da546Spatrick     {LLDB_OPT_SET_1, false, "outfile", 'o', OptionParser::eRequiredArgument,
22061da546Spatrick      nullptr, {}, 0, eArgTypeFilename,
23061da546Spatrick      "Specify a path for capturing command output."},
24061da546Spatrick     {LLDB_OPT_SET_1, false, "append-outfile", SHORT_OPTION_APND,
25061da546Spatrick      OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
26061da546Spatrick      "Append to the file specified with '--outfile <path>'."},
27061da546Spatrick };
28061da546Spatrick 
GetDefinitions()29061da546Spatrick llvm::ArrayRef<OptionDefinition> OptionGroupOutputFile::GetDefinitions() {
30*f6aab3d8Srobert   return llvm::ArrayRef(g_option_table);
31061da546Spatrick }
32061da546Spatrick 
33061da546Spatrick Status
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)34061da546Spatrick OptionGroupOutputFile::SetOptionValue(uint32_t option_idx,
35061da546Spatrick                                       llvm::StringRef option_arg,
36061da546Spatrick                                       ExecutionContext *execution_context) {
37061da546Spatrick   Status error;
38061da546Spatrick   const int short_option = g_option_table[option_idx].short_option;
39061da546Spatrick 
40061da546Spatrick   switch (short_option) {
41061da546Spatrick   case 'o':
42061da546Spatrick     error = m_file.SetValueFromString(option_arg);
43061da546Spatrick     break;
44061da546Spatrick 
45061da546Spatrick   case SHORT_OPTION_APND:
46061da546Spatrick     m_append.SetCurrentValue(true);
47061da546Spatrick     break;
48061da546Spatrick 
49061da546Spatrick   default:
50061da546Spatrick     llvm_unreachable("Unimplemented option");
51061da546Spatrick   }
52061da546Spatrick 
53061da546Spatrick   return error;
54061da546Spatrick }
55061da546Spatrick 
OptionParsingStarting(ExecutionContext * execution_context)56061da546Spatrick void OptionGroupOutputFile::OptionParsingStarting(
57061da546Spatrick     ExecutionContext *execution_context) {
58061da546Spatrick   m_file.Clear();
59061da546Spatrick   m_append.Clear();
60061da546Spatrick }
61