xref: /aosp_15_r20/external/selinux/libsemanage/src/parse_utils.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker /* Copyright (C) 2005 Red Hat, Inc. */
2*2d543d20SAndroid Build Coastguard Worker 
3*2d543d20SAndroid Build Coastguard Worker #ifndef _SEMANAGE_PARSE_UTILS_INTERNAL_H_
4*2d543d20SAndroid Build Coastguard Worker #define _SEMANAGE_PARSE_UTILS_INTERNAL_H_
5*2d543d20SAndroid Build Coastguard Worker 
6*2d543d20SAndroid Build Coastguard Worker #include <stdio.h>
7*2d543d20SAndroid Build Coastguard Worker #include <semanage/handle.h>
8*2d543d20SAndroid Build Coastguard Worker 
9*2d543d20SAndroid Build Coastguard Worker typedef struct parse_info {
10*2d543d20SAndroid Build Coastguard Worker 	unsigned int lineno;	/* Current line number */
11*2d543d20SAndroid Build Coastguard Worker 	char *orig_line;	/* Original copy of the line being parsed */
12*2d543d20SAndroid Build Coastguard Worker 	char *working_copy;	/* Working copy of the line being parsed */
13*2d543d20SAndroid Build Coastguard Worker 	char *ptr;		/* Current parsing location */
14*2d543d20SAndroid Build Coastguard Worker 
15*2d543d20SAndroid Build Coastguard Worker 	const char *filename;	/* Input stream file name */
16*2d543d20SAndroid Build Coastguard Worker 	FILE *file_stream;	/* Input stream handle */
17*2d543d20SAndroid Build Coastguard Worker 
18*2d543d20SAndroid Build Coastguard Worker 	void *parse_arg;	/* Caller supplied argument */
19*2d543d20SAndroid Build Coastguard Worker } parse_info_t;
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker /* Initialize structure */
22*2d543d20SAndroid Build Coastguard Worker extern int parse_init(semanage_handle_t * handle,
23*2d543d20SAndroid Build Coastguard Worker 		      const char *filename,
24*2d543d20SAndroid Build Coastguard Worker 		      void *parse_arg, parse_info_t ** info);
25*2d543d20SAndroid Build Coastguard Worker 
26*2d543d20SAndroid Build Coastguard Worker /* Release structure */
27*2d543d20SAndroid Build Coastguard Worker extern void parse_release(parse_info_t * info);
28*2d543d20SAndroid Build Coastguard Worker 
29*2d543d20SAndroid Build Coastguard Worker /* Open file */
30*2d543d20SAndroid Build Coastguard Worker extern int parse_open(semanage_handle_t * handle, parse_info_t * info);
31*2d543d20SAndroid Build Coastguard Worker 
32*2d543d20SAndroid Build Coastguard Worker /* Close file */
33*2d543d20SAndroid Build Coastguard Worker extern void parse_close(parse_info_t * info);
34*2d543d20SAndroid Build Coastguard Worker 
35*2d543d20SAndroid Build Coastguard Worker /* Release resources for current line */
36*2d543d20SAndroid Build Coastguard Worker extern void parse_dispose_line(parse_info_t * info);
37*2d543d20SAndroid Build Coastguard Worker 
38*2d543d20SAndroid Build Coastguard Worker /* Skip all whitespace and comments */
39*2d543d20SAndroid Build Coastguard Worker extern int parse_skip_space(semanage_handle_t * handle, parse_info_t * info);
40*2d543d20SAndroid Build Coastguard Worker 
41*2d543d20SAndroid Build Coastguard Worker /* Throw an error if we're at the EOF */
42*2d543d20SAndroid Build Coastguard Worker extern int parse_assert_noeof(semanage_handle_t * handle, parse_info_t * info);
43*2d543d20SAndroid Build Coastguard Worker 
44*2d543d20SAndroid Build Coastguard Worker /* Throw an error if no whitespace follows,
45*2d543d20SAndroid Build Coastguard Worker  * otherwise eat the whitespace */
46*2d543d20SAndroid Build Coastguard Worker extern int parse_assert_space(semanage_handle_t * handle, parse_info_t * info);
47*2d543d20SAndroid Build Coastguard Worker 
48*2d543d20SAndroid Build Coastguard Worker /* Throw an error if the specified character
49*2d543d20SAndroid Build Coastguard Worker  * does not follow, otherwise eat that character */
50*2d543d20SAndroid Build Coastguard Worker extern int parse_assert_ch(semanage_handle_t * handle,
51*2d543d20SAndroid Build Coastguard Worker 			   parse_info_t * info, const char ch);
52*2d543d20SAndroid Build Coastguard Worker 
53*2d543d20SAndroid Build Coastguard Worker /* Throw an error if the specified string
54*2d543d20SAndroid Build Coastguard Worker  * does not follow is not found, otherwise
55*2d543d20SAndroid Build Coastguard Worker  * eat the string */
56*2d543d20SAndroid Build Coastguard Worker extern int parse_assert_str(semanage_handle_t * handle,
57*2d543d20SAndroid Build Coastguard Worker 			    parse_info_t * info, const char *assert_str);
58*2d543d20SAndroid Build Coastguard Worker 
59*2d543d20SAndroid Build Coastguard Worker /* Eat the optional character, if found,
60*2d543d20SAndroid Build Coastguard Worker  * or return STATUS_NODATA */
61*2d543d20SAndroid Build Coastguard Worker extern int parse_optional_ch(parse_info_t * info, const char ch);
62*2d543d20SAndroid Build Coastguard Worker 
63*2d543d20SAndroid Build Coastguard Worker /* Eat the optional string, if found,
64*2d543d20SAndroid Build Coastguard Worker  * or return STATUS_NODATA */
65*2d543d20SAndroid Build Coastguard Worker extern int parse_optional_str(parse_info_t * info, const char *str);
66*2d543d20SAndroid Build Coastguard Worker 
67*2d543d20SAndroid Build Coastguard Worker /* Extract the next integer, and move
68*2d543d20SAndroid Build Coastguard Worker  * the read pointer past it. Stop if
69*2d543d20SAndroid Build Coastguard Worker  * the optional character delim is encountered,
70*2d543d20SAndroid Build Coastguard Worker  * or if whitespace/eof is encountered */
71*2d543d20SAndroid Build Coastguard Worker int parse_fetch_int(semanage_handle_t * hgandle,
72*2d543d20SAndroid Build Coastguard Worker 		    parse_info_t * info, int *num, char delim);
73*2d543d20SAndroid Build Coastguard Worker 
74*2d543d20SAndroid Build Coastguard Worker /* Extract the next string and move the read pointer past it.
75*2d543d20SAndroid Build Coastguard Worker  * Stop if the optional character delim (or eof) is encountered,
76*2d543d20SAndroid Build Coastguard Worker  * or if whitespace is encountered and allow_spaces is 0.
77*2d543d20SAndroid Build Coastguard Worker  * Fail if the string is of length 0. */
78*2d543d20SAndroid Build Coastguard Worker extern int parse_fetch_string(semanage_handle_t * handle,
79*2d543d20SAndroid Build Coastguard Worker 			      parse_info_t * info, char **str_ptr, char delim, int allow_spaces);
80*2d543d20SAndroid Build Coastguard Worker 
81*2d543d20SAndroid Build Coastguard Worker #endif
82