summaryrefslogtreecommitdiff
path: root/giscanner/scannerparser.y
diff options
context:
space:
mode:
authorChristoph Reiter <reiter.christoph@gmail.com>2018-12-06 09:01:02 +0100
committerChristoph Reiter <reiter.christoph@gmail.com>2018-12-06 09:57:58 +0000
commit953b45b14e2749be239ff3fdb0040998106d6758 (patch)
treee9a988226cbe56f8bee67734327c18e3fb3e7bda /giscanner/scannerparser.y
parentaaa7af50f98771efc8172c5dff7a898feda8c423 (diff)
downloadgobject-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.y31
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)
;