From: Richard Stallman Date: Mon, 23 Mar 1992 03:45:33 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: misc/cutover-egcs-0~13357 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3ed8294e3200bbc003211f9b7eeb64a9c407a626;p=thirdparty%2Fgcc.git *** empty log message *** From-SVN: r574 --- diff --git a/gcc/cccp.c b/gcc/cccp.c index 9147e477bdb7..54a95d27c29b 100644 --- a/gcc/cccp.c +++ b/gcc/cccp.c @@ -201,6 +201,7 @@ static void pfatal_with_name (); static void perror_with_name (); static void print_containing_files (); static int lookup_import (); +static int lookup_include (); static int check_preconditions (); static void pcfinclude (); static void pcstring_used (); @@ -3730,25 +3731,13 @@ get_filename: fname = (char *) xmalloc (max_include_len + flen + 2); /* + 2 above for slash and terminating null. */ - /* See if we already included this file and we can tell in advance - (from a #ifndef around its contents last time) - that there is no need to include it again. */ - { - struct file_name_list *l = all_include_files; - strncpy (fname, fbeg, flen); - fname[flen] = 0; - for (; l; l = l->next) - if (! strcmp (fname, l->fname) - && l->control_macro - && lookup (l->control_macro, -1, -1)) - return 0; - } - /* If specified file name is absolute, just open it. */ if (*fbeg == '/') { strncpy (fname, fbeg, flen); fname[flen] = 0; + if (lookup_include (fname)) + return 0; if (importing) f = lookup_import (fname); else @@ -3791,6 +3780,10 @@ get_filename: f = open (fname, O_RDONLY, 0666); if (f == -2) return 0; /* Already included this file */ + if (lookup_include (fname)) { + close (f); + return 0; + } if (f >= 0) break; } @@ -3921,6 +3914,23 @@ get_filename: return 0; } +/* Return nonzero if there is no need to include file NAME + because it has already been included and it contains a conditional + to make a repeated include do nothing. */ + +static int +lookup_include (name) + char *name; +{ + struct file_name_list *l = all_include_files; + for (; l; l = l->next) + if (! strcmp (name, l->fname) + && l->control_macro + && lookup (l->control_macro, -1, -1)) + return 1; + return 0; +} + /* Process the contents of include file FNAME, already open on descriptor F, with output to OP. SYSTEM_HEADER_P is 1 if this file was specified using <...>.