diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2018-12-06 09:01:02 +0100 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2018-12-06 09:57:58 +0000 |
commit | 953b45b14e2749be239ff3fdb0040998106d6758 (patch) | |
tree | e9a988226cbe56f8bee67734327c18e3fb3e7bda /giscanner/scannerparser.y | |
parent | aaa7af50f98771efc8172c5dff7a898feda8c423 (diff) | |
download | gobject-introspection-953b45b14e2749be239ff3fdb0040998106d6758.tar.gz |
gi_source_scanner_parse_file: use a filename instead of a FILE struct
This allows us to get rid of the msvc hacks which are needed in case Python
is built with a different msvc than g-i. By passing a filename the FILE struct never
passes over library boundaries.
Diffstat (limited to 'giscanner/scannerparser.y')
-rw-r--r-- | giscanner/scannerparser.y | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/giscanner/scannerparser.y b/giscanner/scannerparser.y index 9b4e1368..bf7bb37f 100644 --- a/giscanner/scannerparser.y +++ b/giscanner/scannerparser.y @@ -1626,6 +1626,19 @@ read_identifier (FILE * f, int c, char **identifier) return c; } +static gboolean +parse_file (GISourceScanner *scanner, FILE *file) +{ + g_return_val_if_fail (file != NULL, FALSE); + + lineno = 1; + yyin = file; + yyparse (scanner); + yyin = NULL; + + return TRUE; +} + void gi_source_scanner_parse_macros (GISourceScanner *scanner, GList *filenames) { @@ -1772,29 +1785,29 @@ gi_source_scanner_parse_macros (GISourceScanner *scanner, GList *filenames) } rewind (fmacros); - gi_source_scanner_parse_file (scanner, fmacros); + parse_file (scanner, fmacros); fclose (fmacros); g_unlink (tmp_name); } gboolean -gi_source_scanner_parse_file (GISourceScanner *scanner, FILE *file) +gi_source_scanner_parse_file (GISourceScanner *scanner, const gchar *filename) { - g_return_val_if_fail (file != NULL, FALSE); + FILE *file; + gboolean result; - lineno = 1; - yyin = file; - yyparse (scanner); - yyin = NULL; + file = g_fopen (filename, "r"); + result = parse_file (scanner, file); + fclose (file); - return TRUE; + return result; } gboolean gi_source_scanner_lex_filename (GISourceScanner *scanner, const gchar *filename) { lineno = 1; - yyin = fopen (filename, "r"); + yyin = g_fopen (filename, "r"); while (yylex (scanner) != YYEOF) ; |