]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/files.cc
Update copyright years.
[thirdparty/gcc.git] / libcpp / files.cc
CommitLineData
8f9b4009 1/* Part of CPP library. File handling.
83ffe9cd 2 Copyright (C) 1986-2023 Free Software Foundation, Inc.
add7091b
ZW
3 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
6 Split out of cpplib.c, Zack Weinberg, Oct 1998
8f9b4009 7 Reimplemented, Neil Booth, Jul 2003
add7091b
ZW
8
9This program is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
748086b7 11Free Software Foundation; either version 3, or (at your option) any
add7091b
ZW
12later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
748086b7
JJ
20along with this program; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
add7091b
ZW
22
23#include "config.h"
24#include "system.h"
add7091b 25#include "cpplib.h"
4f4e53dd 26#include "internal.h"
168d3732 27#include "mkdeps.h"
0b4cafec 28#include "obstack.h"
bf42e45b 29#include "hashtab.h"
73e61092 30#include "md5.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 42#ifdef __DJGPP__
473c5bc9 43#include <io.h>
8f9b4009
NB
44 /* For DJGPP redirected input is opened in text mode. */
45# define set_stdin_to_binary_mode() \
46 if (! isatty (0)) setmode (0, O_BINARY)
47#else
48# define set_stdin_to_binary_mode() /* Nothing */
49#endif
50
8f9b4009
NB
51/* This structure represents a file searched for by CPP, whether it
52 exists or not. An instance may be pointed to by more than one
d87fc699 53 cpp_file_hash_entry; at present no reference count is kept. */
8f9b4009
NB
54struct _cpp_file
55{
56 /* Filename as given to #include or command line switch. */
57 const char *name;
642ce434 58
8f9b4009
NB
59 /* The full path used to find the file. */
60 const char *path;
ae1139f9 61
8f9b4009
NB
62 /* The full path of the pch file. */
63 const char *pchname;
add7091b 64
bf42e45b
NB
65 /* The file's path with the basename stripped. NULL if it hasn't
66 been calculated yet. */
8f9b4009 67 const char *dir_name;
c71f835b 68
49634b3a
NB
69 /* Chain through all files. */
70 struct _cpp_file *next_file;
a36c54fa 71
8f9b4009
NB
72 /* The contents of NAME after calling read_file(). */
73 const uchar *buffer;
a36c54fa 74
688e7a53
TT
75 /* Pointer to the real start of BUFFER. read_file() might increment
76 BUFFER; when freeing, this this pointer must be used instead. */
77 const uchar *buffer_start;
78
8f9b4009
NB
79 /* The macro, if any, preventing re-inclusion. */
80 const cpp_hashnode *cmacro;
642ce434 81
8f9b4009
NB
82 /* The directory in the search path where FILE was found. Used for
83 #include_next and determining whether a header is a system
bf42e45b 84 header. */
8f9b4009 85 cpp_dir *dir;
a36c54fa 86
8f9b4009
NB
87 /* As filled in by stat(2) for the file. */
88 struct stat st;
a36c54fa 89
8f9b4009
NB
90 /* File descriptor. Invalid if -1, otherwise open. */
91 int fd;
d6d52dd6 92
8f9b4009
NB
93 /* Zero if this file was successfully opened and stat()-ed,
94 otherwise errno obtained from failure. */
95 int err_no;
add7091b 96
8f9b4009
NB
97 /* Number of times the file has been stacked for preprocessing. */
98 unsigned short stack_count;
2047e26f 99
49634b3a 100 /* If opened with #import or contains #pragma once. */
a0be978a 101 bool once_only : 1;
add7091b 102
8f9b4009 103 /* If read() failed before. */
a0be978a 104 bool dont_read : 1;
add7091b 105
8f9b4009 106 /* If BUFFER above contains the true contents of the file. */
a0be978a 107 bool buffer_valid : 1;
1efcb8c6
JM
108
109 /* If this file is implicitly preincluded. */
a0be978a 110 bool implicit_preinclude : 1;
7ceb899e
NS
111
112 /* > 0: Known C++ Module header unit, <0: known not. ==0, unknown */
113 int header_unit : 2;
8f9b4009 114};
d4506961 115
8f9b4009
NB
116/* A singly-linked list for all searches for a given file name, with
117 its head pointed to by a slot in FILE_HASH. The file name is what
118 appeared between the quotes in a #include directive; it can be
a98ebe2e 119 determined implicitly from the hash table location or explicitly
bf42e45b 120 from FILE->name.
8f9b4009
NB
121
122 FILE is a structure containing details about the file that was
123 found with that search, or details of how the search failed.
124
125 START_DIR is the starting location of the search in the include
126 chain. The current directories for "" includes are also hashed in
bf42e45b
NB
127 the hash table and therefore unique. Files that are looked up
128 without using a search path, such as absolute filenames and file
129 names from the command line share a special starting directory so
130 they don't cause cache hits with normal include-chain lookups.
8f9b4009
NB
131
132 If START_DIR is NULL then the entry is for a directory, not a file,
133 and the directory is in DIR. Since the starting point in a file
134 lookup chain is never NULL, this means that simple pointer
135 comparisons against START_DIR can be made to determine cache hits
136 in file lookups.
bf42e45b
NB
137
138 If a cache lookup fails because of e.g. an extra "./" in the path,
139 then nothing will break. It is just less efficient as CPP will
140 have to do more work re-preprocessing the file, and/or comparing
141 its contents against earlier once-only files.
8f9b4009 142*/
d87fc699 143struct cpp_file_hash_entry
8f9b4009 144{
d87fc699 145 struct cpp_file_hash_entry *next;
8f9b4009 146 cpp_dir *start_dir;
620e594b 147 location_t location;
8f9b4009
NB
148 union
149 {
150 _cpp_file *file;
151 cpp_dir *dir;
152 } u;
153};
154
d87fc699 155/* Number of entries to put in a cpp_file_hash_entry pool. */
97f6bd40
TT
156#define FILE_HASH_POOL_SIZE 127
157
d87fc699 158/* A file hash entry pool. We allocate cpp_file_hash_entry object from
97f6bd40
TT
159 one of these. */
160struct file_hash_entry_pool
161{
162 /* Number of entries used from this pool. */
163 unsigned int file_hash_entries_used;
164 /* Next pool in the chain; used when freeing. */
165 struct file_hash_entry_pool *next;
166 /* The memory pool. */
d87fc699 167 struct cpp_file_hash_entry pool[FILE_HASH_POOL_SIZE];
97f6bd40
TT
168};
169
8f9b4009 170static bool open_file (_cpp_file *file);
3d67ba1e
GK
171static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
172 bool *invalid_pch);
173static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
620e594b 174 bool *invalid_pch, location_t loc);
ac81cf0b 175static bool read_file_guts (cpp_reader *pfile, _cpp_file *file,
3ac6b5cf 176 location_t loc, const char *input_charset);
ac81cf0b 177static bool read_file (cpp_reader *pfile, _cpp_file *file,
620e594b 178 location_t loc);
8f9b4009
NB
179static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
180 int angle_brackets, enum include_type);
181static const char *dir_name_of_file (_cpp_file *file);
ac81cf0b 182static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int,
620e594b 183 location_t);
d87fc699 184static struct cpp_file_hash_entry *search_cache (struct cpp_file_hash_entry *head,
8f9b4009 185 const cpp_dir *start_dir);
bf425849 186static _cpp_file *make_cpp_file (cpp_dir *, const char *fname);
1b449375 187static void destroy_cpp_file (_cpp_file *);
8f9b4009
NB
188static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
189static void allocate_file_hash_entries (cpp_reader *pfile);
d87fc699 190static struct cpp_file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
8f9b4009 191static int report_missing_guard (void **slot, void *b);
b92be669
PB
192static hashval_t file_hash_hash (const void *p);
193static int file_hash_eq (const void *p, const void *q);
8f9b4009
NB
194static char *read_filename_string (int ch, FILE *f);
195static void read_name_map (cpp_dir *dir);
196static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
197static char *append_file_to_dir (const char *fname, cpp_dir *dir);
198static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
73e61092
GK
199static int pchf_save_compare (const void *e1, const void *e2);
200static int pchf_compare (const void *d_p, const void *e_p);
201static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
8f9b4009
NB
202
203/* Given a filename in FILE->PATH, with the empty string interpreted
204 as <stdin>, open it.
205
206 On success FILE contains an open file descriptor and stat
207 information for the file. On failure the file descriptor is -1 and
208 the appropriate errno is also stored in FILE. Returns TRUE iff
209 successful.
210
211 We used to open files in nonblocking mode, but that caused more
212 problems than it solved. Do take care not to acquire a controlling
213 terminal by mistake (this can't happen on sane systems, but
214 paranoia is a virtue).
215
216 Use the three-argument form of open even though we aren't
217 specifying O_CREAT, to defend against broken system headers.
218
219 O_BINARY tells some runtime libraries (notably DJGPP) not to do
220 newline translation; we can handle DOS line breaks just fine
221 ourselves. */
222static bool
223open_file (_cpp_file *file)
224{
225 if (file->path[0] == '\0')
85be8c2d
AP
226 {
227 file->fd = 0;
8f9b4009 228 set_stdin_to_binary_mode ();
85be8c2d 229 }
f2d5f0cc 230 else
8f9b4009 231 file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
a58d32c2 232
8f9b4009 233 if (file->fd != -1)
2047e26f 234 {
8f9b4009
NB
235 if (fstat (file->fd, &file->st) == 0)
236 {
237 if (!S_ISDIR (file->st.st_mode))
238 {
239 file->err_no = 0;
240 return true;
241 }
242
243 /* Ignore a directory and continue the search. The file we're
244 looking for may be elsewhere in the search path. */
245 errno = ENOENT;
246 }
55485cd9 247
55485cd9
ZW
248 close (file->fd);
249 file->fd = -1;
2047e26f 250 }
84152c25
VP
251#if defined(_WIN32) && !defined(__CYGWIN__)
252 else if (errno == EACCES)
253 {
254 /* On most UNIX systems, open succeeds on a directory. Above,
255 we check if we have opened a directory and if so, set errno
256 to ENOENT. However, on Windows, opening a directory
66938a1d 257 fails with EACCES. We want to return ENOENT in that
84152c25
VP
258 case too. */
259 if (stat (file->path, &file->st) == 0
260 && S_ISDIR (file->st.st_mode))
261 errno = ENOENT;
71995ede
VP
262 else
263 /* The call to stat may have reset errno. */
66938a1d 264 errno = EACCES;
84152c25
VP
265 }
266#endif
a54c550f
NB
267 else if (errno == ENOTDIR)
268 errno = ENOENT;
a58d32c2 269
f277b5e0 270 file->err_no = errno;
8f9b4009
NB
271
272 return false;
a58d32c2
ZW
273}
274
3d67ba1e
GK
275/* Temporary PCH intercept of opening a file. Try to find a PCH file
276 based on FILE->name and FILE->dir, and test those found for
277 validity using PFILE->cb.valid_pch. Return true iff a valid file is
278 found. Set *INVALID_PCH if a PCH file is found but wasn't valid. */
279
8f9b4009 280static bool
3d67ba1e 281pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
17211ab5 282{
8f9b4009
NB
283 static const char extension[] = ".gch";
284 const char *path = file->path;
285 size_t len, flen;
286 char *pchname;
287 struct stat st;
288 bool valid = false;
289
290 /* No PCH on <stdin> or if not requested. */
291 if (file->name[0] == '\0' || !pfile->cb.valid_pch)
292 return false;
17211ab5 293
9a8a2b7a
RG
294 /* If the file is not included as first include from either the toplevel
295 file or the command-line it is not a valid use of PCH. */
ca708025
RB
296 for (_cpp_file *f = pfile->all_files; f; f = f->next_file)
297 if (f->implicit_preinclude)
298 continue;
bf425849 299 else if (pfile->main_file == f)
ca708025
RB
300 break;
301 else
302 return false;
9a8a2b7a 303
8f9b4009
NB
304 flen = strlen (path);
305 len = flen + sizeof (extension);
c3f829c1 306 pchname = XNEWVEC (char, len);
8f9b4009
NB
307 memcpy (pchname, path, flen);
308 memcpy (pchname + flen, extension, sizeof (extension));
17211ab5 309
8f9b4009 310 if (stat (pchname, &st) == 0)
17211ab5 311 {
8f9b4009
NB
312 DIR *pchdir;
313 struct dirent *d;
314 size_t dlen, plen = len;
315
316 if (!S_ISDIR (st.st_mode))
317 valid = validate_pch (pfile, file, pchname);
318 else if ((pchdir = opendir (pchname)) != NULL)
17211ab5 319 {
8f9b4009
NB
320 pchname[plen - 1] = '/';
321 while ((d = readdir (pchdir)) != NULL)
8d973a83 322 {
8f9b4009 323 dlen = strlen (d->d_name) + 1;
230fcd32
PE
324 if ((strcmp (d->d_name, ".") == 0)
325 || (strcmp (d->d_name, "..") == 0))
326 continue;
8f9b4009 327 if (dlen + plen > len)
17211ab5 328 {
8f9b4009 329 len += dlen + 64;
c3f829c1 330 pchname = XRESIZEVEC (char, pchname, len);
17211ab5 331 }
8f9b4009
NB
332 memcpy (pchname + plen, d->d_name, dlen);
333 valid = validate_pch (pfile, file, pchname);
334 if (valid)
8d973a83 335 break;
17211ab5 336 }
8f9b4009 337 closedir (pchdir);
17211ab5 338 }
d4c32e1d 339 if (!valid)
bcad4ca2 340 *invalid_pch = true;
17211ab5 341 }
8d973a83 342
8f9b4009
NB
343 if (valid)
344 file->pchname = pchname;
345 else
346 free (pchname);
347
348 return valid;
17211ab5
GK
349}
350
b193dfa8
MLI
351/* Canonicalize the path to FILE. Return the canonical form if it is
352 shorter, otherwise return NULL. This function does NOT free the
353 memory pointed by FILE. */
354
355static char *
356maybe_shorter_path (const char * file)
357{
358 char * file2 = lrealpath (file);
359 if (file2 && strlen (file2) < strlen (file))
360 {
361 return file2;
362 }
363 else
364 {
365 free (file2);
366 return NULL;
367 }
368}
369
8f9b4009 370/* Try to open the path FILE->name appended to FILE->dir. This is
cf1ee30c 371 where remap and PCH intercept the file lookup process. Return true
16dd5cfe 372 if the file was found, whether or not the open was successful.
ac81cf0b
DM
373 Set *INVALID_PCH to true if a PCH file is found but wasn't valid.
374 Use LOC when emitting any diagnostics. */
3d67ba1e 375
e5eba70a 376static bool
ac81cf0b 377find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch,
620e594b 378 location_t loc)
a58d32c2 379{
8f9b4009 380 char *path;
51d0f328 381
8f9b4009
NB
382 if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
383 ;
384 else
94d1613b
MS
385 if (file->dir->construct)
386 path = file->dir->construct (file->name, file->dir);
387 else
388 path = append_file_to_dir (file->name, file->dir);
e5eba70a 389
94d1613b
MS
390 if (path)
391 {
b193dfa8 392 hashval_t hv;
0b4cafec
ILT
393 char *copy;
394 void **pp;
395
eac3e079
JY
396 /* We try to canonicalize system headers. For DOS based file
397 * system, we always try to shorten non-system headers, as DOS
398 * has a tighter constraint on max path length. */
28939589 399 if ((CPP_OPTION (pfile, canonical_system_headers) && file->dir->sysp)
eac3e079
JY
400#ifdef HAVE_DOS_BASED_FILE_SYSTEM
401 || !file->dir->sysp
402#endif
403 )
b193dfa8
MLI
404 {
405 char * canonical_path = maybe_shorter_path (path);
406 if (canonical_path)
407 {
408 /* The canonical path was newly allocated. Let's free the
409 non-canonical one. */
410 free (path);
411 path = canonical_path;
412 }
413 }
414
415 hv = htab_hash_string (path);
0b4cafec
ILT
416 if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL)
417 {
418 file->err_no = ENOENT;
419 return false;
420 }
421
94d1613b
MS
422 file->path = path;
423 if (pch_open_file (pfile, file, invalid_pch))
424 return true;
51d0f328 425
94d1613b
MS
426 if (open_file (file))
427 return true;
428
429 if (file->err_no != ENOENT)
430 {
ac81cf0b 431 open_file_failed (pfile, file, 0, loc);
94d1613b
MS
432 return true;
433 }
434
0b4cafec
ILT
435 /* We copy the path name onto an obstack partly so that we don't
436 leak the memory, but mostly so that we don't fragment the
437 heap. */
f1bf410c
JQ
438 copy = (char *) obstack_copy0 (&pfile->nonexistent_file_ob, path,
439 strlen (path));
94d1613b 440 free (path);
0b4cafec
ILT
441 pp = htab_find_slot_with_hash (pfile->nonexistent_file_hash,
442 copy, hv, INSERT);
443 *pp = copy;
444
94d1613b
MS
445 file->path = file->name;
446 }
447 else
448 {
449 file->err_no = ENOENT;
450 file->path = NULL;
451 }
452
453 return false;
454}
51d0f328 455
0bf12a52 456/* Return true iff the missing_header callback found the given HEADER. */
94d1613b
MS
457static bool
458search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file)
459{
460 missing_header_cb func = pfile->cb.missing_header;
461
462 /* When the regular search path doesn't work, try context dependent
463 headers search paths. */
464 if (func
465 && file->dir == NULL)
cf1ee30c 466 {
e3c287c9 467 if ((file->path = func (pfile, header, &file->dir)) != NULL)
94d1613b
MS
468 {
469 if (open_file (file))
470 return true;
471 free ((void *)file->path);
472 }
473 file->path = file->name;
cf1ee30c
NB
474 }
475
8f9b4009
NB
476 return false;
477}
478
4dc299fb
PB
479bool
480_cpp_find_failed (_cpp_file *file)
481{
482 return file->err_no != 0;
483}
484
8f9b4009
NB
485/* Given a filename FNAME search for such a file in the include path
486 starting from START_DIR. If FNAME is the empty string it is
1ae58c30 487 interpreted as STDIN if START_DIR is PFILE->no_search_path.
8f9b4009
NB
488
489 If the file is not found in the file cache fall back to the O/S and
490 add the result to our cache.
491
492 If the file was not found in the filesystem, or there was an error
02fa63cd 493 opening it, then ERR_NO is nonzero and FD is -1. If the file was
8f9b4009
NB
494 found, then ERR_NO is zero and FD could be -1 or an open file
495 descriptor. FD can be -1 if the file was found in the cache and
496 had previously been closed. To open it again pass the return value
497 to open_file().
1efcb8c6 498
4623a6f2
NS
499 If KIND is _cpp_FFK_PRE_INCLUDE then it is OK for the file to be
500 missing. If present, it is OK for a precompiled header to be
501 included after it.
ac81cf0b
DM
502
503 Use LOC as the location for any errors. */
504
4dc299fb 505_cpp_file *
1efcb8c6 506_cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir,
4623a6f2 507 int angle_brackets, _cpp_find_file_kind kind, location_t loc)
8f9b4009 508{
3d67ba1e 509 bool invalid_pch = false;
0b4cafec
ILT
510 bool saw_bracket_include = false;
511 bool saw_quote_include = false;
512 struct cpp_dir *found_in_cache = NULL;
8f9b4009
NB
513
514 /* Ensure we get no confusion between cached files and directories. */
515 if (start_dir == NULL)
ac81cf0b 516 cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in find_file");
8f9b4009 517
4623a6f2 518 void **hash_slot
15fd8332
JJ
519 = htab_find_slot_with_hash (pfile->file_hash, fname,
520 htab_hash_string (fname), INSERT);
17211ab5 521
8f9b4009 522 /* First check the cache before we resort to memory allocation. */
4623a6f2
NS
523 cpp_file_hash_entry *entry
524 = search_cache ((struct cpp_file_hash_entry *) *hash_slot, start_dir);
8f9b4009
NB
525 if (entry)
526 return entry->u.file;
527
bf425849 528 _cpp_file *file = make_cpp_file (start_dir, fname);
4bda5946 529 file->implicit_preinclude
4623a6f2
NS
530 = (kind == _cpp_FFK_PRE_INCLUDE
531 || (pfile->buffer && pfile->buffer->file->implicit_preinclude));
8f9b4009 532
4623a6f2 533 if (kind != _cpp_FFK_FAKE)
b0d11f1e
NS
534 /* Try each path in the include chain. */
535 for (;;)
536 {
537 if (find_file_in_dir (pfile, file, &invalid_pch, loc))
8f9b4009 538 break;
49634b3a 539
b0d11f1e
NS
540 file->dir = file->dir->next;
541 if (file->dir == NULL)
542 {
543 if (search_path_exhausted (pfile, fname, file))
544 {
545 /* Although this file must not go in the cache,
546 because the file found might depend on things (like
547 the current file) that aren't represented in the
548 cache, it still has to go in the list of all files
549 so that #import works. */
550 file->next_file = pfile->all_files;
551 pfile->all_files = file;
552 if (*hash_slot == NULL)
553 {
554 /* If *hash_slot is NULL, the above
555 htab_find_slot_with_hash call just created the
671a2836
MS
556 slot, but we aren't going to store there anything
557 of use, so need to remove the newly created entry.
558 htab_clear_slot requires that it is non-NULL, so
559 store some non-NULL but valid pointer there,
560 htab_clear_slot will immediately overwrite it. */
b0d11f1e
NS
561 *hash_slot = file;
562 htab_clear_slot (pfile->file_hash, hash_slot);
563 }
564 return file;
565 }
566
567 if (invalid_pch)
568 {
569 cpp_error (pfile, CPP_DL_ERROR,
570 "one or more PCH files were found,"
571 " but they were invalid");
572 if (!cpp_get_options (pfile)->warn_invalid_pch)
cb808c58 573 cpp_error (pfile, CPP_DL_NOTE,
b0d11f1e
NS
574 "use -Winvalid-pch for more information");
575 }
576
4623a6f2 577 if (kind == _cpp_FFK_PRE_INCLUDE)
b0d11f1e
NS
578 {
579 free ((char *) file->name);
580 free (file);
581 if (*hash_slot == NULL)
582 {
583 /* See comment on the above htab_clear_slot call. */
671a2836 584 *hash_slot = &hash_slot;
b0d11f1e
NS
585 htab_clear_slot (pfile->file_hash, hash_slot);
586 }
587 return NULL;
588 }
eb1f4d9d 589
4623a6f2 590 if (kind != _cpp_FFK_HAS_INCLUDE)
ad1a3914 591 open_file_failed (pfile, file, angle_brackets, loc);
b0d11f1e
NS
592 break;
593 }
594
595 /* Only check the cache for the starting location (done above)
596 and the quote and bracket chain heads because there are no
597 other possible starting points for searches. */
598 if (file->dir == pfile->bracket_include)
599 saw_bracket_include = true;
600 else if (file->dir == pfile->quote_include)
601 saw_quote_include = true;
602 else
603 continue;
604
605 entry
606 = search_cache ((struct cpp_file_hash_entry *) *hash_slot, file->dir);
607 if (entry)
608 {
609 found_in_cache = file->dir;
610 break;
611 }
612 }
c6e83800 613
f5eab47e
JJ
614 if (entry)
615 {
616 /* Cache for START_DIR too, sharing the _cpp_file structure. */
617 free ((char *) file->name);
618 free (file);
619 file = entry->u.file;
620 }
621 else
622 {
623 /* This is a new file; put it in the list. */
624 file->next_file = pfile->all_files;
625 pfile->all_files = file;
c6e83800
ZW
626 }
627
8f9b4009
NB
628 /* Store this new result in the hash table. */
629 entry = new_file_hash_entry (pfile);
d87fc699 630 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
8f9b4009 631 entry->start_dir = start_dir;
7cf3f604 632 entry->location = loc;
8f9b4009 633 entry->u.file = file;
15fd8332 634 *hash_slot = (void *) entry;
e5eba70a 635
0b4cafec
ILT
636 /* If we passed the quote or bracket chain heads, cache them also.
637 This speeds up processing if there are lots of -I options. */
638 if (saw_bracket_include
639 && pfile->bracket_include != start_dir
640 && found_in_cache != pfile->bracket_include)
641 {
642 entry = new_file_hash_entry (pfile);
d87fc699 643 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
0b4cafec 644 entry->start_dir = pfile->bracket_include;
7cf3f604 645 entry->location = loc;
0b4cafec 646 entry->u.file = file;
15fd8332 647 *hash_slot = (void *) entry;
0b4cafec
ILT
648 }
649 if (saw_quote_include
650 && pfile->quote_include != start_dir
651 && found_in_cache != pfile->quote_include)
652 {
653 entry = new_file_hash_entry (pfile);
d87fc699 654 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
0b4cafec 655 entry->start_dir = pfile->quote_include;
7cf3f604 656 entry->location = loc;
0b4cafec 657 entry->u.file = file;
15fd8332 658 *hash_slot = (void *) entry;
0b4cafec
ILT
659 }
660
8f9b4009 661 return file;
a58d32c2
ZW
662}
663
8f9b4009 664/* Read a file into FILE->buffer, returning true on success.
a58d32c2 665
8f9b4009
NB
666 If FILE->fd is something weird, like a block device, we don't want
667 to read it at all. Don't even try to figure out what something is,
668 except for plain files and block devices, since there is no
669 reliable portable way of doing this.
a58d32c2 670
ac81cf0b
DM
671 Use LOC for any diagnostics.
672
3ac6b5cf
LH
673 PFILE may be NULL. In this case, no diagnostics are issued.
674
a58d32c2 675 FIXME: Flush file cache and try again if we run out of memory. */
8f9b4009 676static bool
3ac6b5cf
LH
677read_file_guts (cpp_reader *pfile, _cpp_file *file, location_t loc,
678 const char *input_charset)
a58d32c2 679{
8f9b4009 680 ssize_t size, total, count;
562a5c27 681 uchar *buf;
8f9b4009 682 bool regular;
16dd5cfe 683
8f9b4009
NB
684 if (S_ISBLK (file->st.st_mode))
685 {
3ac6b5cf
LH
686 if (pfile)
687 cpp_error_at (pfile, CPP_DL_ERROR, loc,
688 "%s is a block device", file->path);
8f9b4009
NB
689 return false;
690 }
a58d32c2 691
fc0993ac 692 regular = S_ISREG (file->st.st_mode) != 0;
8f9b4009 693 if (regular)
f2d5f0cc 694 {
a58d32c2
ZW
695 /* off_t might have a wider range than ssize_t - in other words,
696 the max size of a file might be bigger than the address
697 space. We can't handle a file that large. (Anyone with
698 a single source file bigger than 2GB needs to rethink
699 their coding style.) Some systems (e.g. AIX 4.1) define
700 SSIZE_MAX to be much smaller than the actual range of the
701 type. Use INTTYPE_MAXIMUM unconditionally to ensure this
702 does not bite us. */
8f9b4009 703 if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
f2d5f0cc 704 {
3ac6b5cf
LH
705 if (pfile)
706 cpp_error_at (pfile, CPP_DL_ERROR, loc,
707 "%s is too large", file->path);
8f9b4009 708 return false;
f2d5f0cc 709 }
a58d32c2 710
8f9b4009
NB
711 size = file->st.st_size;
712 }
713 else
714 /* 8 kilobytes is a sensible starting size. It ought to be bigger
715 than the kernel pipe buffer, and it's definitely bigger than
716 the majority of C source files. */
717 size = 8 * 1024;
718
f41e5bd1
JJ
719 /* The + 16 here is space for the final '\n' and 15 bytes of padding,
720 used to quiet warnings from valgrind or Address Sanitizer, when the
721 optimized lexer accesses aligned 16-byte memory chunks, including
722 the bytes after the malloced, area, and stops lexing on '\n'. */
723 buf = XNEWVEC (uchar, size + 16);
8f9b4009
NB
724 total = 0;
725 while ((count = read (file->fd, buf + total, size - total)) > 0)
726 {
727 total += count;
728
729 if (total == size)
d4506961 730 {
8f9b4009
NB
731 if (regular)
732 break;
733 size *= 2;
f41e5bd1 734 buf = XRESIZEVEC (uchar, buf, size + 16);
d4506961 735 }
a58d32c2 736 }
8f9b4009
NB
737
738 if (count < 0)
a58d32c2 739 {
3ac6b5cf
LH
740 if (pfile)
741 cpp_errno_filename (pfile, CPP_DL_ERROR, file->path, loc);
55e7f907 742 free (buf);
8f9b4009 743 return false;
a58d32c2 744 }
8f9b4009 745
3ac6b5cf 746 if (pfile && regular && total != size && STAT_SIZE_RELIABLE (file->st))
ac81cf0b 747 cpp_error_at (pfile, CPP_DL_WARNING, loc,
0527bc4e 748 "%s is shorter than expected", file->path);
8f9b4009 749
688e7a53 750 file->buffer = _cpp_convert_input (pfile,
3ac6b5cf 751 input_charset,
f41e5bd1 752 buf, size + 16, total,
688e7a53
TT
753 &file->buffer_start,
754 &file->st.st_size);
3ac6b5cf
LH
755 file->buffer_valid = file->buffer;
756 return file->buffer_valid;
8f9b4009
NB
757}
758
759/* Convenience wrapper around read_file_guts that opens the file if
a98ebe2e 760 necessary and closes the file descriptor after reading. FILE must
ac81cf0b 761 have been passed through find_file() at some stage. Use LOC for
3ac6b5cf 762 any diagnostics. Unlike read_file_guts(), PFILE may not be NULL. */
8f9b4009 763static bool
620e594b 764read_file (cpp_reader *pfile, _cpp_file *file, location_t loc)
8f9b4009 765{
8f9b4009
NB
766 /* If we already have its contents in memory, succeed immediately. */
767 if (file->buffer_valid)
768 return true;
a58d32c2 769
8f9b4009
NB
770 /* If an earlier read failed for some reason don't try again. */
771 if (file->dont_read || file->err_no)
772 return false;
4d6baafa 773
8f9b4009
NB
774 if (file->fd == -1 && !open_file (file))
775 {
ac81cf0b 776 open_file_failed (pfile, file, 0, loc);
8f9b4009 777 return false;
f2d5f0cc 778 }
d7a2e0f7 779
3ac6b5cf
LH
780 file->dont_read = !read_file_guts (pfile, file, loc,
781 CPP_OPTION (pfile, input_charset));
8f9b4009
NB
782 close (file->fd);
783 file->fd = -1;
a58d32c2 784
8f9b4009 785 return !file->dont_read;
a58d32c2
ZW
786}
787
b0d11f1e
NS
788/* Returns TRUE if FILE is already known to be idempotent, and should
789 therefore not be read again. */
8f9b4009 790static bool
b0d11f1e 791is_known_idempotent_file (cpp_reader *pfile, _cpp_file *file, bool import)
a58d32c2 792{
49634b3a
NB
793 /* Skip once-only files. */
794 if (file->once_only)
b0d11f1e 795 return true;
49634b3a 796
16dd5cfe 797 /* We must mark the file once-only if #import now, before header
49634b3a
NB
798 guard checks. Otherwise, undefining the header guard might
799 cause the file to be re-stacked. */
800 if (import)
801 {
802 _cpp_mark_file_once_only (pfile, file);
803
804 /* Don't stack files that have been stacked before. */
805 if (file->stack_count)
b0d11f1e 806 return true;
49634b3a
NB
807 }
808
cf1ee30c
NB
809 /* Skip if the file had a header guard and the macro is defined.
810 PCH relies on this appearing before the PCH handler below. */
3f6677f4 811 if (file->cmacro && cpp_macro_p (file->cmacro))
b0d11f1e 812 return true;
bf42e45b 813
cf1ee30c 814 /* Handle PCH files immediately; don't stack them. */
d4c32e1d 815 if (file->pchname)
c31a6508 816 {
c0d578e6 817 pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
cf1ee30c 818 file->fd = -1;
d4c32e1d
JJ
819 free ((void *) file->pchname);
820 file->pchname = NULL;
b0d11f1e 821 return true;
c31a6508 822 }
8f9b4009 823
b0d11f1e
NS
824 return false;
825}
c31a6508 826
b0d11f1e
NS
827/* Return TRUE if file has unique contents, so we should read process
828 it. The file's contents must already have been read. */
829
830static bool
831has_unique_contents (cpp_reader *pfile, _cpp_file *file, bool import,
832 location_t loc)
833{
73e61092
GK
834 /* Check the file against the PCH file. This is done before
835 checking against files we've already seen, since it may save on
836 I/O. */
837 if (check_file_against_entries (pfile, file, import))
838 {
839 /* If this isn't a #import, but yet we can't include the file,
840 that means that it was #import-ed in the PCH file,
841 so we can never include it again. */
842 if (! import)
843 _cpp_mark_file_once_only (pfile, file);
844 return false;
845 }
846
49634b3a
NB
847 /* Now we've read the file's contents, we can stack it if there
848 are no once-only files. */
849 if (!pfile->seen_once_only)
cf1ee30c
NB
850 return true;
851
49634b3a 852 /* We may have read the file under a different name. Look
8f9b4009 853 for likely candidates and compare file contents to be sure. */
b0d11f1e 854 for (_cpp_file *f = pfile->all_files; f; f = f->next_file)
8f9b4009
NB
855 {
856 if (f == file)
b0d11f1e 857 continue; /* It'sa me! */
8f9b4009 858
49634b3a
NB
859 if ((import || f->once_only)
860 && f->err_no == 0
8f9b4009 861 && f->st.st_mtime == file->st.st_mtime
1b449375
EB
862 && f->st.st_size == file->st.st_size)
863 {
864 _cpp_file *ref_file;
1b449375
EB
865
866 if (f->buffer && !f->buffer_valid)
867 {
868 /* We already have a buffer but it is not valid, because
869 the file is still stacked. Make a new one. */
bf425849 870 ref_file = make_cpp_file (f->dir, f->name);
1b449375
EB
871 ref_file->path = f->path;
872 }
873 else
874 /* The file is not stacked anymore. We can reuse it. */
875 ref_file = f;
876
b0d11f1e
NS
877 bool same_file_p = (read_file (pfile, ref_file, loc)
878 /* Size might have changed in read_file(). */
879 && ref_file->st.st_size == file->st.st_size
880 && !memcmp (ref_file->buffer, file->buffer,
881 file->st.st_size));
1b449375
EB
882
883 if (f->buffer && !f->buffer_valid)
884 {
885 ref_file->path = 0;
886 destroy_cpp_file (ref_file);
887 }
888
889 if (same_file_p)
b0d11f1e
NS
890 /* Already seen under a different name. */
891 return false;
1b449375 892 }
0b3d776a 893 }
8f9b4009 894
b0d11f1e 895 return true;
cf1ee30c
NB
896}
897
898/* Place the file referenced by FILE into a new buffer on the buffer
7ceb899e
NS
899 stack if possible. Returns true if a buffer is stacked. Use LOC
900 for any diagnostics. */
901
4dc299fb 902bool
b0d11f1e 903_cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
620e594b 904 location_t loc)
cf1ee30c 905{
b0d11f1e
NS
906 if (is_known_idempotent_file (pfile, file, type == IT_IMPORT))
907 return false;
cf1ee30c 908
7ceb899e
NS
909 int sysp = 0;
910 char *buf = nullptr;
cf1ee30c 911
7ceb899e
NS
912 /* Check C++ module include translation. */
913 if (!file->header_unit && type < IT_HEADER_HWM
914 /* Do not include translate include-next. */
915 && type != IT_INCLUDE_NEXT
916 && pfile->cb.translate_include)
917 buf = (pfile->cb.translate_include
918 (pfile, pfile->line_table, loc, file->path));
b0d11f1e 919
7ceb899e
NS
920 if (buf)
921 {
922 /* We don't increment the line number at the end of a buffer,
923 because we don't usually need that location (we're popping an
924 include file). However in this case we do want to do the
925 increment. So push a writable buffer of two newlines to acheive
b37695c9
NS
926 that. (We also need an extra newline, so this looks like a regular
927 file, which we do that to to make sure we don't fall off the end in the
928 middle of a line. */
929 static uchar newlines[] = "\n\n\n";
7ceb899e
NS
930 cpp_push_buffer (pfile, newlines, 2, true);
931
b37695c9
NS
932 size_t len = strlen (buf);
933 buf[len] = '\n'; /* See above */
7ceb899e
NS
934 cpp_buffer *buffer
935 = cpp_push_buffer (pfile, reinterpret_cast<unsigned char *> (buf),
b37695c9 936 len, true);
7ceb899e
NS
937 buffer->to_free = buffer->buf;
938
939 file->header_unit = +1;
940 _cpp_mark_file_once_only (pfile, file);
941 }
942 else
943 {
944 /* Not a header unit, and we know it. */
945 file->header_unit = -1;
946
947 if (!read_file (pfile, file, loc))
948 return false;
949
950 if (!has_unique_contents (pfile, file, type == IT_IMPORT, loc))
951 return false;
952
953 if (pfile->buffer && file->dir)
954 sysp = MAX (pfile->buffer->sysp, file->dir->sysp);
955
956 /* Add the file to the dependencies on its first inclusion. */
957 if (CPP_OPTION (pfile, deps.style) > (sysp != 0)
958 && !file->stack_count
959 && file->path[0]
bf425849
NS
960 && !(pfile->main_file == file
961 && CPP_OPTION (pfile, deps.ignore_main_file)))
7ceb899e
NS
962 deps_add_dep (pfile->deps, file->path);
963
964 /* Clear buffer_valid since _cpp_clean_line messes it up. */
965 file->buffer_valid = false;
966 file->stack_count++;
967
968 /* Stack the buffer. */
969 cpp_buffer *buffer
970 = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
971 CPP_OPTION (pfile, preprocessed)
972 && !CPP_OPTION (pfile, directives_only));
973 buffer->file = file;
974 buffer->sysp = sysp;
975 buffer->to_free = file->buffer_start;
976
977 /* Initialize controlling macro state. */
978 pfile->mi_valid = true;
979 pfile->mi_cmacro = 0;
980 }
cf1ee30c 981
056f95ec
NS
982 /* In the case of a normal #include, we're now at the start of the
983 line *following* the #include. A separate location_t for this
984 location makes no sense, until we do the LC_LEAVE.
985
986 This does not apply if we found a PCH file, we're not a regular
987 include, or we ran out of locations. */
7ceb899e
NS
988 bool decrement = (file->pchname == NULL
989 && type < IT_DIRECTIVE_HWM
990 && (pfile->line_table->highest_location
991 != LINE_MAP_MAX_LOCATION - 1));
992 if (decrement)
056f95ec 993 pfile->line_table->highest_location--;
b0d11f1e 994
7ceb899e
NS
995 if (file->header_unit <= 0)
996 /* Add line map and do callbacks. */
997 _cpp_do_file_change (pfile, LC_ENTER, file->path,
d1c566d7
NS
998 /* With preamble injection, start on line zero,
999 so the preamble doesn't appear to have been
1000 included from line 1. Likewise when
1001 starting preprocessed, we expect an initial
1002 locating line. */
7ceb899e
NS
1003 type == IT_PRE_MAIN ? 0 : 1, sysp);
1004 else if (decrement)
1005 {
1006 /* Adjust the line back one so we appear on the #include line itself. */
1007 const line_map_ordinary *map
1008 = LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table);
1009 linenum_type line = SOURCE_LINE (map, pfile->line_table->highest_line);
1010 linemap_line_start (pfile->line_table, line - 1, 0);
1011 }
cf1ee30c
NB
1012
1013 return true;
add7091b
ZW
1014}
1015
49634b3a 1016/* Mark FILE to be included once only. */
8f9b4009 1017void
49634b3a 1018_cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
f2d5f0cc 1019{
49634b3a
NB
1020 pfile->seen_once_only = true;
1021 file->once_only = true;
8f9b4009
NB
1022}
1023
1024/* Return the directory from which searching for FNAME should start,
2067c116 1025 considering the directive TYPE and ANGLE_BRACKETS. If there is
8f9b4009
NB
1026 nothing left in the path, returns NULL. */
1027static struct cpp_dir *
1028search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
1029 enum include_type type)
1030{
1031 cpp_dir *dir;
1032 _cpp_file *file;
74eb4b3e 1033
3dce1408 1034 if (IS_ABSOLUTE_PATH (fname))
8f9b4009
NB
1035 return &pfile->no_search_path;
1036
4dc299fb
PB
1037 /* pfile->buffer is NULL when processing an -include command-line flag. */
1038 file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
41947a54
NB
1039
1040 /* For #include_next, skip in the search path past the dir in which
e7182666
NB
1041 the current file was found, but if it was found via an absolute
1042 path use the normal search logic. */
b0f4807f
MM
1043 if (type == IT_INCLUDE_NEXT && file->dir
1044 && file->dir != &pfile->no_search_path)
8f9b4009 1045 dir = file->dir->next;
74eb4b3e 1046 else if (angle_brackets)
8f9b4009
NB
1047 dir = pfile->bracket_include;
1048 else if (type == IT_CMDLINE)
1049 /* -include and -imacros use the #include "" chain with the
1050 preprocessor's cwd prepended. */
1051 return make_cpp_dir (pfile, "./", false);
1052 else if (pfile->quote_ignores_source_dir)
1053 dir = pfile->quote_include;
41947a54 1054 else
12f9df4e
PB
1055 return make_cpp_dir (pfile, dir_name_of_file (file),
1056 pfile->buffer ? pfile->buffer->sysp : 0);
8f9b4009
NB
1057
1058 if (dir == NULL)
0527bc4e 1059 cpp_error (pfile, CPP_DL_ERROR,
8f9b4009
NB
1060 "no include path in which to search for %s", fname);
1061
1062 return dir;
1063}
41947a54 1064
8f9b4009 1065/* Strip the basename from the file's path. It ends with a slash if
02fa63cd 1066 of nonzero length. Note that this procedure also works for
8f9b4009
NB
1067 <stdin>, which is represented by the empty string. */
1068static const char *
1069dir_name_of_file (_cpp_file *file)
1070{
1071 if (!file->dir_name)
41947a54 1072 {
8f9b4009 1073 size_t len = lbasename (file->path) - file->path;
c3f829c1 1074 char *dir_name = XNEWVEC (char, len + 1);
8f9b4009
NB
1075
1076 memcpy (dir_name, file->path, len);
1077 dir_name[len] = '\0';
1078 file->dir_name = dir_name;
41947a54
NB
1079 }
1080
8f9b4009
NB
1081 return file->dir_name;
1082}
1083
8f9b4009
NB
1084/* Handles #include-family directives (distinguished by TYPE),
1085 including HEADER, and the command line -imacros and -include.
1086 Returns true if a buffer was stacked. */
1087bool
1088_cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
620e594b 1089 enum include_type type, location_t loc)
8f9b4009 1090{
cc811a8a
BE
1091 /* For -include command-line flags we have type == IT_CMDLINE.
1092 When the first -include file is processed we have the case, where
1093 pfile->cur_token == pfile->cur_run->base, we are directly called up
1094 by the front end. However in the case of the second -include file,
1095 we are called from _cpp_lex_token -> _cpp_get_fresh_line ->
1096 cpp_push_include, with pfile->cur_token != pfile->cur_run->base,
1097 and pfile->cur_token[-1].src_loc not (yet) initialized.
1098 However, when the include file cannot be found, we need src_loc to
1099 be initialized to some safe value: 0 means UNKNOWN_LOCATION. */
1100 if (type == IT_CMDLINE && pfile->cur_token != pfile->cur_run->base)
1101 pfile->cur_token[-1].src_loc = 0;
1102
b0d11f1e 1103 cpp_dir *dir = search_path_head (pfile, fname, angle_brackets, type);
8f9b4009
NB
1104 if (!dir)
1105 return false;
1106
ad1a3914 1107 _cpp_file *file = _cpp_find_file (pfile, fname, dir, angle_brackets,
4623a6f2
NS
1108 type == IT_DEFAULT ? _cpp_FFK_PRE_INCLUDE
1109 : _cpp_FFK_NORMAL, loc);
1efcb8c6
JM
1110 if (type == IT_DEFAULT && file == NULL)
1111 return false;
22234f56 1112
b0d11f1e 1113 return _cpp_stack_file (pfile, file, type, loc);
8f9b4009
NB
1114}
1115
1f9db692 1116/* NAME is a header file name, find the _cpp_file, if any. */
7ceb899e 1117
1f9db692
NS
1118static _cpp_file *
1119test_header_unit (cpp_reader *pfile, const char *name, bool angle,
1120 location_t loc)
7ceb899e 1121{
1f9db692
NS
1122 if (cpp_dir *dir = search_path_head (pfile, name, angle, IT_INCLUDE))
1123 return _cpp_find_file (pfile, name, dir, angle, _cpp_FFK_NORMAL, loc);
7ceb899e 1124
1f9db692
NS
1125 return nullptr;
1126}
1127
1128/* NAME is a header file name, find the path we'll use to open it and infer that
1129 it is a header-unit. */
7ceb899e 1130
1f9db692
NS
1131const char *
1132_cpp_find_header_unit (cpp_reader *pfile, const char *name, bool angle,
1133 location_t loc)
1134{
1135 if (_cpp_file *file = test_header_unit (pfile, name, angle, loc))
7ceb899e 1136 {
1f9db692
NS
1137 if (file->fd > 0)
1138 {
1139 /* Don't leave it open. */
1140 close (file->fd);
1141 file->fd = 0;
1142 }
1143
1144 file->header_unit = +1;
1145 _cpp_mark_file_once_only (pfile, file);
1146
1147 return file->path;
7ceb899e
NS
1148 }
1149
1f9db692
NS
1150 return nullptr;
1151}
1152
1153/* NAME is a header file name, find the path we'll use to open it. But do not
1154 infer it is a header unit. */
1155
1156const char *
1157cpp_probe_header_unit (cpp_reader *pfile, const char *name, bool angle,
1158 location_t loc)
1159{
1160 if (_cpp_file *file = test_header_unit (pfile, name, angle, loc))
1161 return file->path;
1162
1163 return nullptr;
7ceb899e
NS
1164}
1165
9844497a
NS
1166/* Retrofit the just-entered main file asif it was an include. This
1167 will permit correct include_next use, and mark it as a system
1168 header if that's where it resides. We use filesystem-appropriate
1169 prefix matching of the include path to locate the main file. */
1170void
1171cpp_retrofit_as_include (cpp_reader *pfile)
1172{
1173 /* We should be the outermost. */
1174 gcc_assert (!pfile->buffer->prev);
1175
1176 if (const char *name = pfile->main_file->name)
1177 {
1178 /* Locate name on the include dir path, using a prefix match. */
1179 size_t name_len = strlen (name);
1180 for (cpp_dir *dir = pfile->quote_include; dir; dir = dir->next)
1181 if (dir->len < name_len
1182 && IS_DIR_SEPARATOR (name[dir->len])
1183 && !filename_ncmp (name, dir->name, dir->len))
1184 {
1185 pfile->main_file->dir = dir;
1186 if (dir->sysp)
1187 cpp_make_system_header (pfile, 1, 0);
1188 break;
1189 }
1190 }
1191
1192 /* Initialize controlling macro state. */
1193 pfile->mi_valid = true;
1194 pfile->mi_cmacro = 0;
1195}
1196
8f9b4009
NB
1197/* Could not open FILE. The complication is dependency output. */
1198static void
ac81cf0b 1199open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets,
620e594b 1200 location_t loc)
8f9b4009 1201{
500bee0a 1202 int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
6568f34b 1203 bool print_dep = CPP_OPTION (pfile, deps.style) > (angle_brackets || !!sysp);
8f9b4009
NB
1204
1205 errno = file->err_no;
1206 if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
74dc6a11
CD
1207 {
1208 deps_add_dep (pfile->deps, file->name);
1209 /* If the preprocessor output (other than dependency information) is
1210 being used, we must also flag an error. */
1211 if (CPP_OPTION (pfile, deps.need_preprocessor_output))
46ce03de 1212 cpp_errno_filename (pfile, CPP_DL_FATAL,
ac81cf0b
DM
1213 file->path ? file->path : file->name,
1214 loc);
74dc6a11 1215 }
8f9b4009 1216 else
add7091b 1217 {
74dc6a11
CD
1218 /* If we are not outputting dependencies, or if we are and dependencies
1219 were requested for this file, or if preprocessor output is needed
1220 in addition to dependency information, this is an error.
1221
1222 Otherwise (outputting dependencies but not for this file, and not
1223 using the preprocessor output), we can still produce correct output
1224 so it's only a warning. */
1225 if (CPP_OPTION (pfile, deps.style) == DEPS_NONE
1226 || print_dep
1227 || CPP_OPTION (pfile, deps.need_preprocessor_output))
46ce03de 1228 cpp_errno_filename (pfile, CPP_DL_FATAL,
ac81cf0b
DM
1229 file->path ? file->path : file->name,
1230 loc);
74dc6a11 1231 else
46ce03de 1232 cpp_errno_filename (pfile, CPP_DL_WARNING,
ac81cf0b
DM
1233 file->path ? file->path : file->name,
1234 loc);
add7091b 1235 }
8f9b4009 1236}
591e15a1 1237
8f9b4009
NB
1238/* Search in the chain beginning at HEAD for a file whose search path
1239 started at START_DIR != NULL. */
d87fc699
JH
1240static struct cpp_file_hash_entry *
1241search_cache (struct cpp_file_hash_entry *head, const cpp_dir *start_dir)
8f9b4009 1242{
f5eab47e
JJ
1243 while (head && head->start_dir != start_dir)
1244 head = head->next;
1245
1246 return head;
8f9b4009
NB
1247}
1248
1249/* Allocate a new _cpp_file structure. */
1250static _cpp_file *
bf425849 1251make_cpp_file (cpp_dir *dir, const char *fname)
8f9b4009 1252{
bf425849 1253 _cpp_file *file = XCNEW (_cpp_file);
8f9b4009
NB
1254 file->fd = -1;
1255 file->dir = dir;
1256 file->name = xstrdup (fname);
1257
1258 return file;
1259}
1260
1b449375
EB
1261/* Release a _cpp_file structure. */
1262static void
1263destroy_cpp_file (_cpp_file *file)
1264{
04695783 1265 free ((void *) file->buffer_start);
1b449375 1266 free ((void *) file->name);
f5ea989d 1267 free ((void *) file->path);
1b449375
EB
1268 free (file);
1269}
1270
97f6bd40
TT
1271/* Release all the files allocated by this reader. */
1272static void
1273destroy_all_cpp_files (cpp_reader *pfile)
1274{
1275 _cpp_file *iter = pfile->all_files;
1276 while (iter)
1277 {
1278 _cpp_file *next = iter->next_file;
1279 destroy_cpp_file (iter);
1280 iter = next;
1281 }
1282}
1283
8f9b4009
NB
1284/* A hash of directory names. The directory names are the path names
1285 of files which contain a #include "", the included file name is
1286 appended to this directories.
1287
1288 To avoid duplicate entries we follow the convention that all
1289 non-empty directory names should end in a '/'. DIR_NAME must be
1290 stored in permanently allocated memory. */
1291static cpp_dir *
1292make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
1293{
d87fc699 1294 struct cpp_file_hash_entry *entry, **hash_slot;
8f9b4009
NB
1295 cpp_dir *dir;
1296
d87fc699 1297 hash_slot = (struct cpp_file_hash_entry **)
a23ee064 1298 htab_find_slot_with_hash (pfile->dir_hash, dir_name,
b92be669
PB
1299 htab_hash_string (dir_name),
1300 INSERT);
8f9b4009
NB
1301
1302 /* Have we already hashed this directory? */
1303 for (entry = *hash_slot; entry; entry = entry->next)
1304 if (entry->start_dir == NULL)
1305 return entry->u.dir;
1306
c3f829c1 1307 dir = XCNEW (cpp_dir);
8f9b4009
NB
1308 dir->next = pfile->quote_include;
1309 dir->name = (char *) dir_name;
1310 dir->len = strlen (dir_name);
1311 dir->sysp = sysp;
94d1613b 1312 dir->construct = 0;
8f9b4009
NB
1313
1314 /* Store this new result in the hash table. */
1315 entry = new_file_hash_entry (pfile);
1316 entry->next = *hash_slot;
1317 entry->start_dir = NULL;
f1e20710 1318 entry->location = pfile->line_table->highest_location;
8f9b4009
NB
1319 entry->u.dir = dir;
1320 *hash_slot = entry;
1321
1322 return dir;
1323}
1324
1325/* Create a new block of memory for file hash entries. */
1326static void
1327allocate_file_hash_entries (cpp_reader *pfile)
1328{
97f6bd40
TT
1329 struct file_hash_entry_pool *pool = XNEW (struct file_hash_entry_pool);
1330 pool->file_hash_entries_used = 0;
1331 pool->next = pfile->file_hash_entries;
1332 pfile->file_hash_entries = pool;
8f9b4009
NB
1333}
1334
1335/* Return a new file hash entry. */
d87fc699 1336static struct cpp_file_hash_entry *
8f9b4009
NB
1337new_file_hash_entry (cpp_reader *pfile)
1338{
97f6bd40
TT
1339 unsigned int idx;
1340 if (pfile->file_hash_entries->file_hash_entries_used == FILE_HASH_POOL_SIZE)
8f9b4009
NB
1341 allocate_file_hash_entries (pfile);
1342
97f6bd40
TT
1343 idx = pfile->file_hash_entries->file_hash_entries_used++;
1344 return &pfile->file_hash_entries->pool[idx];
1345}
1346
1347/* Free the file hash entry pools. */
1348static void
1349free_file_hash_entries (cpp_reader *pfile)
1350{
1351 struct file_hash_entry_pool *iter = pfile->file_hash_entries;
1352 while (iter)
1353 {
1354 struct file_hash_entry_pool *next = iter->next;
1355 free (iter);
1356 iter = next;
1357 }
8f9b4009
NB
1358}
1359
1360/* Returns TRUE if a file FNAME has ever been successfully opened.
1361 This routine is not intended to correctly handle filenames aliased
1362 by links or redundant . or .. traversals etc. */
1363bool
1364cpp_included (cpp_reader *pfile, const char *fname)
1365{
d87fc699 1366 struct cpp_file_hash_entry *entry;
8f9b4009 1367
d87fc699 1368 entry = (struct cpp_file_hash_entry *)
c3f829c1 1369 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
8f9b4009
NB
1370
1371 while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
1372 entry = entry->next;
1373
1374 return entry != NULL;
1375}
1376
f1e20710
TT
1377/* Returns TRUE if a file FNAME has ever been successfully opened
1378 before LOCATION. This routine is not intended to correctly handle
1379 filenames aliased by links or redundant . or .. traversals etc. */
1380bool
1381cpp_included_before (cpp_reader *pfile, const char *fname,
620e594b 1382 location_t location)
f1e20710 1383{
53290e07
JJ
1384 struct cpp_file_hash_entry *entry
1385 = (struct cpp_file_hash_entry *)
1386 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
f1e20710 1387
53290e07
JJ
1388 if (IS_ADHOC_LOC (location))
1389 location = get_location_from_adhoc_loc (pfile->line_table, location);
f1e20710
TT
1390
1391 while (entry && (entry->start_dir == NULL || entry->u.file->err_no
1392 || entry->location > location))
1393 entry = entry->next;
1394
1395 return entry != NULL;
1396}
1397
6614fd40 1398/* Calculate the hash value of a file hash entry P. */
b92be669
PB
1399
1400static hashval_t
1401file_hash_hash (const void *p)
1402{
d87fc699 1403 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
b92be669
PB
1404 const char *hname;
1405 if (entry->start_dir)
1406 hname = entry->u.file->name;
1407 else
1408 hname = entry->u.dir->name;
1409
1410 return htab_hash_string (hname);
1411}
1412
8f9b4009
NB
1413/* Compare a string Q against a file hash entry P. */
1414static int
b92be669 1415file_hash_eq (const void *p, const void *q)
8f9b4009 1416{
d87fc699 1417 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
8f9b4009
NB
1418 const char *fname = (const char *) q;
1419 const char *hname;
1420
1421 if (entry->start_dir)
1422 hname = entry->u.file->name;
1423 else
1424 hname = entry->u.dir->name;
1425
4489800d 1426 return filename_cmp (hname, fname) == 0;
8f9b4009
NB
1427}
1428
0b4cafec
ILT
1429/* Compare entries in the nonexistent file hash table. These are just
1430 strings. */
1431static int
1432nonexistent_file_hash_eq (const void *p, const void *q)
1433{
4489800d 1434 return filename_cmp ((const char *) p, (const char *) q) == 0;
0b4cafec
ILT
1435}
1436
8f9b4009
NB
1437/* Initialize everything in this source file. */
1438void
1439_cpp_init_files (cpp_reader *pfile)
1440{
b92be669 1441 pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
8f9b4009 1442 NULL, xcalloc, free);
a23ee064
AP
1443 pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1444 NULL, xcalloc, free);
8f9b4009 1445 allocate_file_hash_entries (pfile);
0b4cafec
ILT
1446 pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
1447 nonexistent_file_hash_eq,
1448 NULL, xcalloc, free);
19a9ba64
AM
1449 obstack_specify_allocation (&pfile->nonexistent_file_ob, 0, 0,
1450 xmalloc, free);
8f9b4009
NB
1451}
1452
1453/* Finalize everything in this source file. */
1454void
1455_cpp_cleanup_files (cpp_reader *pfile)
1456{
1457 htab_delete (pfile->file_hash);
a23ee064 1458 htab_delete (pfile->dir_hash);
0b4cafec
ILT
1459 htab_delete (pfile->nonexistent_file_hash);
1460 obstack_free (&pfile->nonexistent_file_ob, 0);
97f6bd40
TT
1461 free_file_hash_entries (pfile);
1462 destroy_all_cpp_files (pfile);
1463}
1464
1465/* Make the parser forget about files it has seen. This can be useful
1466 for resetting the parser to start another run. */
1467void
1468cpp_clear_file_cache (cpp_reader *pfile)
1469{
1470 _cpp_cleanup_files (pfile);
1471 pfile->file_hash_entries = NULL;
1472 pfile->all_files = NULL;
1473 _cpp_init_files (pfile);
8f9b4009
NB
1474}
1475
1476/* Enter a file name in the hash for the sake of cpp_included. */
1477void
1478_cpp_fake_include (cpp_reader *pfile, const char *fname)
1479{
4623a6f2 1480 _cpp_find_file (pfile, fname, pfile->buffer->file->dir, 0, _cpp_FFK_FAKE, 0);
add7091b
ZW
1481}
1482
e605b040 1483/* Not everyone who wants to set system-header-ness on a buffer can
642ce434
NB
1484 see the details of a buffer. This is an exported interface because
1485 fix-header needs it. */
e605b040 1486void
6cf87ca4 1487cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
e605b040 1488{
614c7d37 1489 int flags = 0;
99b1c316 1490 const class line_maps *line_table = pfile->line_table;
0e50b624 1491 const line_map_ordinary *map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
614c7d37
NB
1492 /* 1 = system header, 2 = system header to be treated as C. */
1493 if (syshdr)
1494 flags = 1 + (externc != 0);
12f9df4e 1495 pfile->buffer->sysp = flags;
46427374 1496 _cpp_do_file_change (pfile, LC_RENAME, ORDINARY_MAP_FILE_NAME (map),
4623a6f2
NS
1497 SOURCE_LINE (map, pfile->line_table->highest_line),
1498 flags);
e605b040
ZW
1499}
1500
b4e46cea
PB
1501/* Allow the client to change the current file. Used by the front end
1502 to achieve pseudo-file names like <built-in>.
1503 If REASON is LC_LEAVE, then NEW_NAME must be NULL. */
c19b12cb 1504void
6cf87ca4
ZW
1505cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
1506 const char *new_name)
c19b12cb 1507{
b4e46cea 1508 _cpp_do_file_change (pfile, reason, new_name, 1, 0);
c19b12cb
NB
1509}
1510
affa55c6
JJ
1511struct report_missing_guard_data
1512{
bf425849 1513 cpp_reader *pfile;
affa55c6
JJ
1514 const char **paths;
1515 size_t count;
1516};
1517
8f9b4009 1518/* Callback function for htab_traverse. */
c71f835b 1519static int
affa55c6 1520report_missing_guard (void **slot, void *d)
c71f835b 1521{
d87fc699 1522 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) *slot;
affa55c6
JJ
1523 struct report_missing_guard_data *data
1524 = (struct report_missing_guard_data *) d;
c71f835b 1525
8f9b4009
NB
1526 /* Skip directories. */
1527 if (entry->start_dir != NULL)
c71f835b 1528 {
8f9b4009
NB
1529 _cpp_file *file = entry->u.file;
1530
1531 /* We don't want MI guard advice for the main file. */
bf425849
NS
1532 if (!file->once_only
1533 && file->cmacro == NULL
1534 && file->stack_count == 1
1535 && data->pfile->main_file != file)
c71f835b 1536 {
affa55c6 1537 if (data->paths == NULL)
8f9b4009 1538 {
affa55c6
JJ
1539 data->paths = XCNEWVEC (const char *, data->count);
1540 data->count = 0;
8f9b4009
NB
1541 }
1542
affa55c6 1543 data->paths[data->count++] = file->path;
c71f835b 1544 }
c71f835b 1545 }
c71f835b 1546
affa55c6
JJ
1547 /* Keep traversing the hash table. */
1548 return 1;
1549}
1550
1551/* Comparison function for qsort. */
1552static int
1553report_missing_guard_cmp (const void *p1, const void *p2)
1554{
1555 return strcmp (*(const char *const *) p1, *(const char *const *) p2);
a36c54fa
NB
1556}
1557
8f9b4009
NB
1558/* Report on all files that might benefit from a multiple include guard.
1559 Triggered by -H. */
1560void
1561_cpp_report_missing_guards (cpp_reader *pfile)
168d3732 1562{
affa55c6
JJ
1563 struct report_missing_guard_data data;
1564
bf425849 1565 data.pfile = pfile;
affa55c6
JJ
1566 data.paths = NULL;
1567 data.count = htab_elements (pfile->file_hash);
1568 htab_traverse (pfile->file_hash, report_missing_guard, &data);
ba133c96 1569
affa55c6
JJ
1570 if (data.paths != NULL)
1571 {
1572 size_t i;
1573
1574 /* Sort the paths to avoid outputting them in hash table
1575 order. */
1576 qsort (data.paths, data.count, sizeof (const char *),
1577 report_missing_guard_cmp);
1578 fputs (_("Multiple include guards may be useful for:\n"),
1579 stderr);
1580 for (i = 0; i < data.count; i++)
1581 {
1582 fputs (data.paths[i], stderr);
1583 putc ('\n', stderr);
1584 }
1585 free (data.paths);
1586 }
168d3732
ZW
1587}
1588
41947a54 1589/* Locate HEADER, and determine whether it is newer than the current
48c4721e 1590 file. If it cannot be located or dated, return -1, if it is
41947a54 1591 newer, return 1, otherwise 0. */
f3f751ad 1592int
6cf87ca4
ZW
1593_cpp_compare_file_date (cpp_reader *pfile, const char *fname,
1594 int angle_brackets)
f3f751ad 1595{
8f9b4009
NB
1596 _cpp_file *file;
1597 struct cpp_dir *dir;
df383483 1598
8f9b4009
NB
1599 dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
1600 if (!dir)
f3f751ad 1601 return -1;
41947a54 1602
4623a6f2 1603 file = _cpp_find_file (pfile, fname, dir, angle_brackets, _cpp_FFK_NORMAL, 0);
8f9b4009
NB
1604 if (file->err_no)
1605 return -1;
c45da1ca 1606
8f9b4009 1607 if (file->fd != -1)
c0bfe993 1608 {
8f9b4009
NB
1609 close (file->fd);
1610 file->fd = -1;
c0bfe993 1611 }
041c3194 1612
8f9b4009 1613 return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
f8f769ea
ZW
1614}
1615
c19b12cb
NB
1616/* Pushes the given file onto the buffer stack. Returns nonzero if
1617 successful. */
1618bool
8f9b4009 1619cpp_push_include (cpp_reader *pfile, const char *fname)
c19b12cb 1620{
6bf2ff0d
NS
1621 return _cpp_stack_include (pfile, fname, false, IT_CMDLINE,
1622 pfile->line_table->highest_line);
c19b12cb
NB
1623}
1624
1efcb8c6
JM
1625/* Pushes the given file, implicitly included at the start of a
1626 compilation, onto the buffer stack but without any errors if the
1627 file is not found. Returns nonzero if successful. */
1628bool
1629cpp_push_default_include (cpp_reader *pfile, const char *fname)
1630{
6bf2ff0d
NS
1631 return _cpp_stack_include (pfile, fname, true, IT_DEFAULT,
1632 pfile->line_table->highest_line);
1efcb8c6
JM
1633}
1634
5d8ebbd8 1635/* Do appropriate cleanup when a file INC's buffer is popped off the
af0d16cd
NB
1636 input stack. */
1637void
28937f11
JJ
1638_cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file,
1639 const unsigned char *to_free)
f9a0e96c 1640{
ba133c96 1641 /* Record the inclusion-preventing macro, which could be NULL
6d18adbc 1642 meaning no controlling macro. */
8f9b4009
NB
1643 if (pfile->mi_valid && file->cmacro == NULL)
1644 file->cmacro = pfile->mi_cmacro;
93c80368
NB
1645
1646 /* Invalidate control macros in the #including file. */
6d18adbc 1647 pfile->mi_valid = false;
f9a0e96c 1648
28937f11 1649 if (to_free)
8f9b4009 1650 {
28937f11
JJ
1651 if (to_free == file->buffer_start)
1652 {
1653 file->buffer_start = NULL;
1654 file->buffer = NULL;
1655 file->buffer_valid = false;
1656 }
1657 free ((void *) to_free);
8f9b4009 1658 }
f9a0e96c
ZW
1659}
1660
b492b686
GF
1661/* Return the file name associated with FILE. */
1662const char *
1663_cpp_get_file_name (_cpp_file *file)
1664{
1665 return file->name;
1666}
1667
be8ac3e2
GZ
1668/* Inteface to file statistics record in _cpp_file structure. */
1669struct stat *
1670_cpp_get_file_stat (_cpp_file *file)
1671{
1672 return &file->st;
1673}
1674
8f9b4009
NB
1675/* Set the include chain for "" to QUOTE, for <> to BRACKET. If
1676 QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1677 directory of the including file.
ba133c96 1678
8f9b4009
NB
1679 If BRACKET does not lie in the QUOTE chain, it is set to QUOTE. */
1680void
1681cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1682 int quote_ignores_source_dir)
591e15a1 1683{
8f9b4009
NB
1684 pfile->quote_include = quote;
1685 pfile->bracket_include = quote;
1686 pfile->quote_ignores_source_dir = quote_ignores_source_dir;
591e15a1 1687
8f9b4009 1688 for (; quote; quote = quote->next)
591e15a1 1689 {
8f9b4009
NB
1690 quote->name_map = NULL;
1691 quote->len = strlen (quote->name);
1692 if (quote == bracket)
1693 pfile->bracket_include = bracket;
ba133c96 1694 }
591e15a1
NB
1695}
1696
8f9b4009
NB
1697/* Append the file name to the directory to create the path, but don't
1698 turn / into // or // into ///; // may be a namespace escape. */
1699static char *
1700append_file_to_dir (const char *fname, cpp_dir *dir)
1701{
1702 size_t dlen, flen;
1703 char *path;
1704
1705 dlen = dir->len;
1706 flen = strlen (fname);
c3f829c1 1707 path = XNEWVEC (char, dlen + 1 + flen + 1);
8f9b4009 1708 memcpy (path, dir->name, dlen);
4489800d 1709 if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1]))
8f9b4009
NB
1710 path[dlen++] = '/';
1711 memcpy (&path[dlen], fname, flen + 1);
1712
1713 return path;
1714}
c31a6508
ZW
1715
1716/* Read a space delimited string of unlimited length from a stdio
5d8ebbd8 1717 file F. */
c31a6508 1718static char *
6cf87ca4 1719read_filename_string (int ch, FILE *f)
c31a6508
ZW
1720{
1721 char *alloc, *set;
1722 int len;
1723
1724 len = 20;
c3f829c1 1725 set = alloc = XNEWVEC (char, len + 1);
dc65cd60 1726 if (! is_space (ch))
c31a6508
ZW
1727 {
1728 *set++ = ch;
dc65cd60 1729 while ((ch = getc (f)) != EOF && ! is_space (ch))
c31a6508
ZW
1730 {
1731 if (set - alloc == len)
1732 {
1733 len *= 2;
c3f829c1 1734 alloc = XRESIZEVEC (char, alloc, len + 1);
c31a6508
ZW
1735 set = alloc + len / 2;
1736 }
1737 *set++ = ch;
1738 }
1739 }
1740 *set = '\0';
1741 ungetc (ch, f);
1742 return alloc;
1743}
1744
8f9b4009
NB
1745/* Read the file name map file for DIR. */
1746static void
1747read_name_map (cpp_dir *dir)
c31a6508 1748{
8f9b4009 1749 static const char FILE_NAME_MAP_FILE[] = "header.gcc";
c31a6508
ZW
1750 char *name;
1751 FILE *f;
8f9b4009
NB
1752 size_t len, count = 0, room = 9;
1753
1754 len = dir->len;
c3f829c1 1755 name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
8f9b4009 1756 memcpy (name, dir->name, len);
4489800d 1757 if (len && !IS_DIR_SEPARATOR (name[len - 1]))
8f9b4009
NB
1758 name[len++] = '/';
1759 strcpy (name + len, FILE_NAME_MAP_FILE);
c31a6508 1760 f = fopen (name, "r");
8767c894 1761
c3f829c1 1762 dir->name_map = XNEWVEC (const char *, room);
8f9b4009 1763
8767c894
NB
1764 /* Silently return NULL if we cannot open. */
1765 if (f)
c31a6508
ZW
1766 {
1767 int ch;
c31a6508
ZW
1768
1769 while ((ch = getc (f)) != EOF)
1770 {
8f9b4009 1771 char *to;
c31a6508 1772
dc65cd60 1773 if (is_space (ch))
c31a6508 1774 continue;
8f9b4009
NB
1775
1776 if (count + 2 > room)
1777 {
1778 room += 8;
c3f829c1 1779 dir->name_map = XRESIZEVEC (const char *, dir->name_map, room);
8f9b4009
NB
1780 }
1781
1782 dir->name_map[count] = read_filename_string (ch, f);
dc65cd60 1783 while ((ch = getc (f)) != EOF && is_hspace (ch))
c31a6508 1784 ;
c31a6508 1785
8f9b4009 1786 to = read_filename_string (ch, f);
3dce1408 1787 if (IS_ABSOLUTE_PATH (to))
8f9b4009 1788 dir->name_map[count + 1] = to;
c31a6508
ZW
1789 else
1790 {
8f9b4009 1791 dir->name_map[count + 1] = append_file_to_dir (to, dir);
c31a6508 1792 free (to);
df383483 1793 }
c31a6508 1794
8f9b4009 1795 count += 2;
c31a6508
ZW
1796 while ((ch = getc (f)) != '\n')
1797 if (ch == EOF)
1798 break;
1799 }
8f9b4009 1800
c31a6508
ZW
1801 fclose (f);
1802 }
df383483 1803
8f9b4009
NB
1804 /* Terminate the list of maps. */
1805 dir->name_map[count] = NULL;
df383483 1806}
c31a6508 1807
8f9b4009
NB
1808/* Remap a FILE's name based on the file_name_map, if any, for
1809 FILE->dir. If the file name has any directory separators,
1810 recursively check those directories too. */
c31a6508 1811static char *
8f9b4009 1812remap_filename (cpp_reader *pfile, _cpp_file *file)
c31a6508 1813{
8f9b4009 1814 const char *fname, *p;
58f30963 1815 char *new_dir, *p3;
8f9b4009
NB
1816 cpp_dir *dir;
1817 size_t index, len;
8767c894 1818
8f9b4009
NB
1819 dir = file->dir;
1820 fname = file->name;
df383483 1821
8f9b4009
NB
1822 for (;;)
1823 {
1824 if (!dir->name_map)
1825 read_name_map (dir);
c31a6508 1826
8f9b4009 1827 for (index = 0; dir->name_map[index]; index += 2)
4489800d 1828 if (!filename_cmp (dir->name_map[index], fname))
8f9b4009 1829 return xstrdup (dir->name_map[index + 1]);
4489800d
KT
1830 if (IS_ABSOLUTE_PATH (fname))
1831 return NULL;
8f9b4009 1832 p = strchr (fname, '/');
4489800d
KT
1833#ifdef HAVE_DOS_BASED_FILE_SYSTEM
1834 {
3fe3efe5 1835 const char *p2 = strchr (fname, '\\');
711f56ad 1836 if (!p || (p2 && p > p2))
4489800d
KT
1837 p = p2;
1838 }
1839#endif
8f9b4009
NB
1840 if (!p || p == fname)
1841 return NULL;
f9200da2 1842
8f9b4009 1843 len = dir->len + (p - fname + 1);
58f30963
AP
1844 new_dir = XNEWVEC (char, len + 2);
1845 p3 = new_dir + dir->len;
8f9b4009 1846 memcpy (new_dir, dir->name, dir->len);
58f30963
AP
1847 if (dir->len && !IS_DIR_SEPARATOR (dir->name[dir->len - 1]))
1848 {
1849 *p3++ = '/';
1850 len++;
1851 }
1852 memcpy (p3, fname, p - fname + 1);
8f9b4009 1853 new_dir[len] = '\0';
df383483 1854
8f9b4009
NB
1855 dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1856 fname = p + 1;
0b3d776a 1857 }
0b3d776a 1858}
986b1f13 1859
8f9b4009
NB
1860/* Returns true if PCHNAME is a valid PCH file for FILE. */
1861static bool
1862validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
986b1f13 1863{
8f9b4009 1864 const char *saved_path = file->path;
230fcd32 1865 bool valid = false;
986b1f13 1866
8f9b4009
NB
1867 file->path = pchname;
1868 if (open_file (file))
986b1f13 1869 {
230fcd32 1870 valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
8f9b4009 1871
230fcd32 1872 if (!valid)
986b1f13 1873 {
8f9b4009
NB
1874 close (file->fd);
1875 file->fd = -1;
986b1f13 1876 }
986b1f13 1877
8f9b4009 1878 if (CPP_OPTION (pfile, print_include_names))
986b1f13 1879 {
8f9b4009 1880 unsigned int i;
54020b29 1881 for (i = 1; i < pfile->line_table->depth; i++)
8f9b4009
NB
1882 putc ('.', stderr);
1883 fprintf (stderr, "%c %s\n",
230fcd32 1884 valid ? '!' : 'x', pchname);
986b1f13 1885 }
986b1f13
NB
1886 }
1887
8f9b4009 1888 file->path = saved_path;
230fcd32 1889 return valid;
986b1f13 1890}
94d1613b
MS
1891
1892/* Get the path associated with the _cpp_file F. The path includes
1893 the base name from the include directive and the directory it was
1894 found in via the search path. */
1895
1896const char *
1897cpp_get_path (struct _cpp_file *f)
1898{
1899 return f->path;
1900}
1901
e3c287c9
MS
1902/* Get the directory associated with the _cpp_file F. */
1903
1904cpp_dir *
1905cpp_get_dir (struct _cpp_file *f)
1906{
1907 return f->dir;
1908}
1909
94d1613b
MS
1910/* Get the cpp_buffer currently associated with the cpp_reader
1911 PFILE. */
1912
1913cpp_buffer *
1914cpp_get_buffer (cpp_reader *pfile)
1915{
1916 return pfile->buffer;
1917}
1918
1919/* Get the _cpp_file associated with the cpp_buffer B. */
1920
1921_cpp_file *
1922cpp_get_file (cpp_buffer *b)
1923{
1924 return b->file;
1925}
1926
1927/* Get the previous cpp_buffer given a cpp_buffer B. The previous
1928 buffer is the buffer that included the given buffer. */
1929
1930cpp_buffer *
1931cpp_get_prev (cpp_buffer *b)
1932{
1933 return b->prev;
1934}
73e61092 1935\f
1ae58c30 1936/* This data structure holds the list of header files that were seen
73e61092
GK
1937 while the PCH was being built. The 'entries' field is kept sorted
1938 in memcmp() order; yes, this means that on little-endian systems,
1939 it's sorted initially by the least-significant byte of 'size', but
1940 that's OK. The code does rely on having entries with the same size
1941 next to each other. */
1942
c3f829c1
GDR
1943struct pchf_entry {
1944 /* The size of this file. This is used to save running a MD5 checksum
1945 if the sizes don't match. */
1946 off_t size;
1947 /* The MD5 checksum of this file. */
1948 unsigned char sum[16];
1949 /* Is this file to be included only once? */
1950 bool once_only;
1951};
1952
73e61092
GK
1953struct pchf_data {
1954 /* Number of pchf_entry structures. */
1955 size_t count;
1956
1957 /* Are there any values with once_only set?
1958 This is used as an optimisation, it means we don't have to search
1959 the structure if we're processing a regular #include. */
1960 bool have_once_only;
16dd5cfe 1961
c3f829c1 1962 struct pchf_entry entries[1];
73e61092
GK
1963};
1964
1965static struct pchf_data *pchf;
1966
ecddfb39
MS
1967/* A qsort ordering function for pchf_entry structures. */
1968
1969static int
1970pchf_save_compare (const void *e1, const void *e2)
73e61092 1971{
ecddfb39
MS
1972 return memcmp (e1, e2, sizeof (struct pchf_entry));
1973}
73e61092 1974
ecddfb39 1975/* Create and write to F a pchf_data structure. */
73e61092 1976
ecddfb39
MS
1977bool
1978_cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
73e61092 1979{
ecddfb39
MS
1980 size_t count = 0;
1981 struct pchf_data *result;
1982 size_t result_size;
1983 _cpp_file *f;
3b8af25b 1984 bool ret;
73e61092 1985
ecddfb39
MS
1986 for (f = pfile->all_files; f; f = f->next_file)
1987 ++count;
1988
1989 result_size = (sizeof (struct pchf_data)
1990 + sizeof (struct pchf_entry) * (count - 1));
c3f829c1 1991 result = XCNEWVAR (struct pchf_data, result_size);
ecddfb39
MS
1992
1993 result->count = 0;
1994 result->have_once_only = false;
1995
1996 for (f = pfile->all_files; f; f = f->next_file)
73e61092 1997 {
ecddfb39 1998 size_t count;
73e61092
GK
1999
2000 /* This should probably never happen, since if a read error occurred
2001 the PCH file shouldn't be written... */
2002 if (f->dont_read || f->err_no)
ecddfb39
MS
2003 continue;
2004
2005 if (f->stack_count == 0)
2006 continue;
16dd5cfe 2007
ecddfb39
MS
2008 count = result->count++;
2009
2010 result->entries[count].once_only = f->once_only;
97d62313 2011 /* |= is avoided in the next line because of an HP C compiler bug */
ecddfb39 2012 result->have_once_only = result->have_once_only | f->once_only;
73e61092 2013 if (f->buffer_valid)
ecddfb39
MS
2014 md5_buffer ((const char *)f->buffer,
2015 f->st.st_size, result->entries[count].sum);
73e61092
GK
2016 else
2017 {
2018 FILE *ff;
2019 int oldfd = f->fd;
2020
2021 if (!open_file (f))
2022 {
ac81cf0b 2023 open_file_failed (pfile, f, 0, 0);
55e7f907 2024 free (result);
ecddfb39 2025 return false;
73e61092
GK
2026 }
2027 ff = fdopen (f->fd, "rb");
ecddfb39 2028 md5_stream (ff, result->entries[count].sum);
73e61092
GK
2029 fclose (ff);
2030 f->fd = oldfd;
2031 }
ecddfb39 2032 result->entries[count].size = f->st.st_size;
73e61092 2033 }
73e61092
GK
2034
2035 result_size = (sizeof (struct pchf_data)
2036 + sizeof (struct pchf_entry) * (result->count - 1));
16dd5cfe 2037
73e61092
GK
2038 qsort (result->entries, result->count, sizeof (struct pchf_entry),
2039 pchf_save_compare);
2040
3b8af25b
JJ
2041 ret = fwrite (result, result_size, 1, fp) == 1;
2042 free (result);
2043 return ret;
73e61092
GK
2044}
2045
2046/* Read the pchf_data structure from F. */
2047
2048bool
2049_cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
2050{
2051 struct pchf_data d;
16dd5cfe 2052
73e61092
GK
2053 if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
2054 != 1)
2055 return false;
16dd5cfe 2056
c3f829c1 2057 pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data)
73e61092
GK
2058 + sizeof (struct pchf_entry) * (d.count - 1));
2059 memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
2060 if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
2061 != d.count)
2062 return false;
2063 return true;
2064}
2065
2066/* The parameters for pchf_compare. */
2067
2068struct pchf_compare_data
2069{
2070 /* The size of the file we're looking for. */
2071 off_t size;
2072
2073 /* The MD5 checksum of the file, if it's been computed. */
2074 unsigned char sum[16];
2075
2076 /* Is SUM valid? */
2077 bool sum_computed;
2078
2079 /* Do we need to worry about entries that don't have ONCE_ONLY set? */
2080 bool check_included;
16dd5cfe 2081
73e61092
GK
2082 /* The file that we're searching for. */
2083 _cpp_file *f;
2084};
2085
2086/* bsearch comparison function; look for D_P in E_P. */
2087
2088static int
2089pchf_compare (const void *d_p, const void *e_p)
2090{
2091 const struct pchf_entry *e = (const struct pchf_entry *)e_p;
2092 struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
2093 int result;
16dd5cfe 2094
73e61092
GK
2095 result = memcmp (&d->size, &e->size, sizeof (off_t));
2096 if (result != 0)
2097 return result;
16dd5cfe 2098
73e61092
GK
2099 if (! d->sum_computed)
2100 {
2101 _cpp_file *const f = d->f;
16dd5cfe 2102
73e61092
GK
2103 md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
2104 d->sum_computed = true;
2105 }
2106
2107 result = memcmp (d->sum, e->sum, 16);
2108 if (result != 0)
2109 return result;
2110
2111 if (d->check_included || e->once_only)
2112 return 0;
2113 else
2114 return 1;
2115}
2116
16dd5cfe 2117/* Check that F is not in a list read from a PCH file (if any).
73e61092
GK
2118 Assumes that f->buffer_valid is true. Return TRUE if the file
2119 should not be read. */
2120
2121static bool
2122check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
2123 _cpp_file *f,
2124 bool check_included)
2125{
2126 struct pchf_compare_data d;
16dd5cfe 2127
73e61092
GK
2128 if (pchf == NULL
2129 || (! check_included && ! pchf->have_once_only))
2130 return false;
2131
2132 d.size = f->st.st_size;
2133 d.sum_computed = false;
2134 d.f = f;
2135 d.check_included = check_included;
2136 return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
2137 pchf_compare) != NULL;
2138}
a15f7cb8
ESR
2139
2140/* Return true if the file FNAME is found in the appropriate include file path
2141 as indicated by ANGLE_BRACKETS. */
2142
2143bool
2144_cpp_has_header (cpp_reader *pfile, const char *fname, int angle_brackets,
2145 enum include_type type)
2146{
2147 cpp_dir *start_dir = search_path_head (pfile, fname, angle_brackets, type);
ad1a3914 2148 _cpp_file *file = _cpp_find_file (pfile, fname, start_dir, angle_brackets,
4623a6f2 2149 _cpp_FFK_HAS_INCLUDE, 0);
a15f7cb8
ESR
2150 return file->err_no != ENOENT;
2151}
2152
3ac6b5cf
LH
2153/* Read a file and convert to input charset, the same as if it were being read
2154 by a cpp_reader. */
2155
2156cpp_converted_source
2157cpp_get_converted_source (const char *fname, const char *input_charset)
2158{
2159 cpp_converted_source res = {};
2160 _cpp_file file = {};
2161 file.fd = -1;
2162 file.name = lbasename (fname);
2163 file.path = fname;
2164 if (!open_file (&file))
2165 return res;
2166 const bool ok = read_file_guts (NULL, &file, 0, input_charset);
2167 close (file.fd);
2168 if (!ok)
2169 return res;
2170 res.to_free = (char *) file.buffer_start;
2171 res.data = (char *) file.buffer;
2172 res.len = file.st.st_size;
2173 return res;
2174}