diff options
author | Tobias Brunner <tobias@strongswan.org> | 2014-05-14 17:21:04 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2014-05-15 11:28:10 +0200 |
commit | 66248396c69d16988f45ef6879389f3e0914ec10 (patch) | |
tree | 9310885e438157a4c744b0a410b863384866bdaa /src/libstrongswan/utils | |
parent | c976cc7d33d6c3aeeb6e2a8a82c10401f629f93c (diff) | |
download | strongswan-66248396c69d16988f45ef6879389f3e0914ec10.tar.bz2 strongswan-66248396c69d16988f45ef6879389f3e0914ec10.tar.xz |
parser-helper: Make parser_helper_file_t private
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r-- | src/libstrongswan/utils/parser_helper.c | 65 | ||||
-rw-r--r-- | src/libstrongswan/utils/parser_helper.h | 27 |
2 files changed, 37 insertions, 55 deletions
diff --git a/src/libstrongswan/utils/parser_helper.c b/src/libstrongswan/utils/parser_helper.c index 403cca92b..40c6cfedd 100644 --- a/src/libstrongswan/utils/parser_helper.c +++ b/src/libstrongswan/utils/parser_helper.c @@ -22,7 +22,7 @@ #include <collections/array.h> typedef struct private_parser_helper_t private_parser_helper_t; -typedef struct private_parser_helper_file_t private_parser_helper_file_t; +typedef struct parser_helper_file_t parser_helper_file_t; struct private_parser_helper_t { @@ -32,7 +32,7 @@ struct private_parser_helper_t { parser_helper_t public; /** - * Stack of included files, as private_parser_helper_file_t. + * Stack of included files, as parser_helper_file_t. */ array_t *files; @@ -42,12 +42,17 @@ struct private_parser_helper_t { bio_writer_t *writer; }; -struct private_parser_helper_file_t { +struct parser_helper_file_t { /** - * File data. + * File name */ - parser_helper_file_t public; + char *name; + + /** + * File stream + */ + FILE *file; /** * Enumerator of paths matching the most recent inclusion pattern. @@ -58,34 +63,36 @@ struct private_parser_helper_file_t { /** * Destroy the given file data. */ -static void parser_helper_file_destroy(private_parser_helper_file_t *this) +static void parser_helper_file_destroy(parser_helper_file_t *this) { - if (this->public.file) + if (this->file) { - fclose(this->public.file); + fclose(this->file); } - free(this->public.name); + free(this->name); DESTROY_IF(this->matches); free(this); } -METHOD(parser_helper_t, file_current, parser_helper_file_t*, - private_parser_helper_t *this) +/** + * Returns the current file, if any. + */ +static parser_helper_file_t *current_file(private_parser_helper_t *this) { - private_parser_helper_file_t *file; + parser_helper_file_t *file; array_get(this->files, ARRAY_TAIL, &file); - if (file->public.name) + if (file->name) { - return &file->public; + return file; } return NULL; } -METHOD(parser_helper_t, file_next, parser_helper_file_t*, +METHOD(parser_helper_t, file_next, FILE*, private_parser_helper_t *this) { - private_parser_helper_file_t *file, *next; + parser_helper_file_t *file, *next; char *name; array_get(this->files, ARRAY_TAIL, &file); @@ -101,16 +108,14 @@ METHOD(parser_helper_t, file_next, parser_helper_file_t*, while (file->matches->enumerate(file->matches, &name, NULL)) { INIT(next, - .public = { - .name = strdup(name), - .file = fopen(name, "r"), - }, + .name = strdup(name), + .file = fopen(name, "r"), ); - if (next->public.file) + if (next->file) { array_insert(this->files, ARRAY_TAIL, next); - return &next->public; + return next->file; } PARSER_DBG2(&this->public, "unable to open '%s'", name); parser_helper_file_destroy(next); @@ -124,7 +129,7 @@ METHOD(parser_helper_t, file_next, parser_helper_file_t*, METHOD(parser_helper_t, file_include, void, private_parser_helper_t *this, char *pattern) { - private_parser_helper_file_t *file; + parser_helper_file_t *file; char pat[PATH_MAX]; array_get(this->files, ARRAY_TAIL, &file); @@ -135,7 +140,7 @@ METHOD(parser_helper_t, file_include, void, return; } - if (!file->public.name || pattern[0] == '/') + if (!file->name || pattern[0] == '/') { /* absolute path */ if (snprintf(pat, sizeof(pat), "%s", pattern) >= sizeof(pat)) { @@ -146,7 +151,7 @@ METHOD(parser_helper_t, file_include, void, } else { /* base relative paths to the directory of the current file */ - char *dir = path_dirname(file->public.name); + char *dir = path_dirname(file->name); if (snprintf(pat, sizeof(pat), "%s/%s", dir, pattern) >= sizeof(pat)) { PARSER_DBG1(&this->public, "include pattern too long, ignored"); @@ -202,6 +207,7 @@ METHOD(parser_helper_t, destroy, void, */ void parser_helper_log(int level, parser_helper_t *ctx, char *fmt, ...) { + private_parser_helper_t *this = (private_parser_helper_t*)ctx; parser_helper_file_t *file; char msg[8192]; va_list args; @@ -211,7 +217,7 @@ void parser_helper_log(int level, parser_helper_t *ctx, char *fmt, ...) vsnprintf(msg, sizeof(msg), fmt, args); va_end(args); - file = ctx->file_current(ctx); + file = current_file(this); line = ctx->get_lineno ? ctx->get_lineno(ctx->scanner) : 0; if (file) { @@ -229,12 +235,11 @@ void parser_helper_log(int level, parser_helper_t *ctx, char *fmt, ...) parser_helper_t *parser_helper_create(void *context) { private_parser_helper_t *this; - private_parser_helper_file_t *sentinel; + parser_helper_file_t *sentinel; INIT(this, .public = { .context = context, - .file_current = _file_current, .file_include = _file_include, .file_next = _file_next, .string_init = _string_init, @@ -247,9 +252,7 @@ parser_helper_t *parser_helper_create(void *context) ); INIT(sentinel, - .public = { - .name = NULL, - }, + .name = NULL, ); array_insert(this->files, ARRAY_TAIL, sentinel); diff --git a/src/libstrongswan/utils/parser_helper.h b/src/libstrongswan/utils/parser_helper.h index 6a2c26c8e..d8602522b 100644 --- a/src/libstrongswan/utils/parser_helper.h +++ b/src/libstrongswan/utils/parser_helper.h @@ -25,7 +25,6 @@ #include <bio/bio_writer.h> typedef struct parser_helper_t parser_helper_t; -typedef struct parser_helper_file_t parser_helper_file_t; /** * Helper class for flex/bison based parsers. @@ -59,13 +58,6 @@ struct parser_helper_t { int (*get_lineno)(void *scanner); /** - * Get the current file. - * - * @return current file, or NULL - */ - parser_helper_file_t *(*file_current)(parser_helper_t *this); - - /** * Resolves the given include pattern, relative to the location of the * current file. * @@ -89,8 +81,8 @@ struct parser_helper_t { * then call this method to check if there are more files to include for * the most recent call to file_include(), if so, call * @code - * PREFIXset_in(file->file, helper->scanner); - * PREFIXpush_buffer_state(PREFIX_create_buffer(file->file, YY_BUF_SIZE, + * PREFIXset_in(file, helper->scanner); + * PREFIXpush_buffer_state(PREFIX_create_buffer(file, YY_BUF_SIZE, * helper->scanner), helper->scanner); * @endcode * @@ -99,7 +91,7 @@ struct parser_helper_t { * * @return next file to process, or NULL (see comment) */ - parser_helper_file_t *(*file_next)(parser_helper_t *this); + FILE *(*file_next)(parser_helper_t *this); /** * Start parsing a string, discards any currently stored data. @@ -127,19 +119,6 @@ struct parser_helper_t { void (*destroy)(parser_helper_t *this); }; -struct parser_helper_file_t { - - /** - * File name - */ - char *name; - - /** - * File stream - */ - FILE *file; -}; - /** * Log the given message either as error or warning * |