1*76559068SAndroid Build Coastguard Worker //===-- flags_parser.h ------------------------------------------*- C++ -*-===// 2*76559068SAndroid Build Coastguard Worker // 3*76559068SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*76559068SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*76559068SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*76559068SAndroid Build Coastguard Worker // 7*76559068SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*76559068SAndroid Build Coastguard Worker 9*76559068SAndroid Build Coastguard Worker #ifndef SCUDO_FLAGS_PARSER_H_ 10*76559068SAndroid Build Coastguard Worker #define SCUDO_FLAGS_PARSER_H_ 11*76559068SAndroid Build Coastguard Worker 12*76559068SAndroid Build Coastguard Worker #include "report.h" 13*76559068SAndroid Build Coastguard Worker #include "string_utils.h" 14*76559068SAndroid Build Coastguard Worker 15*76559068SAndroid Build Coastguard Worker #include <stddef.h> 16*76559068SAndroid Build Coastguard Worker 17*76559068SAndroid Build Coastguard Worker namespace scudo { 18*76559068SAndroid Build Coastguard Worker 19*76559068SAndroid Build Coastguard Worker enum class FlagType : u8 { 20*76559068SAndroid Build Coastguard Worker FT_bool, 21*76559068SAndroid Build Coastguard Worker FT_int, 22*76559068SAndroid Build Coastguard Worker }; 23*76559068SAndroid Build Coastguard Worker 24*76559068SAndroid Build Coastguard Worker class FlagParser { 25*76559068SAndroid Build Coastguard Worker public: 26*76559068SAndroid Build Coastguard Worker void registerFlag(const char *Name, const char *Desc, FlagType Type, 27*76559068SAndroid Build Coastguard Worker void *Var); 28*76559068SAndroid Build Coastguard Worker void parseString(const char *S); 29*76559068SAndroid Build Coastguard Worker void printFlagDescriptions(); 30*76559068SAndroid Build Coastguard Worker void parseStringPair(const char *Name, const char *Value); 31*76559068SAndroid Build Coastguard Worker 32*76559068SAndroid Build Coastguard Worker private: 33*76559068SAndroid Build Coastguard Worker static const u32 MaxFlags = 20; 34*76559068SAndroid Build Coastguard Worker struct Flag { 35*76559068SAndroid Build Coastguard Worker const char *Name; 36*76559068SAndroid Build Coastguard Worker const char *Desc; 37*76559068SAndroid Build Coastguard Worker FlagType Type; 38*76559068SAndroid Build Coastguard Worker void *Var; 39*76559068SAndroid Build Coastguard Worker } Flags[MaxFlags]; 40*76559068SAndroid Build Coastguard Worker 41*76559068SAndroid Build Coastguard Worker u32 NumberOfFlags = 0; 42*76559068SAndroid Build Coastguard Worker const char *Buffer = nullptr; 43*76559068SAndroid Build Coastguard Worker uptr Pos = 0; 44*76559068SAndroid Build Coastguard Worker 45*76559068SAndroid Build Coastguard Worker void reportFatalError(const char *Error); 46*76559068SAndroid Build Coastguard Worker void skipWhitespace(); 47*76559068SAndroid Build Coastguard Worker void parseFlags(); 48*76559068SAndroid Build Coastguard Worker void parseFlag(); 49*76559068SAndroid Build Coastguard Worker bool runHandler(const char *Name, const char *Value, char Sep); 50*76559068SAndroid Build Coastguard Worker }; 51*76559068SAndroid Build Coastguard Worker 52*76559068SAndroid Build Coastguard Worker void reportUnrecognizedFlags(); 53*76559068SAndroid Build Coastguard Worker 54*76559068SAndroid Build Coastguard Worker } // namespace scudo 55*76559068SAndroid Build Coastguard Worker 56*76559068SAndroid Build Coastguard Worker #endif // SCUDO_FLAGS_PARSER_H_ 57