xref: /aosp_15_r20/external/minijail/config_parser.h (revision 4b9c6d91573e8b3a96609339b46361b5476dd0f9)
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