/* Copyright (C) 2005 Red Hat, Inc. */ #ifndef _SEMANAGE_PARSE_UTILS_INTERNAL_H_ #define _SEMANAGE_PARSE_UTILS_INTERNAL_H_ #include #include typedef struct parse_info { unsigned int lineno; /* Current line number */ char *orig_line; /* Original copy of the line being parsed */ char *working_copy; /* Working copy of the line being parsed */ char *ptr; /* Current parsing location */ const char *filename; /* Input stream file name */ FILE *file_stream; /* Input stream handle */ void *parse_arg; /* Caller supplied argument */ } parse_info_t; /* Initialize structure */ extern int parse_init(semanage_handle_t * handle, const char *filename, void *parse_arg, parse_info_t ** info); /* Release structure */ extern void parse_release(parse_info_t * info); /* Open file */ extern int parse_open(semanage_handle_t * handle, parse_info_t * info); /* Close file */ extern void parse_close(parse_info_t * info); /* Release resources for current line */ extern void parse_dispose_line(parse_info_t * info); /* Skip all whitespace and comments */ extern int parse_skip_space(semanage_handle_t * handle, parse_info_t * info); /* Throw an error if we're at the EOF */ extern int parse_assert_noeof(semanage_handle_t * handle, parse_info_t * info); /* Throw an error if no whitespace follows, * otherwise eat the whitespace */ extern int parse_assert_space(semanage_handle_t * handle, parse_info_t * info); /* Throw an error if the specified character * does not follow, otherwise eat that character */ extern int parse_assert_ch(semanage_handle_t * handle, parse_info_t * info, const char ch); /* Throw an error if the specified string * does not follow is not found, otherwise * eat the string */ extern int parse_assert_str(semanage_handle_t * handle, parse_info_t * info, const char *assert_str); /* Eat the optional character, if found, * or return STATUS_NODATA */ extern int parse_optional_ch(parse_info_t * info, const char ch); /* Eat the optional string, if found, * or return STATUS_NODATA */ extern int parse_optional_str(parse_info_t * info, const char *str); /* Extract the next integer, and move * the read pointer past it. Stop if * the optional character delim is encountered, * or if whitespace/eof is encountered */ int parse_fetch_int(semanage_handle_t * hgandle, parse_info_t * info, int *num, char delim); /* Extract the next string (delimited by * whitespace), and move the read pointer past it. * Stop of the optional character delim is encountered, * or if whitespace/eof is encountered. Fail if the * string is of length 0. */ extern int parse_fetch_string(semanage_handle_t * handle, parse_info_t * info, char **str_ptr, char delim); #endif