1*4b9c6d91SCole Faust /* Copyright 2021 The ChromiumOS Authors 2*4b9c6d91SCole Faust * Use of this source code is governed by a BSD-style license that can be 3*4b9c6d91SCole Faust * found in the LICENSE file. 4*4b9c6d91SCole Faust */ 5*4b9c6d91SCole Faust 6*4b9c6d91SCole Faust #ifndef CONFIG_PARSER_H 7*4b9c6d91SCole Faust #define CONFIG_PARSER_H 8*4b9c6d91SCole Faust 9*4b9c6d91SCole Faust #include <stdbool.h> 10*4b9c6d91SCole Faust #include <stddef.h> 11*4b9c6d91SCole Faust #include <stdio.h> 12*4b9c6d91SCole Faust 13*4b9c6d91SCole Faust #ifdef __cplusplus 14*4b9c6d91SCole Faust extern "C" { 15*4b9c6d91SCole Faust #endif 16*4b9c6d91SCole Faust 17*4b9c6d91SCole Faust struct config_entry { 18*4b9c6d91SCole Faust const char *key; 19*4b9c6d91SCole Faust const char *value; 20*4b9c6d91SCole Faust }; 21*4b9c6d91SCole Faust 22*4b9c6d91SCole Faust struct config_entry_list { 23*4b9c6d91SCole Faust struct config_entry *entries; 24*4b9c6d91SCole Faust size_t num_entries; 25*4b9c6d91SCole Faust size_t num_allocated_; 26*4b9c6d91SCole Faust }; 27*4b9c6d91SCole Faust 28*4b9c6d91SCole Faust /* Allocate a new |config_entry_list| struct. */ 29*4b9c6d91SCole Faust struct config_entry_list *new_config_entry_list(void); 30*4b9c6d91SCole Faust 31*4b9c6d91SCole Faust /* Free allocated pointers in |config_entry|. */ 32*4b9c6d91SCole Faust void clear_config_entry(struct config_entry *entry); 33*4b9c6d91SCole Faust 34*4b9c6d91SCole Faust /* Free a |config_entry_list| struct. */ 35*4b9c6d91SCole Faust void free_config_entry_list(struct config_entry_list *list); 36*4b9c6d91SCole Faust 37*4b9c6d91SCole Faust /* 38*4b9c6d91SCole Faust * Parse one config line into a entry. 39*4b9c6d91SCole Faust * 40*4b9c6d91SCole Faust * Returns true for success, otherwise false for parsing failures. 41*4b9c6d91SCole Faust */ 42*4b9c6d91SCole Faust bool parse_config_line(const char *config_line, struct config_entry *entry); 43*4b9c6d91SCole Faust 44*4b9c6d91SCole Faust /* 45*4b9c6d91SCole Faust * Parse a minijail config file into a |config_entry_list|. 46*4b9c6d91SCole Faust * 47*4b9c6d91SCole Faust * Returns true for success, otherwise false for parsing failures. 48*4b9c6d91SCole Faust */ 49*4b9c6d91SCole Faust bool parse_config_file(FILE *config_file, struct config_entry_list *list); 50*4b9c6d91SCole Faust 51*4b9c6d91SCole Faust #ifdef __cplusplus 52*4b9c6d91SCole Faust }; /* extern "C" */ 53*4b9c6d91SCole Faust #endif 54*4b9c6d91SCole Faust 55*4b9c6d91SCole Faust #endif /* CONFIG_PARSER_H */ 56