tccpp.c: Guard against ppfp being NULL

Missed these in e946eb2a41
This commit is contained in:
Vlad Vissoultchev
2016-04-13 10:48:15 +03:00
parent 6a49afb3ed
commit 810a677d32
2 changed files with 18 additions and 24 deletions

9
tcc.c
View File

@ -303,13 +303,8 @@ int main(int argc, char **argv)
tcc_error("could not write '%s'", s->outfile); tcc_error("could not write '%s'", s->outfile);
} }
s->dffp = s->ppfp; s->dffp = s->ppfp;
if (s->dflag == 'M') { if (s->dflag == 'M')
#ifndef TCC_TARGET_PE s->ppfp = NULL;
s->ppfp = fopen("/dev/null", "w");
#else
s->ppfp = fopen("nul", "w");
#endif
}
} }
tcc_set_output_type(s, s->output_type); tcc_set_output_type(s, s->output_type);

17
tccpp.c
View File

@ -1072,21 +1072,19 @@ static int macro_is_equal(const int *a, const int *b)
static void pp_line(TCCState *s1, BufferedFile *f, int level) static void pp_line(TCCState *s1, BufferedFile *f, int level)
{ {
if (s1->ppfp) {
int d = f->line_num - f->line_ref; int d = f->line_num - f->line_ref;
if (s1->Pflag == LINE_MACRO_OUTPUT_FORMAT_NONE if (s1->Pflag == LINE_MACRO_OUTPUT_FORMAT_NONE
|| (level == 0 && f->line_ref && d < 8)) || (level == 0 && f->line_ref && d < 8)) {
{
while (d > 0) while (d > 0)
fputs("\n", s1->ppfp), --d; fputs("\n", s1->ppfp), --d;
} } else if (s1->Pflag == LINE_MACRO_OUTPUT_FORMAT_STD) {
else
if (s1->Pflag == LINE_MACRO_OUTPUT_FORMAT_STD) {
fprintf(s1->ppfp, "#line %d \"%s\"\n", f->line_num, f->filename); fprintf(s1->ppfp, "#line %d \"%s\"\n", f->line_num, f->filename);
} } else {
else {
fprintf(s1->ppfp, "# %d \"%s\"%s\n", f->line_num, f->filename, fprintf(s1->ppfp, "# %d \"%s\"%s\n", f->line_num, f->filename,
level > 0 ? " 1" : level < 0 ? " 2" : ""); level > 0 ? " 1" : level < 0 ? " 2" : "");
} }
}
f->line_ref = f->line_num; f->line_ref = f->line_num;
} }
@ -3473,15 +3471,16 @@ ST_FUNC int tcc_preprocess(TCCState *s1)
continue; continue;
} }
pp_line(s1, file, 0); pp_line(s1, file, 0);
while (spcs) while (s1->ppfp && spcs > 0)
fputs(" ", s1->ppfp), --spcs; fputs(" ", s1->ppfp), --spcs;
spcs = 0;
token_seen = 1; token_seen = 1;
} else if (tok == TOK_LINEFEED) { } else if (tok == TOK_LINEFEED) {
++file->line_ref; ++file->line_ref;
token_seen = 0; token_seen = 0;
} }
if (s1->ppfp)
fputs(get_tok_str(tok, &tokc), s1->ppfp); fputs(get_tok_str(tok, &tokc), s1->ppfp);
} }