ref: 2d6aaa2a9cb928a69bdef0ed307fe8ea85389b72
parent: 5398bfe4e68b7926f301beb47299a92ff0540c10
author: Quentin Rameau <quinq@fifth.space>
date: Mon Jun 27 11:22:30 EDT 2016
[cc1] move file open handling from ilex to addinput
--- a/cc1/cc1.h
+++ b/cc1/cc1.h
@@ -383,7 +383,7 @@
extern void discard(void);
extern int addinput(char *fname);
extern void setsafe(int type);
-extern void ilex(char *fname);
+extern void ilex(void);
#define accept(t) ((yytoken == (t)) ? next() : 0)
/* code.c */
--- a/cc1/lex.c
+++ b/cc1/lex.c
@@ -38,7 +38,7 @@
}
void
-ilex(char *fname)
+ilex(void)
{
static struct keyword keys[] = {
{"auto", SCLASS, AUTO},
@@ -78,18 +78,6 @@
{"while", WHILE, WHILE},
{NULL, 0, 0},
};
- FILE *fp;
-
- if (!fname) {
- fp = stdin;
- fname = "<stdin>";
- } else {
- if ((fp = fopen(fname, "r")) == NULL) {
- die("error: failed to open input file '%s': %s",
- fname, strerror(errno));
- }
- }
- allocinput(fname, fp);
keywords(keys, NS_KEYWORD);
}
@@ -98,8 +86,13 @@
{
FILE *fp;
- if ((fp = fopen(fname, "r")) == NULL)
- return 0;
+ if (fname) {
+ if ((fp = fopen(fname, "r")) == NULL)
+ return 0;
+ } else {
+ fp = stdin;
+ fname = "<stdin>";
+ }
allocinput(fname, fp);
return 1;
}
--- a/cc1/main.c
+++ b/cc1/main.c
@@ -46,6 +46,7 @@
atexit(clean);
icpp();
+ ilex();
/* if run as cpp, only run the preprocessor */
name = (cp = strrchr(*argv, '/')) ? cp + 1 : *argv;
@@ -88,7 +89,10 @@
for (i = 0; i < uflags.n; ++i)
undefmacro(uflags.s[i]);
- ilex(*argv);
+ if (!addinput(*argv)) {
+ die("error: failed to open input file '%s': %s",
+ *argv, strerror(errno));
+ }
if (onlycpp) {
outcpp();
} else {