blob: 048036b776a2e70226a4478757f23fcaab30d61f [file] [log] [blame]
Greg Clayton84c39662011-04-27 22:04:39 +00001//===-- OptionGroupOutputFile.cpp -------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Johnny Chen4bee32e2011-05-13 20:21:08 +000010#include "lldb/Interpreter/OptionGroupOutputFile.h"
Greg Clayton84c39662011-04-27 22:04:39 +000011
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Johnny Chen7c575b32011-09-10 00:48:33 +000016#include "lldb/Utility/Utils.h"
Greg Clayton84c39662011-04-27 22:04:39 +000017
18using namespace lldb;
19using namespace lldb_private;
20
Kate Stoneb9c1b512016-09-06 20:57:50 +000021OptionGroupOutputFile::OptionGroupOutputFile()
22 : m_file(), m_append(false, false) {}
Greg Clayton84c39662011-04-27 22:04:39 +000023
Kate Stoneb9c1b512016-09-06 20:57:50 +000024OptionGroupOutputFile::~OptionGroupOutputFile() {}
Greg Clayton84c39662011-04-27 22:04:39 +000025
Kate Stoneb9c1b512016-09-06 20:57:50 +000026static const uint32_t SHORT_OPTION_APND = 0x61706e64; // 'apnd'
Saleem Abdulrasool44edda02014-03-18 04:43:47 +000027
Kate Stoneb9c1b512016-09-06 20:57:50 +000028static OptionDefinition g_option_table[] = {
29 {LLDB_OPT_SET_1, false, "outfile", 'o', OptionParser::eRequiredArgument,
30 nullptr, nullptr, 0, eArgTypeFilename,
31 "Specify a path for capturing command output."},
32 {LLDB_OPT_SET_1, false, "append-outfile", SHORT_OPTION_APND,
33 OptionParser::eNoArgument, nullptr, nullptr, 0, eArgTypeNone,
34 "Append to the file specified with '--outfile <path>'."},
Greg Clayton84c39662011-04-27 22:04:39 +000035};
36
Zachary Turner1f0f5b52016-09-22 20:22:55 +000037llvm::ArrayRef<OptionDefinition> OptionGroupOutputFile::GetDefinitions() {
Zachary Turner70602432016-09-22 21:06:13 +000038 return llvm::makeArrayRef(g_option_table);
Greg Clayton84c39662011-04-27 22:04:39 +000039}
40
Kate Stoneb9c1b512016-09-06 20:57:50 +000041Error OptionGroupOutputFile::SetOptionValue(
42 uint32_t option_idx, const char *option_arg,
43 ExecutionContext *execution_context) {
44 Error error;
45 const int short_option = g_option_table[option_idx].short_option;
Greg Clayton84c39662011-04-27 22:04:39 +000046
Kate Stoneb9c1b512016-09-06 20:57:50 +000047 switch (short_option) {
48 case 'o':
49 error = m_file.SetValueFromString(option_arg);
50 break;
Greg Clayton84c39662011-04-27 22:04:39 +000051
Kate Stoneb9c1b512016-09-06 20:57:50 +000052 case SHORT_OPTION_APND:
53 m_append.SetCurrentValue(true);
54 break;
Greg Clayton84c39662011-04-27 22:04:39 +000055
Kate Stoneb9c1b512016-09-06 20:57:50 +000056 default:
57 error.SetErrorStringWithFormat("unrecognized option '%c'", short_option);
58 break;
59 }
Greg Clayton84c39662011-04-27 22:04:39 +000060
Kate Stoneb9c1b512016-09-06 20:57:50 +000061 return error;
Greg Clayton84c39662011-04-27 22:04:39 +000062}
63
Kate Stoneb9c1b512016-09-06 20:57:50 +000064void OptionGroupOutputFile::OptionParsingStarting(
65 ExecutionContext *execution_context) {
66 m_file.Clear();
67 m_append.Clear();
Greg Clayton84c39662011-04-27 22:04:39 +000068}