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