]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppfiles.c
alias.c: Fix comment formatting.
[thirdparty/gcc.git] / gcc / cppfiles.c
CommitLineData
8f9b4009 1/* Part of CPP library. File handling.
5793b276
NB
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
add7091b
ZW
4 Written by Per Bothner, 1994.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7 Split out of cpplib.c, Zack Weinberg, Oct 1998
8f9b4009 8 Reimplemented, Neil Booth, Jul 2003
add7091b
ZW
9
10This program is free software; you can redistribute it and/or modify it
11under the terms of the GNU General Public License as published by the
12Free Software Foundation; either version 2, or (at your option) any
13later version.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program; if not, write to the Free Software
e38992e8 22Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
add7091b
ZW
23
24#include "config.h"
25#include "system.h"
add7091b 26#include "cpplib.h"
88ae23e7 27#include "cpphash.h"
c1212d2f 28#include "intl.h"
168d3732 29#include "mkdeps.h"
bf42e45b 30#include "hashtab.h"
8f9b4009 31#include <dirent.h>
f8f769ea 32
8f9b4009
NB
33/* Variable length record files on VMS will have a stat size that includes
34 record control characters that won't be included in the read size. */
35#ifdef VMS
36# define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
37# define STAT_SIZE_RELIABLE(ST) ((ST).st_fab_rfm != FAB_C_VAR)
38#else
39# define STAT_SIZE_RELIABLE(ST) true
d7a2e0f7
ZW
40#endif
41
8f9b4009
NB
42#ifdef __DJGPP__
43 /* For DJGPP redirected input is opened in text mode. */
44# define set_stdin_to_binary_mode() \
45 if (! isatty (0)) setmode (0, O_BINARY)
46#else
47# define set_stdin_to_binary_mode() /* Nothing */
48#endif
49
50#ifndef O_BINARY
51# define O_BINARY 0
a58d32c2 52#endif
a58d32c2 53
8f9b4009
NB
54/* This structure represents a file searched for by CPP, whether it
55 exists or not. An instance may be pointed to by more than one
56 file_hash_entry; at present no reference count is kept. */
8f9b4009
NB
57struct _cpp_file
58{
59 /* Filename as given to #include or command line switch. */
60 const char *name;
642ce434 61
8f9b4009
NB
62 /* The full path used to find the file. */
63 const char *path;
ae1139f9 64
8f9b4009
NB
65 /* The full path of the pch file. */
66 const char *pchname;
add7091b 67
bf42e45b
NB
68 /* The file's path with the basename stripped. NULL if it hasn't
69 been calculated yet. */
8f9b4009 70 const char *dir_name;
c71f835b 71
49634b3a
NB
72 /* Chain through all files. */
73 struct _cpp_file *next_file;
a36c54fa 74
8f9b4009
NB
75 /* The contents of NAME after calling read_file(). */
76 const uchar *buffer;
a36c54fa 77
8f9b4009
NB
78 /* The macro, if any, preventing re-inclusion. */
79 const cpp_hashnode *cmacro;
642ce434 80
8f9b4009
NB
81 /* The directory in the search path where FILE was found. Used for
82 #include_next and determining whether a header is a system
bf42e45b 83 header. */
8f9b4009 84 cpp_dir *dir;
a36c54fa 85
8f9b4009
NB
86 /* As filled in by stat(2) for the file. */
87 struct stat st;
a36c54fa 88
8f9b4009
NB
89 /* File descriptor. Invalid if -1, otherwise open. */
90 int fd;
d6d52dd6 91
8f9b4009
NB
92 /* Zero if this file was successfully opened and stat()-ed,
93 otherwise errno obtained from failure. */
94 int err_no;
add7091b 95
8f9b4009
NB
96 /* Number of times the file has been stacked for preprocessing. */
97 unsigned short stack_count;
2047e26f 98
49634b3a
NB
99 /* If opened with #import or contains #pragma once. */
100 bool once_only;
add7091b 101
8f9b4009
NB
102 /* If read() failed before. */
103 bool dont_read;
add7091b 104
8f9b4009
NB
105 /* If this file is the main file. */
106 bool main_file;
add7091b 107
8f9b4009
NB
108 /* If BUFFER above contains the true contents of the file. */
109 bool buffer_valid;
b0699dad 110
8f9b4009
NB
111 /* 0: file not known to be a PCH.
112 1: file is a PCH (on return from find_include_file).
113 2: file is not and never will be a valid precompiled header.
114 3: file is always a valid precompiled header. */
115 uchar pch;
116};
d4506961 117
8f9b4009
NB
118/* A singly-linked list for all searches for a given file name, with
119 its head pointed to by a slot in FILE_HASH. The file name is what
120 appeared between the quotes in a #include directive; it can be
a98ebe2e 121 determined implicitly from the hash table location or explicitly
bf42e45b 122 from FILE->name.
8f9b4009
NB
123
124 FILE is a structure containing details about the file that was
125 found with that search, or details of how the search failed.
126
127 START_DIR is the starting location of the search in the include
128 chain. The current directories for "" includes are also hashed in
bf42e45b
NB
129 the hash table and therefore unique. Files that are looked up
130 without using a search path, such as absolute filenames and file
131 names from the command line share a special starting directory so
132 they don't cause cache hits with normal include-chain lookups.
8f9b4009
NB
133
134 If START_DIR is NULL then the entry is for a directory, not a file,
135 and the directory is in DIR. Since the starting point in a file
136 lookup chain is never NULL, this means that simple pointer
137 comparisons against START_DIR can be made to determine cache hits
138 in file lookups.
bf42e45b
NB
139
140 If a cache lookup fails because of e.g. an extra "./" in the path,
141 then nothing will break. It is just less efficient as CPP will
142 have to do more work re-preprocessing the file, and/or comparing
143 its contents against earlier once-only files.
8f9b4009
NB
144*/
145struct file_hash_entry
146{
147 struct file_hash_entry *next;
148 cpp_dir *start_dir;
149 union
150 {
151 _cpp_file *file;
152 cpp_dir *dir;
153 } u;
154};
155
156static bool open_file (_cpp_file *file);
3d67ba1e
GK
157static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
158 bool *invalid_pch);
159static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
160 bool *invalid_pch);
8f9b4009
NB
161static bool read_file_guts (cpp_reader *pfile, _cpp_file *file);
162static bool read_file (cpp_reader *pfile, _cpp_file *file);
cf1ee30c 163static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import);
8f9b4009
NB
164static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
165 int angle_brackets, enum include_type);
166static const char *dir_name_of_file (_cpp_file *file);
167static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
168static struct file_hash_entry *search_cache (struct file_hash_entry *head,
169 const cpp_dir *start_dir);
170static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
171static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
172static void allocate_file_hash_entries (cpp_reader *pfile);
173static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
174static int report_missing_guard (void **slot, void *b);
b92be669
PB
175static hashval_t file_hash_hash (const void *p);
176static int file_hash_eq (const void *p, const void *q);
8f9b4009
NB
177static char *read_filename_string (int ch, FILE *f);
178static void read_name_map (cpp_dir *dir);
179static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
180static char *append_file_to_dir (const char *fname, cpp_dir *dir);
181static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
182static bool include_pch_p (_cpp_file *file);
183
184/* Given a filename in FILE->PATH, with the empty string interpreted
185 as <stdin>, open it.
186
187 On success FILE contains an open file descriptor and stat
188 information for the file. On failure the file descriptor is -1 and
189 the appropriate errno is also stored in FILE. Returns TRUE iff
190 successful.
191
192 We used to open files in nonblocking mode, but that caused more
193 problems than it solved. Do take care not to acquire a controlling
194 terminal by mistake (this can't happen on sane systems, but
195 paranoia is a virtue).
196
197 Use the three-argument form of open even though we aren't
198 specifying O_CREAT, to defend against broken system headers.
199
200 O_BINARY tells some runtime libraries (notably DJGPP) not to do
201 newline translation; we can handle DOS line breaks just fine
202 ourselves. */
203static bool
204open_file (_cpp_file *file)
205{
206 if (file->path[0] == '\0')
85be8c2d
AP
207 {
208 file->fd = 0;
8f9b4009 209 set_stdin_to_binary_mode ();
85be8c2d 210 }
f2d5f0cc 211 else
8f9b4009 212 file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
a58d32c2 213
8f9b4009 214 if (file->fd != -1)
2047e26f 215 {
8f9b4009
NB
216 if (fstat (file->fd, &file->st) == 0)
217 {
218 if (!S_ISDIR (file->st.st_mode))
219 {
220 file->err_no = 0;
221 return true;
222 }
223
224 /* Ignore a directory and continue the search. The file we're
225 looking for may be elsewhere in the search path. */
226 errno = ENOENT;
227 }
55485cd9 228
55485cd9
ZW
229 close (file->fd);
230 file->fd = -1;
2047e26f 231 }
a54c550f
NB
232 else if (errno == ENOTDIR)
233 errno = ENOENT;
a58d32c2 234
f277b5e0 235 file->err_no = errno;
8f9b4009
NB
236
237 return false;
a58d32c2
ZW
238}
239
3d67ba1e
GK
240/* Temporary PCH intercept of opening a file. Try to find a PCH file
241 based on FILE->name and FILE->dir, and test those found for
242 validity using PFILE->cb.valid_pch. Return true iff a valid file is
243 found. Set *INVALID_PCH if a PCH file is found but wasn't valid. */
244
8f9b4009 245static bool
3d67ba1e 246pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
17211ab5 247{
8f9b4009
NB
248 static const char extension[] = ".gch";
249 const char *path = file->path;
250 size_t len, flen;
251 char *pchname;
252 struct stat st;
253 bool valid = false;
254
255 /* No PCH on <stdin> or if not requested. */
256 if (file->name[0] == '\0' || !pfile->cb.valid_pch)
257 return false;
17211ab5 258
8f9b4009
NB
259 flen = strlen (path);
260 len = flen + sizeof (extension);
261 pchname = xmalloc (len);
262 memcpy (pchname, path, flen);
263 memcpy (pchname + flen, extension, sizeof (extension));
17211ab5 264
8f9b4009 265 if (stat (pchname, &st) == 0)
17211ab5 266 {
8f9b4009
NB
267 DIR *pchdir;
268 struct dirent *d;
269 size_t dlen, plen = len;
270
271 if (!S_ISDIR (st.st_mode))
272 valid = validate_pch (pfile, file, pchname);
273 else if ((pchdir = opendir (pchname)) != NULL)
17211ab5 274 {
8f9b4009
NB
275 pchname[plen - 1] = '/';
276 while ((d = readdir (pchdir)) != NULL)
8d973a83 277 {
8f9b4009 278 dlen = strlen (d->d_name) + 1;
230fcd32
PE
279 if ((strcmp (d->d_name, ".") == 0)
280 || (strcmp (d->d_name, "..") == 0))
281 continue;
8f9b4009 282 if (dlen + plen > len)
17211ab5 283 {
8f9b4009
NB
284 len += dlen + 64;
285 pchname = xrealloc (pchname, len);
17211ab5 286 }
8f9b4009
NB
287 memcpy (pchname + plen, d->d_name, dlen);
288 valid = validate_pch (pfile, file, pchname);
289 if (valid)
8d973a83 290 break;
17211ab5 291 }
8f9b4009 292 closedir (pchdir);
17211ab5 293 }
230fcd32 294 file->pch |= valid;
3d67ba1e 295 *invalid_pch |= ! valid;
17211ab5 296 }
8d973a83 297
8f9b4009
NB
298 if (valid)
299 file->pchname = pchname;
300 else
301 free (pchname);
302
303 return valid;
17211ab5
GK
304}
305
8f9b4009 306/* Try to open the path FILE->name appended to FILE->dir. This is
cf1ee30c 307 where remap and PCH intercept the file lookup process. Return true
3d67ba1e
GK
308 if the file was found, whether or not the open was successful.
309 Set *INVALID_PCH to true if a PCH file is found but wasn't valid. */
310
e5eba70a 311static bool
3d67ba1e 312find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
a58d32c2 313{
8f9b4009 314 char *path;
51d0f328 315
8f9b4009
NB
316 if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
317 ;
318 else
319 path = append_file_to_dir (file->name, file->dir);
e5eba70a 320
8f9b4009 321 file->path = path;
3d67ba1e 322 if (pch_open_file (pfile, file, invalid_pch))
8f9b4009 323 return true;
51d0f328 324
8f9b4009
NB
325 if (open_file (file))
326 return true;
51d0f328 327
cf1ee30c
NB
328 if (file->err_no != ENOENT)
329 {
330 open_file_failed (pfile, file);
331 return true;
332 }
333
8f9b4009 334 free (path);
cf1ee30c 335 file->path = file->name;
8f9b4009
NB
336 return false;
337}
338
4dc299fb
PB
339bool
340_cpp_find_failed (_cpp_file *file)
341{
342 return file->err_no != 0;
343}
344
8f9b4009
NB
345/* Given a filename FNAME search for such a file in the include path
346 starting from START_DIR. If FNAME is the empty string it is
347 interpreted as STDIN if START_DIR is PFILE->no_seach_path.
348
349 If the file is not found in the file cache fall back to the O/S and
350 add the result to our cache.
351
352 If the file was not found in the filesystem, or there was an error
02fa63cd 353 opening it, then ERR_NO is nonzero and FD is -1. If the file was
8f9b4009
NB
354 found, then ERR_NO is zero and FD could be -1 or an open file
355 descriptor. FD can be -1 if the file was found in the cache and
356 had previously been closed. To open it again pass the return value
357 to open_file().
358*/
4dc299fb
PB
359_cpp_file *
360_cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake)
8f9b4009
NB
361{
362 struct file_hash_entry *entry, **hash_slot;
363 _cpp_file *file;
3d67ba1e 364 bool invalid_pch = false;
8f9b4009
NB
365
366 /* Ensure we get no confusion between cached files and directories. */
367 if (start_dir == NULL)
0527bc4e 368 cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
8f9b4009
NB
369
370 hash_slot = (struct file_hash_entry **)
b92be669
PB
371 htab_find_slot_with_hash (pfile->file_hash, fname,
372 htab_hash_string (fname),
373 INSERT);
17211ab5 374
8f9b4009
NB
375 /* First check the cache before we resort to memory allocation. */
376 entry = search_cache (*hash_slot, start_dir);
377 if (entry)
378 return entry->u.file;
379
380 file = make_cpp_file (pfile, start_dir, fname);
381
382 /* Try each path in the include chain. */
383 for (; !fake ;)
7c092714 384 {
3d67ba1e 385 if (find_file_in_dir (pfile, file, &invalid_pch))
8f9b4009
NB
386 break;
387
cf1ee30c
NB
388 file->dir = file->dir->next;
389 if (file->dir == NULL)
e5eba70a 390 {
8f9b4009 391 open_file_failed (pfile, file);
3d67ba1e
GK
392 if (invalid_pch)
393 {
394 cpp_error (pfile, CPP_DL_ERROR,
e235d8bf
GK
395 "one or more PCH files were found, but they were invalid");
396 if (!cpp_get_options (pfile)->warn_invalid_pch)
3d67ba1e 397 cpp_error (pfile, CPP_DL_ERROR,
e235d8bf 398 "use -Winvalid-pch for more information");
3d67ba1e 399 }
8f9b4009 400 break;
e5eba70a 401 }
eb1f4d9d 402
8f9b4009
NB
403 /* Only check the cache for the starting location (done above)
404 and the quote and bracket chain heads because there are no
405 other possible starting points for searches. */
406 if (file->dir != pfile->bracket_include
407 && file->dir != pfile->quote_include)
408 continue;
a58d32c2 409
8f9b4009
NB
410 entry = search_cache (*hash_slot, file->dir);
411 if (entry)
49634b3a
NB
412 break;
413 }
414
415 if (entry)
416 {
417 /* Cache for START_DIR too, sharing the _cpp_file structure. */
418 free ((char *) file->name);
419 free (file);
420 file = entry->u.file;
421 }
422 else
423 {
424 /* This is a new file; put it in the list. */
425 file->next_file = pfile->all_files;
426 pfile->all_files = file;
8f9b4009 427 }
eb1f4d9d 428
8f9b4009
NB
429 /* Store this new result in the hash table. */
430 entry = new_file_hash_entry (pfile);
431 entry->next = *hash_slot;
432 entry->start_dir = start_dir;
433 entry->u.file = file;
434 *hash_slot = entry;
e5eba70a 435
8f9b4009 436 return file;
a58d32c2
ZW
437}
438
8f9b4009 439/* Read a file into FILE->buffer, returning true on success.
a58d32c2 440
8f9b4009
NB
441 If FILE->fd is something weird, like a block device, we don't want
442 to read it at all. Don't even try to figure out what something is,
443 except for plain files and block devices, since there is no
444 reliable portable way of doing this.
a58d32c2
ZW
445
446 FIXME: Flush file cache and try again if we run out of memory. */
8f9b4009
NB
447static bool
448read_file_guts (cpp_reader *pfile, _cpp_file *file)
a58d32c2 449{
8f9b4009 450 ssize_t size, total, count;
562a5c27 451 uchar *buf;
8f9b4009
NB
452 bool regular;
453
454 if (S_ISBLK (file->st.st_mode))
455 {
0527bc4e 456 cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
8f9b4009
NB
457 return false;
458 }
a58d32c2 459
8f9b4009
NB
460 regular = S_ISREG (file->st.st_mode);
461 if (regular)
f2d5f0cc 462 {
a58d32c2
ZW
463 /* off_t might have a wider range than ssize_t - in other words,
464 the max size of a file might be bigger than the address
465 space. We can't handle a file that large. (Anyone with
466 a single source file bigger than 2GB needs to rethink
467 their coding style.) Some systems (e.g. AIX 4.1) define
468 SSIZE_MAX to be much smaller than the actual range of the
469 type. Use INTTYPE_MAXIMUM unconditionally to ensure this
470 does not bite us. */
8f9b4009 471 if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
f2d5f0cc 472 {
0527bc4e 473 cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
8f9b4009 474 return false;
f2d5f0cc 475 }
a58d32c2 476
8f9b4009
NB
477 size = file->st.st_size;
478 }
479 else
480 /* 8 kilobytes is a sensible starting size. It ought to be bigger
481 than the kernel pipe buffer, and it's definitely bigger than
482 the majority of C source files. */
483 size = 8 * 1024;
484
485 buf = xmalloc (size + 1);
486 total = 0;
487 while ((count = read (file->fd, buf + total, size - total)) > 0)
488 {
489 total += count;
490
491 if (total == size)
d4506961 492 {
8f9b4009
NB
493 if (regular)
494 break;
495 size *= 2;
496 buf = xrealloc (buf, size + 1);
d4506961 497 }
a58d32c2 498 }
8f9b4009
NB
499
500 if (count < 0)
a58d32c2 501 {
0527bc4e 502 cpp_errno (pfile, CPP_DL_ERROR, file->path);
8f9b4009 503 return false;
a58d32c2 504 }
8f9b4009
NB
505
506 if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
0527bc4e
JDA
507 cpp_error (pfile, CPP_DL_WARNING,
508 "%s is shorter than expected", file->path);
8f9b4009
NB
509
510 /* Shrink buffer if we allocated substantially too much. */
511 if (total + 4096 < size)
512 buf = xrealloc (buf, total + 1);
513
514 /* The lexer requires that the buffer be \n-terminated. */
515 buf[total] = '\n';
516
517 file->buffer = buf;
518 file->st.st_size = total;
519 file->buffer_valid = true;
520
521 return true;
522}
523
524/* Convenience wrapper around read_file_guts that opens the file if
a98ebe2e 525 necessary and closes the file descriptor after reading. FILE must
8f9b4009
NB
526 have been passed through find_file() at some stage. */
527static bool
528read_file (cpp_reader *pfile, _cpp_file *file)
529{
8f9b4009
NB
530 /* If we already have its contents in memory, succeed immediately. */
531 if (file->buffer_valid)
532 return true;
a58d32c2 533
8f9b4009
NB
534 /* If an earlier read failed for some reason don't try again. */
535 if (file->dont_read || file->err_no)
536 return false;
4d6baafa 537
8f9b4009
NB
538 if (file->fd == -1 && !open_file (file))
539 {
540 open_file_failed (pfile, file);
541 return false;
f2d5f0cc 542 }
d7a2e0f7 543
8f9b4009
NB
544 file->dont_read = !read_file_guts (pfile, file);
545 close (file->fd);
546 file->fd = -1;
a58d32c2 547
8f9b4009 548 return !file->dont_read;
a58d32c2
ZW
549}
550
cf1ee30c
NB
551/* Returns TRUE if FILE's contents have been successfully placed in
552 FILE->buffer and the file should be stacked, otherwise false. */
8f9b4009 553static bool
cf1ee30c 554should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
a58d32c2 555{
cf1ee30c 556 _cpp_file *f;
8f9b4009 557
49634b3a
NB
558 /* Skip once-only files. */
559 if (file->once_only)
560 return false;
561
562 /* We must mark the file once-only if #import now, before header
563 guard checks. Otherwise, undefining the header guard might
564 cause the file to be re-stacked. */
565 if (import)
566 {
567 _cpp_mark_file_once_only (pfile, file);
568
569 /* Don't stack files that have been stacked before. */
570 if (file->stack_count)
571 return false;
572 }
573
cf1ee30c
NB
574 /* Skip if the file had a header guard and the macro is defined.
575 PCH relies on this appearing before the PCH handler below. */
576 if (file->cmacro && file->cmacro->type == NT_MACRO)
bf42e45b
NB
577 return false;
578
cf1ee30c
NB
579 /* Handle PCH files immediately; don't stack them. */
580 if (include_pch_p (file))
c31a6508 581 {
cf1ee30c
NB
582 pfile->cb.read_pch (pfile, file->path, file->fd, file->pchname);
583 close (file->fd);
584 file->fd = -1;
585 return false;
c31a6508 586 }
8f9b4009 587
8f9b4009
NB
588 if (!read_file (pfile, file))
589 return false;
c31a6508 590
49634b3a
NB
591 /* Now we've read the file's contents, we can stack it if there
592 are no once-only files. */
593 if (!pfile->seen_once_only)
cf1ee30c
NB
594 return true;
595
49634b3a 596 /* We may have read the file under a different name. Look
8f9b4009 597 for likely candidates and compare file contents to be sure. */
49634b3a 598 for (f = pfile->all_files; f; f = f->next_file)
8f9b4009
NB
599 {
600 if (f == file)
601 continue;
602
49634b3a
NB
603 if ((import || f->once_only)
604 && f->err_no == 0
8f9b4009
NB
605 && f->st.st_mtime == file->st.st_mtime
606 && f->st.st_size == file->st.st_size
607 && read_file (pfile, f)
608 /* Size might have changed in read_file(). */
609 && f->st.st_size == file->st.st_size
610 && !memcmp (f->buffer, file->buffer, f->st.st_size))
bf42e45b 611 break;
0b3d776a 612 }
8f9b4009 613
cf1ee30c
NB
614 return f == NULL;
615}
616
617/* Place the file referenced by FILE into a new buffer on the buffer
618 stack if possible. IMPORT is true if this stacking attempt is
619 because of a #import directive. Returns true if a buffer is
620 stacked. */
4dc299fb
PB
621bool
622_cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
cf1ee30c
NB
623{
624 cpp_buffer *buffer;
625 int sysp;
626
627 if (!should_stack_file (pfile, file, import))
628 return false;
629
630 sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
631 (file->dir ? file->dir->sysp : 0));
632
633 /* Add the file to the dependencies on its first inclusion. */
634 if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
635 {
636 if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
637 deps_add_dep (pfile->deps, file->path);
638 }
639
640 /* Clear buffer_valid since _cpp_clean_line messes it up. */
641 file->buffer_valid = false;
642 file->stack_count++;
643
644 /* Stack the buffer. */
645 buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
4dc299fb 646 CPP_OPTION (pfile, preprocessed));
cf1ee30c
NB
647 buffer->file = file;
648
649 /* Initialize controlling macro state. */
650 pfile->mi_valid = true;
651 pfile->mi_cmacro = 0;
652
653 /* Generate the call back. */
76bf2c97 654 _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
cf1ee30c
NB
655
656 return true;
add7091b
ZW
657}
658
49634b3a 659/* Mark FILE to be included once only. */
8f9b4009 660void
49634b3a 661_cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
f2d5f0cc 662{
49634b3a
NB
663 pfile->seen_once_only = true;
664 file->once_only = true;
8f9b4009
NB
665}
666
667/* Return the directory from which searching for FNAME should start,
2067c116 668 considering the directive TYPE and ANGLE_BRACKETS. If there is
8f9b4009
NB
669 nothing left in the path, returns NULL. */
670static struct cpp_dir *
671search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
672 enum include_type type)
673{
674 cpp_dir *dir;
675 _cpp_file *file;
74eb4b3e 676
3dce1408 677 if (IS_ABSOLUTE_PATH (fname))
8f9b4009
NB
678 return &pfile->no_search_path;
679
4dc299fb
PB
680 /* pfile->buffer is NULL when processing an -include command-line flag. */
681 file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
41947a54
NB
682
683 /* For #include_next, skip in the search path past the dir in which
e7182666
NB
684 the current file was found, but if it was found via an absolute
685 path use the normal search logic. */
8f9b4009
NB
686 if (type == IT_INCLUDE_NEXT && file->dir)
687 dir = file->dir->next;
74eb4b3e 688 else if (angle_brackets)
8f9b4009
NB
689 dir = pfile->bracket_include;
690 else if (type == IT_CMDLINE)
691 /* -include and -imacros use the #include "" chain with the
692 preprocessor's cwd prepended. */
693 return make_cpp_dir (pfile, "./", false);
694 else if (pfile->quote_ignores_source_dir)
695 dir = pfile->quote_include;
41947a54 696 else
8f9b4009
NB
697 return make_cpp_dir (pfile, dir_name_of_file (file), pfile->map->sysp);
698
699 if (dir == NULL)
0527bc4e 700 cpp_error (pfile, CPP_DL_ERROR,
8f9b4009
NB
701 "no include path in which to search for %s", fname);
702
703 return dir;
704}
41947a54 705
8f9b4009 706/* Strip the basename from the file's path. It ends with a slash if
02fa63cd 707 of nonzero length. Note that this procedure also works for
8f9b4009
NB
708 <stdin>, which is represented by the empty string. */
709static const char *
710dir_name_of_file (_cpp_file *file)
711{
712 if (!file->dir_name)
41947a54 713 {
8f9b4009
NB
714 size_t len = lbasename (file->path) - file->path;
715 char *dir_name = xmalloc (len + 1);
716
717 memcpy (dir_name, file->path, len);
718 dir_name[len] = '\0';
719 file->dir_name = dir_name;
41947a54
NB
720 }
721
8f9b4009
NB
722 return file->dir_name;
723}
724
8f9b4009
NB
725/* Handles #include-family directives (distinguished by TYPE),
726 including HEADER, and the command line -imacros and -include.
727 Returns true if a buffer was stacked. */
728bool
729_cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
730 enum include_type type)
731{
732 struct cpp_dir *dir;
733
734 dir = search_path_head (pfile, fname, angle_brackets, type);
735 if (!dir)
736 return false;
737
4dc299fb 738 return _cpp_stack_file (pfile, _cpp_find_file (pfile, fname, dir, false),
8f9b4009
NB
739 type == IT_IMPORT);
740}
741
742/* Could not open FILE. The complication is dependency output. */
743static void
744open_file_failed (cpp_reader *pfile, _cpp_file *file)
745{
746 int sysp = pfile->map ? pfile->map->sysp: 0;
747 bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
748
749 errno = file->err_no;
750 if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
bf42e45b 751 deps_add_dep (pfile->deps, file->name);
8f9b4009 752 else
add7091b 753 {
8f9b4009
NB
754 /* If we are outputting dependencies but not for this file then
755 don't error because we can still produce correct output. */
756 if (CPP_OPTION (pfile, deps.style) && ! print_dep)
0527bc4e 757 cpp_errno (pfile, CPP_DL_WARNING, file->path);
e7182666 758 else
0527bc4e 759 cpp_errno (pfile, CPP_DL_ERROR, file->path);
add7091b 760 }
8f9b4009 761}
591e15a1 762
8f9b4009
NB
763/* Search in the chain beginning at HEAD for a file whose search path
764 started at START_DIR != NULL. */
765static struct file_hash_entry *
766search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
767{
768 while (head && head->start_dir != start_dir)
769 head = head->next;
770
771 return head;
772}
773
774/* Allocate a new _cpp_file structure. */
775static _cpp_file *
776make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
777{
778 _cpp_file *file;
779
780 file = xcalloc (1, sizeof (_cpp_file));
781 file->main_file = !pfile->buffer;
782 file->fd = -1;
783 file->dir = dir;
784 file->name = xstrdup (fname);
785
786 return file;
787}
788
789/* A hash of directory names. The directory names are the path names
790 of files which contain a #include "", the included file name is
791 appended to this directories.
792
793 To avoid duplicate entries we follow the convention that all
794 non-empty directory names should end in a '/'. DIR_NAME must be
795 stored in permanently allocated memory. */
796static cpp_dir *
797make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
798{
799 struct file_hash_entry *entry, **hash_slot;
800 cpp_dir *dir;
801
802 hash_slot = (struct file_hash_entry **)
b92be669
PB
803 htab_find_slot_with_hash (pfile->file_hash, dir_name,
804 htab_hash_string (dir_name),
805 INSERT);
8f9b4009
NB
806
807 /* Have we already hashed this directory? */
808 for (entry = *hash_slot; entry; entry = entry->next)
809 if (entry->start_dir == NULL)
810 return entry->u.dir;
811
812 dir = xcalloc (1, sizeof (cpp_dir));
813 dir->next = pfile->quote_include;
814 dir->name = (char *) dir_name;
815 dir->len = strlen (dir_name);
816 dir->sysp = sysp;
817
818 /* Store this new result in the hash table. */
819 entry = new_file_hash_entry (pfile);
820 entry->next = *hash_slot;
821 entry->start_dir = NULL;
822 entry->u.dir = dir;
823 *hash_slot = entry;
824
825 return dir;
826}
827
828/* Create a new block of memory for file hash entries. */
829static void
830allocate_file_hash_entries (cpp_reader *pfile)
831{
832 pfile->file_hash_entries_used = 0;
833 pfile->file_hash_entries_allocated = 127;
834 pfile->file_hash_entries = xmalloc
835 (pfile->file_hash_entries_allocated * sizeof (struct file_hash_entry));
836}
837
838/* Return a new file hash entry. */
839static struct file_hash_entry *
840new_file_hash_entry (cpp_reader *pfile)
841{
842 if (pfile->file_hash_entries_used == pfile->file_hash_entries_allocated)
843 allocate_file_hash_entries (pfile);
844
845 return &pfile->file_hash_entries[pfile->file_hash_entries_used++];
846}
847
848/* Returns TRUE if a file FNAME has ever been successfully opened.
849 This routine is not intended to correctly handle filenames aliased
850 by links or redundant . or .. traversals etc. */
851bool
852cpp_included (cpp_reader *pfile, const char *fname)
853{
854 struct file_hash_entry *entry;
855
b92be669
PB
856 entry = htab_find_with_hash (pfile->file_hash, fname,
857 htab_hash_string (fname));
8f9b4009
NB
858
859 while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
860 entry = entry->next;
861
862 return entry != NULL;
863}
864
6614fd40 865/* Calculate the hash value of a file hash entry P. */
b92be669
PB
866
867static hashval_t
868file_hash_hash (const void *p)
869{
870 struct file_hash_entry *entry = (struct file_hash_entry *) p;
871 const char *hname;
872 if (entry->start_dir)
873 hname = entry->u.file->name;
874 else
875 hname = entry->u.dir->name;
876
877 return htab_hash_string (hname);
878}
879
8f9b4009
NB
880/* Compare a string Q against a file hash entry P. */
881static int
b92be669 882file_hash_eq (const void *p, const void *q)
8f9b4009
NB
883{
884 struct file_hash_entry *entry = (struct file_hash_entry *) p;
885 const char *fname = (const char *) q;
886 const char *hname;
887
888 if (entry->start_dir)
889 hname = entry->u.file->name;
890 else
891 hname = entry->u.dir->name;
892
893 return strcmp (hname, fname) == 0;
894}
895
896/* Initialize everything in this source file. */
897void
898_cpp_init_files (cpp_reader *pfile)
899{
b92be669 900 pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
8f9b4009
NB
901 NULL, xcalloc, free);
902 allocate_file_hash_entries (pfile);
903}
904
905/* Finalize everything in this source file. */
906void
907_cpp_cleanup_files (cpp_reader *pfile)
908{
909 htab_delete (pfile->file_hash);
910}
911
912/* Enter a file name in the hash for the sake of cpp_included. */
913void
914_cpp_fake_include (cpp_reader *pfile, const char *fname)
915{
4dc299fb 916 _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true);
add7091b
ZW
917}
918
e605b040 919/* Not everyone who wants to set system-header-ness on a buffer can
642ce434
NB
920 see the details of a buffer. This is an exported interface because
921 fix-header needs it. */
e605b040 922void
6cf87ca4 923cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
e605b040 924{
614c7d37
NB
925 int flags = 0;
926
927 /* 1 = system header, 2 = system header to be treated as C. */
928 if (syshdr)
929 flags = 1 + (externc != 0);
47d89cf3
NB
930 _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
931 SOURCE_LINE (pfile->map, pfile->line), flags);
e605b040
ZW
932}
933
b4e46cea
PB
934/* Allow the client to change the current file. Used by the front end
935 to achieve pseudo-file names like <built-in>.
936 If REASON is LC_LEAVE, then NEW_NAME must be NULL. */
c19b12cb 937void
6cf87ca4
ZW
938cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
939 const char *new_name)
c19b12cb 940{
b4e46cea 941 _cpp_do_file_change (pfile, reason, new_name, 1, 0);
c19b12cb
NB
942}
943
8f9b4009 944/* Callback function for htab_traverse. */
c71f835b 945static int
8f9b4009 946report_missing_guard (void **slot, void *b)
c71f835b 947{
8f9b4009 948 struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
dc65cd60 949 int *bannerp = (int *) b;
c71f835b 950
8f9b4009
NB
951 /* Skip directories. */
952 if (entry->start_dir != NULL)
c71f835b 953 {
8f9b4009
NB
954 _cpp_file *file = entry->u.file;
955
956 /* We don't want MI guard advice for the main file. */
957 if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
c71f835b 958 {
8f9b4009
NB
959 if (*bannerp == 0)
960 {
961 fputs (_("Multiple include guards may be useful for:\n"),
962 stderr);
963 *bannerp = 1;
964 }
965
966 fputs (entry->u.file->path, stderr);
967 putc ('\n', stderr);
c71f835b 968 }
c71f835b 969 }
c71f835b 970
8f9b4009 971 return 0;
a36c54fa
NB
972}
973
8f9b4009
NB
974/* Report on all files that might benefit from a multiple include guard.
975 Triggered by -H. */
976void
977_cpp_report_missing_guards (cpp_reader *pfile)
168d3732 978{
8f9b4009 979 int banner = 0;
ba133c96 980
8f9b4009 981 htab_traverse (pfile->file_hash, report_missing_guard, &banner);
168d3732
ZW
982}
983
41947a54 984/* Locate HEADER, and determine whether it is newer than the current
48c4721e 985 file. If it cannot be located or dated, return -1, if it is
41947a54 986 newer, return 1, otherwise 0. */
f3f751ad 987int
6cf87ca4
ZW
988_cpp_compare_file_date (cpp_reader *pfile, const char *fname,
989 int angle_brackets)
f3f751ad 990{
8f9b4009
NB
991 _cpp_file *file;
992 struct cpp_dir *dir;
df383483 993
8f9b4009
NB
994 dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
995 if (!dir)
f3f751ad 996 return -1;
41947a54 997
4dc299fb 998 file = _cpp_find_file (pfile, fname, dir, false);
8f9b4009
NB
999 if (file->err_no)
1000 return -1;
c45da1ca 1001
8f9b4009 1002 if (file->fd != -1)
c0bfe993 1003 {
8f9b4009
NB
1004 close (file->fd);
1005 file->fd = -1;
c0bfe993 1006 }
041c3194 1007
8f9b4009 1008 return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
f8f769ea
ZW
1009}
1010
c19b12cb
NB
1011/* Pushes the given file onto the buffer stack. Returns nonzero if
1012 successful. */
1013bool
8f9b4009 1014cpp_push_include (cpp_reader *pfile, const char *fname)
c19b12cb 1015{
c19b12cb
NB
1016 /* Make the command line directive take up a line. */
1017 pfile->line++;
8f9b4009 1018 return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
c19b12cb
NB
1019}
1020
5d8ebbd8 1021/* Do appropriate cleanup when a file INC's buffer is popped off the
af0d16cd
NB
1022 input stack. */
1023void
8f9b4009 1024_cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
f9a0e96c 1025{
ba133c96 1026 /* Record the inclusion-preventing macro, which could be NULL
6d18adbc 1027 meaning no controlling macro. */
8f9b4009
NB
1028 if (pfile->mi_valid && file->cmacro == NULL)
1029 file->cmacro = pfile->mi_cmacro;
93c80368
NB
1030
1031 /* Invalidate control macros in the #including file. */
6d18adbc 1032 pfile->mi_valid = false;
f9a0e96c 1033
8f9b4009
NB
1034 if (file->buffer)
1035 {
1036 free ((void *) file->buffer);
1037 file->buffer = NULL;
1038 }
f9a0e96c
ZW
1039}
1040
8f9b4009
NB
1041/* Set the include chain for "" to QUOTE, for <> to BRACKET. If
1042 QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1043 directory of the including file.
ba133c96 1044
8f9b4009
NB
1045 If BRACKET does not lie in the QUOTE chain, it is set to QUOTE. */
1046void
1047cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1048 int quote_ignores_source_dir)
591e15a1 1049{
8f9b4009
NB
1050 pfile->quote_include = quote;
1051 pfile->bracket_include = quote;
1052 pfile->quote_ignores_source_dir = quote_ignores_source_dir;
591e15a1 1053
8f9b4009 1054 for (; quote; quote = quote->next)
591e15a1 1055 {
8f9b4009
NB
1056 quote->name_map = NULL;
1057 quote->len = strlen (quote->name);
1058 if (quote == bracket)
1059 pfile->bracket_include = bracket;
ba133c96 1060 }
591e15a1
NB
1061}
1062
8f9b4009
NB
1063/* Append the file name to the directory to create the path, but don't
1064 turn / into // or // into ///; // may be a namespace escape. */
1065static char *
1066append_file_to_dir (const char *fname, cpp_dir *dir)
1067{
1068 size_t dlen, flen;
1069 char *path;
1070
1071 dlen = dir->len;
1072 flen = strlen (fname);
1073 path = xmalloc (dlen + 1 + flen + 1);
1074 memcpy (path, dir->name, dlen);
1075 if (dlen && path[dlen - 1] != '/')
1076 path[dlen++] = '/';
1077 memcpy (&path[dlen], fname, flen + 1);
1078
1079 return path;
1080}
c31a6508
ZW
1081
1082/* Read a space delimited string of unlimited length from a stdio
5d8ebbd8 1083 file F. */
c31a6508 1084static char *
6cf87ca4 1085read_filename_string (int ch, FILE *f)
c31a6508
ZW
1086{
1087 char *alloc, *set;
1088 int len;
1089
1090 len = 20;
1091 set = alloc = xmalloc (len + 1);
dc65cd60 1092 if (! is_space (ch))
c31a6508
ZW
1093 {
1094 *set++ = ch;
dc65cd60 1095 while ((ch = getc (f)) != EOF && ! is_space (ch))
c31a6508
ZW
1096 {
1097 if (set - alloc == len)
1098 {
1099 len *= 2;
1100 alloc = xrealloc (alloc, len + 1);
1101 set = alloc + len / 2;
1102 }
1103 *set++ = ch;
1104 }
1105 }
1106 *set = '\0';
1107 ungetc (ch, f);
1108 return alloc;
1109}
1110
8f9b4009
NB
1111/* Read the file name map file for DIR. */
1112static void
1113read_name_map (cpp_dir *dir)
c31a6508 1114{
8f9b4009 1115 static const char FILE_NAME_MAP_FILE[] = "header.gcc";
c31a6508
ZW
1116 char *name;
1117 FILE *f;
8f9b4009
NB
1118 size_t len, count = 0, room = 9;
1119
1120 len = dir->len;
1121 name = alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1122 memcpy (name, dir->name, len);
1123 if (len && name[len - 1] != '/')
1124 name[len++] = '/';
1125 strcpy (name + len, FILE_NAME_MAP_FILE);
c31a6508 1126 f = fopen (name, "r");
8767c894 1127
8f9b4009
NB
1128 dir->name_map = xmalloc (room * sizeof (char *));
1129
8767c894
NB
1130 /* Silently return NULL if we cannot open. */
1131 if (f)
c31a6508
ZW
1132 {
1133 int ch;
c31a6508
ZW
1134
1135 while ((ch = getc (f)) != EOF)
1136 {
8f9b4009 1137 char *to;
c31a6508 1138
dc65cd60 1139 if (is_space (ch))
c31a6508 1140 continue;
8f9b4009
NB
1141
1142 if (count + 2 > room)
1143 {
1144 room += 8;
1145 dir->name_map = xrealloc (dir->name_map, room * sizeof (char *));
1146 }
1147
1148 dir->name_map[count] = read_filename_string (ch, f);
dc65cd60 1149 while ((ch = getc (f)) != EOF && is_hspace (ch))
c31a6508 1150 ;
c31a6508 1151
8f9b4009 1152 to = read_filename_string (ch, f);
3dce1408 1153 if (IS_ABSOLUTE_PATH (to))
8f9b4009 1154 dir->name_map[count + 1] = to;
c31a6508
ZW
1155 else
1156 {
8f9b4009 1157 dir->name_map[count + 1] = append_file_to_dir (to, dir);
c31a6508 1158 free (to);
df383483 1159 }
c31a6508 1160
8f9b4009 1161 count += 2;
c31a6508
ZW
1162 while ((ch = getc (f)) != '\n')
1163 if (ch == EOF)
1164 break;
1165 }
8f9b4009 1166
c31a6508
ZW
1167 fclose (f);
1168 }
df383483 1169
8f9b4009
NB
1170 /* Terminate the list of maps. */
1171 dir->name_map[count] = NULL;
df383483 1172}
c31a6508 1173
8f9b4009
NB
1174/* Remap a FILE's name based on the file_name_map, if any, for
1175 FILE->dir. If the file name has any directory separators,
1176 recursively check those directories too. */
c31a6508 1177static char *
8f9b4009 1178remap_filename (cpp_reader *pfile, _cpp_file *file)
c31a6508 1179{
8f9b4009
NB
1180 const char *fname, *p;
1181 char *new_dir;
1182 cpp_dir *dir;
1183 size_t index, len;
8767c894 1184
8f9b4009
NB
1185 dir = file->dir;
1186 fname = file->name;
df383483 1187
8f9b4009
NB
1188 for (;;)
1189 {
1190 if (!dir->name_map)
1191 read_name_map (dir);
c31a6508 1192
8f9b4009
NB
1193 for (index = 0; dir->name_map[index]; index += 2)
1194 if (!strcmp (dir->name_map[index], fname))
1195 return xstrdup (dir->name_map[index + 1]);
c31a6508 1196
8f9b4009
NB
1197 p = strchr (fname, '/');
1198 if (!p || p == fname)
1199 return NULL;
f9200da2 1200
8f9b4009
NB
1201 len = dir->len + (p - fname + 1);
1202 new_dir = xmalloc (len + 1);
1203 memcpy (new_dir, dir->name, dir->len);
1204 memcpy (new_dir + dir->len, fname, p - fname + 1);
1205 new_dir[len] = '\0';
df383483 1206
8f9b4009
NB
1207 dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1208 fname = p + 1;
0b3d776a 1209 }
0b3d776a 1210}
986b1f13 1211
8f9b4009
NB
1212/* Return true if FILE is usable by PCH. */
1213static bool
1214include_pch_p (_cpp_file *file)
986b1f13 1215{
8f9b4009 1216 return file->pch & 1;
986b1f13
NB
1217}
1218
8f9b4009
NB
1219/* Returns true if PCHNAME is a valid PCH file for FILE. */
1220static bool
1221validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
986b1f13 1222{
8f9b4009 1223 const char *saved_path = file->path;
230fcd32 1224 bool valid = false;
986b1f13 1225
8f9b4009
NB
1226 file->path = pchname;
1227 if (open_file (file))
986b1f13 1228 {
230fcd32 1229 valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
8f9b4009 1230
230fcd32 1231 if (!valid)
986b1f13 1232 {
8f9b4009
NB
1233 close (file->fd);
1234 file->fd = -1;
986b1f13 1235 }
986b1f13 1236
8f9b4009 1237 if (CPP_OPTION (pfile, print_include_names))
986b1f13 1238 {
8f9b4009
NB
1239 unsigned int i;
1240 for (i = 1; i < pfile->line_maps.depth; i++)
1241 putc ('.', stderr);
1242 fprintf (stderr, "%c %s\n",
230fcd32 1243 valid ? '!' : 'x', pchname);
986b1f13 1244 }
986b1f13
NB
1245 }
1246
8f9b4009 1247 file->path = saved_path;
230fcd32 1248 return valid;
986b1f13 1249}