1 //===-- flags_parser.h ------------------------------------------*- C++ -*-===// 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 #ifndef SCUDO_FLAGS_PARSER_H_ 10 #define SCUDO_FLAGS_PARSER_H_ 11 12 #include "report.h" 13 #include "string_utils.h" 14 15 #include <stddef.h> 16 17 namespace scudo { 18 19 enum class FlagType : u8 { 20 FT_bool, 21 FT_int, 22 }; 23 24 class FlagParser { 25 public: 26 void registerFlag(const char *Name, const char *Desc, FlagType Type, 27 void *Var); 28 void parseString(const char *S); 29 void printFlagDescriptions(); 30 void parseStringPair(const char *Name, const char *Value); 31 32 private: 33 static const u32 MaxFlags = 20; 34 struct Flag { 35 const char *Name; 36 const char *Desc; 37 FlagType Type; 38 void *Var; 39 } Flags[MaxFlags]; 40 41 u32 NumberOfFlags = 0; 42 const char *Buffer = nullptr; 43 uptr Pos = 0; 44 45 void reportFatalError(const char *Error); 46 void skipWhitespace(); 47 void parseFlags(); 48 void parseFlag(); 49 bool runHandler(const char *Name, const char *Value, char Sep); 50 }; 51 52 void reportUnrecognizedFlags(); 53 54 } // namespace scudo 55 56 #endif // SCUDO_FLAGS_PARSER_H_ 57