
The getopt library has a structure called option (lowercase). We have a structure called Option (uppercase). previously the two structures had exactly the same definitions, and we were doing a C-style cast of an Option* to an option*. C-style casts don't bother to warn you when you cast to unrelated types, but in the original OptionValidator patch I modified the definition of Option. This patch fixes the errors by building an array of option structures and filling it out the correct way before passing it to the getopt library. This also fixes one other source of test failures: an uninitialized read that occurs due to not initializing a field of the OptionDefinition. Reviewed By: Todd Fiala Differential Revision: http://reviews.llvm.org/D4425 llvm-svn: 212628
60 lines
2.0 KiB
C++
60 lines
2.0 KiB
C++
//===-- OptionGroupUInt64.cpp ----------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Interpreter/OptionGroupUInt64.h"
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
OptionGroupUInt64::OptionGroupUInt64 (uint32_t usage_mask,
|
|
bool required,
|
|
const char *long_option,
|
|
int short_option,
|
|
uint32_t completion_type,
|
|
lldb::CommandArgumentType argument_type,
|
|
const char *usage_text,
|
|
uint64_t default_value) :
|
|
m_value (default_value, default_value)
|
|
{
|
|
m_option_definition.usage_mask = usage_mask;
|
|
m_option_definition.required = required;
|
|
m_option_definition.long_option = long_option;
|
|
m_option_definition.short_option = short_option;
|
|
m_option_definition.validator = nullptr;
|
|
m_option_definition.option_has_arg = OptionParser::eRequiredArgument;
|
|
m_option_definition.enum_values = nullptr;
|
|
m_option_definition.completion_type = completion_type;
|
|
m_option_definition.argument_type = argument_type;
|
|
m_option_definition.usage_text = usage_text;
|
|
}
|
|
|
|
OptionGroupUInt64::~OptionGroupUInt64 ()
|
|
{
|
|
}
|
|
|
|
Error
|
|
OptionGroupUInt64::SetOptionValue (CommandInterpreter &interpreter,
|
|
uint32_t option_idx,
|
|
const char *option_arg)
|
|
{
|
|
Error error (m_value.SetValueFromCString (option_arg));
|
|
return error;
|
|
}
|
|
|
|
void
|
|
OptionGroupUInt64::OptionParsingStarting (CommandInterpreter &interpreter)
|
|
{
|
|
m_value.Clear();
|
|
}
|