Daily bump.
[official-gcc.git] / libcpp / files.cc
blob78f56e30bdeb89a56d651f798cf05ace4e2a1987
1 /* Part of CPP library. File handling.
2 Copyright (C) 1986-2024 Free Software Foundation, Inc.
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
7 Reimplemented, Neil Booth, Jul 2003
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 3, or (at your option) any
12 later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 #include "config.h"
24 #include "system.h"
25 #include "cpplib.h"
26 #include "internal.h"
27 #include "mkdeps.h"
28 #include "obstack.h"
29 #include "hashtab.h"
30 #include "md5.h"
31 #include <dirent.h>
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
40 #endif
42 #ifdef __DJGPP__
43 #include <io.h>
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
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
53 cpp_file_hash_entry; at present no reference count is kept. */
54 struct _cpp_file
56 /* Filename as given to #include or command line switch. */
57 const char *name;
59 /* The full path used to find the file. */
60 const char *path;
62 /* The full path of the pch file. */
63 const char *pchname;
65 /* The file's path with the basename stripped. NULL if it hasn't
66 been calculated yet. */
67 const char *dir_name;
69 /* Chain through all files. */
70 struct _cpp_file *next_file;
72 /* The contents of NAME after calling read_file(). */
73 const uchar *buffer;
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;
79 /* The macro, if any, preventing re-inclusion. */
80 const cpp_hashnode *cmacro;
82 /* The directory in the search path where FILE was found. Used for
83 #include_next and determining whether a header is a system
84 header. */
85 cpp_dir *dir;
87 /* As filled in by stat(2) for the file. */
88 struct stat st;
90 /* File descriptor. Invalid if -1, otherwise open. */
91 int fd;
93 /* Zero if this file was successfully opened and stat()-ed,
94 otherwise errno obtained from failure. */
95 int err_no;
97 /* Number of times the file has been stacked for preprocessing. */
98 unsigned short stack_count;
100 /* If opened with #import or contains #pragma once. */
101 bool once_only : 1;
103 /* If read() failed before. */
104 bool dont_read : 1;
106 /* If BUFFER above contains the true contents of the file. */
107 bool buffer_valid : 1;
109 /* If this file is implicitly preincluded. */
110 bool implicit_preinclude : 1;
112 /* Set if a header wasn't found with __has_include or __has_include_next
113 and error should be emitted if it is included normally. */
114 bool deferred_error : 1;
116 /* > 0: Known C++ Module header unit, <0: known not. ==0, unknown */
117 int header_unit : 2;
120 /* A singly-linked list for all searches for a given file name, with
121 its head pointed to by a slot in FILE_HASH. The file name is what
122 appeared between the quotes in a #include directive; it can be
123 determined implicitly from the hash table location or explicitly
124 from FILE->name.
126 FILE is a structure containing details about the file that was
127 found with that search, or details of how the search failed.
129 START_DIR is the starting location of the search in the include
130 chain. The current directories for "" includes are also hashed in
131 the hash table and therefore unique. Files that are looked up
132 without using a search path, such as absolute filenames and file
133 names from the command line share a special starting directory so
134 they don't cause cache hits with normal include-chain lookups.
136 If START_DIR is NULL then the entry is for a directory, not a file,
137 and the directory is in DIR. Since the starting point in a file
138 lookup chain is never NULL, this means that simple pointer
139 comparisons against START_DIR can be made to determine cache hits
140 in file lookups.
142 If a cache lookup fails because of e.g. an extra "./" in the path,
143 then nothing will break. It is just less efficient as CPP will
144 have to do more work re-preprocessing the file, and/or comparing
145 its contents against earlier once-only files.
147 struct cpp_file_hash_entry
149 struct cpp_file_hash_entry *next;
150 cpp_dir *start_dir;
151 location_t location;
152 union
154 _cpp_file *file;
155 cpp_dir *dir;
156 } u;
159 /* Number of entries to put in a cpp_file_hash_entry pool. */
160 #define FILE_HASH_POOL_SIZE 127
162 /* A file hash entry pool. We allocate cpp_file_hash_entry object from
163 one of these. */
164 struct file_hash_entry_pool
166 /* Number of entries used from this pool. */
167 unsigned int file_hash_entries_used;
168 /* Next pool in the chain; used when freeing. */
169 struct file_hash_entry_pool *next;
170 /* The memory pool. */
171 struct cpp_file_hash_entry pool[FILE_HASH_POOL_SIZE];
174 static bool open_file (_cpp_file *file);
175 static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
176 bool *invalid_pch);
177 static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
178 bool *invalid_pch, location_t loc);
179 static bool read_file_guts (cpp_reader *pfile, _cpp_file *file,
180 location_t loc, const char *input_charset);
181 static bool read_file (cpp_reader *pfile, _cpp_file *file,
182 location_t loc);
183 static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
184 int angle_brackets, enum include_type,
185 bool suppress_diagnostic = false);
186 static const char *dir_name_of_file (_cpp_file *file);
187 static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int,
188 location_t);
189 static struct cpp_file_hash_entry *search_cache (struct cpp_file_hash_entry *head,
190 const cpp_dir *start_dir);
191 static _cpp_file *make_cpp_file (cpp_dir *, const char *fname);
192 static void destroy_cpp_file (_cpp_file *);
193 static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
194 static void allocate_file_hash_entries (cpp_reader *pfile);
195 static struct cpp_file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
196 static int report_missing_guard (void **slot, void *b);
197 static hashval_t file_hash_hash (const void *p);
198 static int file_hash_eq (const void *p, const void *q);
199 static char *read_filename_string (int ch, FILE *f);
200 static void read_name_map (cpp_dir *dir);
201 static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
202 static char *append_file_to_dir (const char *fname, cpp_dir *dir);
203 static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
204 static int pchf_save_compare (const void *e1, const void *e2);
205 static int pchf_compare (const void *d_p, const void *e_p);
206 static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
208 /* Given a filename in FILE->PATH, with the empty string interpreted
209 as <stdin>, open it.
211 On success FILE contains an open file descriptor and stat
212 information for the file. On failure the file descriptor is -1 and
213 the appropriate errno is also stored in FILE. Returns TRUE iff
214 successful.
216 We used to open files in nonblocking mode, but that caused more
217 problems than it solved. Do take care not to acquire a controlling
218 terminal by mistake (this can't happen on sane systems, but
219 paranoia is a virtue).
221 Use the three-argument form of open even though we aren't
222 specifying O_CREAT, to defend against broken system headers.
224 O_BINARY tells some runtime libraries (notably DJGPP) not to do
225 newline translation; we can handle DOS line breaks just fine
226 ourselves. */
227 static bool
228 open_file (_cpp_file *file)
230 if (file->path[0] == '\0')
232 file->fd = 0;
233 set_stdin_to_binary_mode ();
235 else
236 file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
238 if (file->fd != -1)
240 if (fstat (file->fd, &file->st) == 0)
242 if (!S_ISDIR (file->st.st_mode))
244 file->err_no = 0;
245 return true;
248 /* Ignore a directory and continue the search. The file we're
249 looking for may be elsewhere in the search path. */
250 errno = ENOENT;
253 close (file->fd);
254 file->fd = -1;
256 #if defined(_WIN32) && !defined(__CYGWIN__)
257 else if (errno == EACCES)
259 /* On most UNIX systems, open succeeds on a directory. Above,
260 we check if we have opened a directory and if so, set errno
261 to ENOENT. However, on Windows, opening a directory
262 fails with EACCES. We want to return ENOENT in that
263 case too. */
264 if (stat (file->path, &file->st) == 0
265 && S_ISDIR (file->st.st_mode))
266 errno = ENOENT;
267 else
268 /* The call to stat may have reset errno. */
269 errno = EACCES;
271 #endif
272 else if (errno == ENOTDIR)
273 errno = ENOENT;
275 file->err_no = errno;
277 return false;
280 /* Temporary PCH intercept of opening a file. Try to find a PCH file
281 based on FILE->name and FILE->dir, and test those found for
282 validity using PFILE->cb.valid_pch. Return true iff a valid file is
283 found. Set *INVALID_PCH if a PCH file is found but wasn't valid. */
285 static bool
286 pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
288 static const char extension[] = ".gch";
289 const char *path = file->path;
290 size_t len, flen;
291 char *pchname;
292 struct stat st;
293 bool valid = false;
295 /* No PCH on <stdin> or if not requested. */
296 if (file->name[0] == '\0' || !pfile->cb.valid_pch)
297 return false;
299 /* If the file is not included as first include from either the toplevel
300 file or the command-line it is not a valid use of PCH. */
301 for (_cpp_file *f = pfile->all_files; f; f = f->next_file)
302 if (f->implicit_preinclude)
303 continue;
304 else if (pfile->main_file == f)
305 break;
306 else
307 return false;
309 flen = strlen (path);
310 len = flen + sizeof (extension);
311 pchname = XNEWVEC (char, len);
312 memcpy (pchname, path, flen);
313 memcpy (pchname + flen, extension, sizeof (extension));
315 if (stat (pchname, &st) == 0)
317 DIR *pchdir;
318 struct dirent *d;
319 size_t dlen, plen = len;
321 if (!S_ISDIR (st.st_mode))
322 valid = validate_pch (pfile, file, pchname);
323 else if ((pchdir = opendir (pchname)) != NULL)
325 pchname[plen - 1] = '/';
326 while ((d = readdir (pchdir)) != NULL)
328 dlen = strlen (d->d_name) + 1;
329 if ((strcmp (d->d_name, ".") == 0)
330 || (strcmp (d->d_name, "..") == 0))
331 continue;
332 if (dlen + plen > len)
334 len += dlen + 64;
335 pchname = XRESIZEVEC (char, pchname, len);
337 memcpy (pchname + plen, d->d_name, dlen);
338 valid = validate_pch (pfile, file, pchname);
339 if (valid)
340 break;
342 closedir (pchdir);
344 if (!valid)
345 *invalid_pch = true;
348 if (valid)
349 file->pchname = pchname;
350 else
351 free (pchname);
353 return valid;
356 /* Canonicalize the path to FILE. Return the canonical form if it is
357 shorter, otherwise return NULL. This function does NOT free the
358 memory pointed by FILE. */
360 static char *
361 maybe_shorter_path (const char * file)
363 char * file2 = lrealpath (file);
364 if (file2 && strlen (file2) < strlen (file))
366 return file2;
368 else
370 free (file2);
371 return NULL;
375 /* Try to open the path FILE->name appended to FILE->dir. This is
376 where remap and PCH intercept the file lookup process. Return true
377 if the file was found, whether or not the open was successful.
378 Set *INVALID_PCH to true if a PCH file is found but wasn't valid.
379 Use LOC when emitting any diagnostics. */
381 static bool
382 find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch,
383 location_t loc)
385 char *path;
387 if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
389 else
390 if (file->dir->construct)
391 path = file->dir->construct (file->name, file->dir);
392 else
393 path = append_file_to_dir (file->name, file->dir);
395 if (path)
397 hashval_t hv;
398 char *copy;
399 void **pp;
401 /* We try to canonicalize system headers. For DOS based file
402 * system, we always try to shorten non-system headers, as DOS
403 * has a tighter constraint on max path length. */
404 if ((CPP_OPTION (pfile, canonical_system_headers) && file->dir->sysp)
405 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
406 || !file->dir->sysp
407 #endif
410 char * canonical_path = maybe_shorter_path (path);
411 if (canonical_path)
413 /* The canonical path was newly allocated. Let's free the
414 non-canonical one. */
415 free (path);
416 path = canonical_path;
420 hv = htab_hash_string (path);
421 if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL)
423 file->err_no = ENOENT;
424 return false;
427 file->path = path;
428 if (pch_open_file (pfile, file, invalid_pch))
429 return true;
431 if (open_file (file))
432 return true;
434 if (file->err_no != ENOENT)
436 open_file_failed (pfile, file, 0, loc);
437 return true;
440 /* We copy the path name onto an obstack partly so that we don't
441 leak the memory, but mostly so that we don't fragment the
442 heap. */
443 copy = (char *) obstack_copy0 (&pfile->nonexistent_file_ob, path,
444 strlen (path));
445 free (path);
446 pp = htab_find_slot_with_hash (pfile->nonexistent_file_hash,
447 copy, hv, INSERT);
448 *pp = copy;
450 file->path = file->name;
452 else
454 file->err_no = ENOENT;
455 file->path = NULL;
458 return false;
461 /* Return true iff the missing_header callback found the given HEADER. */
462 static bool
463 search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file)
465 missing_header_cb func = pfile->cb.missing_header;
467 /* When the regular search path doesn't work, try context dependent
468 headers search paths. */
469 if (func
470 && file->dir == NULL)
472 if ((file->path = func (pfile, header, &file->dir)) != NULL)
474 if (open_file (file))
475 return true;
476 free ((void *)file->path);
478 file->path = file->name;
481 return false;
484 bool
485 _cpp_find_failed (_cpp_file *file)
487 return file->err_no != 0;
490 /* Given a filename FNAME search for such a file in the include path
491 starting from START_DIR. If FNAME is the empty string it is
492 interpreted as STDIN if START_DIR is PFILE->no_search_path.
494 If the file is not found in the file cache fall back to the O/S and
495 add the result to our cache.
497 If the file was not found in the filesystem, or there was an error
498 opening it, then ERR_NO is nonzero and FD is -1. If the file was
499 found, then ERR_NO is zero and FD could be -1 or an open file
500 descriptor. FD can be -1 if the file was found in the cache and
501 had previously been closed. To open it again pass the return value
502 to open_file().
504 If KIND is _cpp_FFK_PRE_INCLUDE then it is OK for the file to be
505 missing. If present, it is OK for a precompiled header to be
506 included after it.
508 Use LOC as the location for any errors. */
510 _cpp_file *
511 _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir,
512 int angle_brackets, _cpp_find_file_kind kind, location_t loc)
514 bool invalid_pch = false;
515 bool saw_bracket_include = false;
516 bool saw_quote_include = false;
517 struct cpp_dir *found_in_cache = NULL;
519 /* Ensure we get no confusion between cached files and directories. */
520 if (start_dir == NULL)
521 cpp_error_at (pfile, CPP_DL_ICE, loc, "NULL directory in find_file");
523 void **hash_slot
524 = htab_find_slot_with_hash (pfile->file_hash, fname,
525 htab_hash_string (fname), INSERT);
527 /* First check the cache before we resort to memory allocation. */
528 cpp_file_hash_entry *entry
529 = search_cache ((struct cpp_file_hash_entry *) *hash_slot, start_dir);
530 if (entry)
532 if (entry->u.file->deferred_error && kind == _cpp_FFK_NORMAL)
534 open_file_failed (pfile, entry->u.file, angle_brackets, loc);
535 entry->u.file->deferred_error = false;
537 return entry->u.file;
540 _cpp_file *file = make_cpp_file (start_dir, fname);
541 file->implicit_preinclude
542 = (kind == _cpp_FFK_PRE_INCLUDE
543 || (pfile->buffer && pfile->buffer->file->implicit_preinclude));
545 if (kind == _cpp_FFK_FAKE)
546 file->dont_read = true;
547 else
548 /* Try each path in the include chain. */
549 for (;;)
551 if (find_file_in_dir (pfile, file, &invalid_pch, loc))
552 break;
554 file->dir = file->dir->next;
555 if (file->dir == NULL)
557 if (search_path_exhausted (pfile, fname, file))
559 /* Although this file must not go in the cache,
560 because the file found might depend on things (like
561 the current file) that aren't represented in the
562 cache, it still has to go in the list of all files
563 so that #import works. */
564 file->next_file = pfile->all_files;
565 pfile->all_files = file;
566 if (*hash_slot == NULL)
568 /* If *hash_slot is NULL, the above
569 htab_find_slot_with_hash call just created the
570 slot, but we aren't going to store there anything
571 of use, so need to remove the newly created entry.
572 htab_clear_slot requires that it is non-NULL, so
573 store some non-NULL but valid pointer there,
574 htab_clear_slot will immediately overwrite it. */
575 *hash_slot = file;
576 htab_clear_slot (pfile->file_hash, hash_slot);
578 return file;
581 if (invalid_pch)
583 cpp_error (pfile, CPP_DL_ERROR,
584 "one or more PCH files were found,"
585 " but they were invalid");
586 if (!cpp_get_options (pfile)->warn_invalid_pch)
587 cpp_error (pfile, CPP_DL_NOTE,
588 "use -Winvalid-pch for more information");
591 if (kind == _cpp_FFK_PRE_INCLUDE)
593 free ((char *) file->name);
594 free (file);
595 if (*hash_slot == NULL)
597 /* See comment on the above htab_clear_slot call. */
598 *hash_slot = &hash_slot;
599 htab_clear_slot (pfile->file_hash, hash_slot);
601 return NULL;
604 if (kind != _cpp_FFK_HAS_INCLUDE)
605 open_file_failed (pfile, file, angle_brackets, loc);
606 else
607 file->deferred_error = true;
608 break;
611 /* Only check the cache for the starting location (done above)
612 and the quote and bracket chain heads because there are no
613 other possible starting points for searches. */
614 if (file->dir == pfile->bracket_include)
615 saw_bracket_include = true;
616 else if (file->dir == pfile->quote_include)
617 saw_quote_include = true;
618 else
619 continue;
621 entry
622 = search_cache ((struct cpp_file_hash_entry *) *hash_slot, file->dir);
623 if (entry)
625 found_in_cache = file->dir;
626 break;
630 if (entry)
632 /* Cache for START_DIR too, sharing the _cpp_file structure. */
633 free ((char *) file->name);
634 free (file);
635 file = entry->u.file;
637 else
639 /* This is a new file; put it in the list. */
640 file->next_file = pfile->all_files;
641 pfile->all_files = file;
644 /* Store this new result in the hash table. */
645 entry = new_file_hash_entry (pfile);
646 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
647 entry->start_dir = start_dir;
648 entry->location = loc;
649 entry->u.file = file;
650 *hash_slot = (void *) entry;
652 /* If we passed the quote or bracket chain heads, cache them also.
653 This speeds up processing if there are lots of -I options. */
654 if (saw_bracket_include
655 && pfile->bracket_include != start_dir
656 && found_in_cache != pfile->bracket_include)
658 entry = new_file_hash_entry (pfile);
659 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
660 entry->start_dir = pfile->bracket_include;
661 entry->location = loc;
662 entry->u.file = file;
663 *hash_slot = (void *) entry;
665 if (saw_quote_include
666 && pfile->quote_include != start_dir
667 && found_in_cache != pfile->quote_include)
669 entry = new_file_hash_entry (pfile);
670 entry->next = (struct cpp_file_hash_entry *) *hash_slot;
671 entry->start_dir = pfile->quote_include;
672 entry->location = loc;
673 entry->u.file = file;
674 *hash_slot = (void *) entry;
677 return file;
680 /* Read a file into FILE->buffer, returning true on success.
682 If FILE->fd is something weird, like a block device, we don't want
683 to read it at all. Don't even try to figure out what something is,
684 except for plain files and block devices, since there is no
685 reliable portable way of doing this.
687 Use LOC for any diagnostics.
689 PFILE may be NULL. In this case, no diagnostics are issued.
691 FIXME: Flush file cache and try again if we run out of memory. */
692 static bool
693 read_file_guts (cpp_reader *pfile, _cpp_file *file, location_t loc,
694 const char *input_charset)
696 ssize_t size, total, count;
697 uchar *buf;
698 bool regular;
700 if (S_ISBLK (file->st.st_mode))
702 if (pfile)
703 cpp_error_at (pfile, CPP_DL_ERROR, loc,
704 "%s is a block device", file->path);
705 return false;
708 regular = S_ISREG (file->st.st_mode) != 0;
709 if (regular)
711 /* off_t might have a wider range than ssize_t - in other words,
712 the max size of a file might be bigger than the address
713 space. We can't handle a file that large. (Anyone with
714 a single source file bigger than 2GB needs to rethink
715 their coding style.) Some systems (e.g. AIX 4.1) define
716 SSIZE_MAX to be much smaller than the actual range of the
717 type. Use INTTYPE_MAXIMUM unconditionally to ensure this
718 does not bite us. */
719 if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
721 if (pfile)
722 cpp_error_at (pfile, CPP_DL_ERROR, loc,
723 "%s is too large", file->path);
724 return false;
727 size = file->st.st_size;
729 else
730 /* 8 kilobytes is a sensible starting size. It ought to be bigger
731 than the kernel pipe buffer, and it's definitely bigger than
732 the majority of C source files. */
733 size = 8 * 1024;
735 /* The + 16 here is space for the final '\n' and 15 bytes of padding,
736 used to quiet warnings from valgrind or Address Sanitizer, when the
737 optimized lexer accesses aligned 16-byte memory chunks, including
738 the bytes after the malloced, area, and stops lexing on '\n'. */
739 buf = XNEWVEC (uchar, size + 16);
740 total = 0;
741 while ((count = read (file->fd, buf + total, size - total)) > 0)
743 total += count;
745 if (total == size)
747 if (regular)
748 break;
749 size *= 2;
750 buf = XRESIZEVEC (uchar, buf, size + 16);
754 if (count < 0)
756 if (pfile)
757 cpp_errno_filename (pfile, CPP_DL_ERROR, file->path, loc);
758 free (buf);
759 return false;
762 if (pfile && regular && total != size && STAT_SIZE_RELIABLE (file->st))
763 cpp_error_at (pfile, CPP_DL_WARNING, loc,
764 "%s is shorter than expected", file->path);
766 file->buffer = _cpp_convert_input (pfile,
767 input_charset,
768 buf, size + 16, total,
769 &file->buffer_start,
770 &file->st.st_size);
771 file->buffer_valid = file->buffer;
772 return file->buffer_valid;
775 /* Convenience wrapper around read_file_guts that opens the file if
776 necessary and closes the file descriptor after reading. FILE must
777 have been passed through find_file() at some stage. Use LOC for
778 any diagnostics. Unlike read_file_guts(), PFILE may not be NULL. */
779 static bool
780 read_file (cpp_reader *pfile, _cpp_file *file, location_t loc)
782 /* If we already have its contents in memory, succeed immediately. */
783 if (file->buffer_valid)
784 return true;
786 /* If an earlier read failed for some reason don't try again. */
787 if (file->dont_read || file->err_no)
788 return false;
790 if (file->fd == -1 && !open_file (file))
792 open_file_failed (pfile, file, 0, loc);
793 return false;
796 file->dont_read = !read_file_guts (pfile, file, loc,
797 CPP_OPTION (pfile, input_charset));
798 close (file->fd);
799 file->fd = -1;
801 return !file->dont_read;
804 /* Returns TRUE if FILE is already known to be idempotent, and should
805 therefore not be read again. */
806 static bool
807 is_known_idempotent_file (cpp_reader *pfile, _cpp_file *file, bool import)
809 /* Skip once-only files. */
810 if (file->once_only)
811 return true;
813 /* We must mark the file once-only if #import now, before header
814 guard checks. Otherwise, undefining the header guard might
815 cause the file to be re-stacked. */
816 if (import)
818 _cpp_mark_file_once_only (pfile, file);
820 /* Don't stack files that have been stacked before. */
821 if (file->stack_count)
822 return true;
825 /* Skip if the file had a header guard and the macro is defined.
826 PCH relies on this appearing before the PCH handler below. */
827 if (file->cmacro && cpp_macro_p (file->cmacro))
828 return true;
830 /* Handle PCH files immediately; don't stack them. */
831 if (file->pchname)
833 pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
834 file->fd = -1;
835 free ((void *) file->pchname);
836 file->pchname = NULL;
837 return true;
840 return false;
843 /* Return TRUE if file has unique contents, so we should read process
844 it. The file's contents must already have been read. */
846 static bool
847 has_unique_contents (cpp_reader *pfile, _cpp_file *file, bool import,
848 location_t loc)
850 /* Check the file against the PCH file. This is done before
851 checking against files we've already seen, since it may save on
852 I/O. */
853 if (check_file_against_entries (pfile, file, import))
855 /* If this isn't a #import, but yet we can't include the file,
856 that means that it was #import-ed in the PCH file,
857 so we can never include it again. */
858 if (! import)
859 _cpp_mark_file_once_only (pfile, file);
860 return false;
863 /* Now we've read the file's contents, we can stack it if there
864 are no once-only files. */
865 if (!pfile->seen_once_only)
866 return true;
868 /* We may have read the file under a different name. Look
869 for likely candidates and compare file contents to be sure. */
870 for (_cpp_file *f = pfile->all_files; f; f = f->next_file)
872 if (f == file)
873 continue; /* It'sa me! */
875 if ((import || f->once_only)
876 && f->err_no == 0
877 && f->st.st_mtime == file->st.st_mtime
878 && f->st.st_size == file->st.st_size)
880 _cpp_file *ref_file;
882 if (f->buffer && !f->buffer_valid)
884 /* We already have a buffer but it is not valid, because
885 the file is still stacked. Make a new one. */
886 ref_file = make_cpp_file (f->dir, f->name);
887 ref_file->path = f->path;
889 else
890 /* The file is not stacked anymore. We can reuse it. */
891 ref_file = f;
893 bool same_file_p = (read_file (pfile, ref_file, loc)
894 /* Size might have changed in read_file(). */
895 && ref_file->st.st_size == file->st.st_size
896 && !memcmp (ref_file->buffer, file->buffer,
897 file->st.st_size));
899 if (f->buffer && !f->buffer_valid)
901 ref_file->path = 0;
902 destroy_cpp_file (ref_file);
905 if (same_file_p)
906 /* Already seen under a different name. */
907 return false;
911 return true;
914 /* Place the file referenced by FILE into a new buffer on the buffer
915 stack if possible. Returns true if a buffer is stacked. Use LOC
916 for any diagnostics. */
918 bool
919 _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
920 location_t loc)
922 if (is_known_idempotent_file (pfile, file, type == IT_IMPORT))
923 return false;
925 int sysp = 0;
926 char *buf = nullptr;
928 /* Check C++ module include translation. */
929 if (!file->header_unit && type < IT_HEADER_HWM
930 /* Do not include translate include-next. */
931 && type != IT_INCLUDE_NEXT
932 && pfile->cb.translate_include)
933 buf = (pfile->cb.translate_include
934 (pfile, pfile->line_table, loc, file->path));
936 if (buf)
938 /* We don't increment the line number at the end of a buffer,
939 because we don't usually need that location (we're popping an
940 include file). However in this case we do want to do the
941 increment. So push a writable buffer of two newlines to acheive
942 that. (We also need an extra newline, so this looks like a regular
943 file, which we do that to to make sure we don't fall off the end in the
944 middle of a line. */
945 static uchar newlines[] = "\n\n\n";
946 cpp_push_buffer (pfile, newlines, 2, true);
948 size_t len = strlen (buf);
949 buf[len] = '\n'; /* See above */
950 cpp_buffer *buffer
951 = cpp_push_buffer (pfile, reinterpret_cast<unsigned char *> (buf),
952 len, true);
953 buffer->to_free = buffer->buf;
955 file->header_unit = +1;
956 _cpp_mark_file_once_only (pfile, file);
958 else
960 /* Not a header unit, and we know it. */
961 file->header_unit = -1;
963 if (!read_file (pfile, file, loc))
964 return false;
966 if (!has_unique_contents (pfile, file, type == IT_IMPORT, loc))
967 return false;
969 if (pfile->buffer && file->dir)
970 sysp = MAX (pfile->buffer->sysp, file->dir->sysp);
972 /* Add the file to the dependencies on its first inclusion. */
973 if (CPP_OPTION (pfile, deps.style) > (sysp != 0)
974 && !file->stack_count
975 && file->path[0]
976 && !(pfile->main_file == file
977 && CPP_OPTION (pfile, deps.ignore_main_file)))
978 deps_add_dep (pfile->deps, file->path);
980 /* Clear buffer_valid since _cpp_clean_line messes it up. */
981 file->buffer_valid = false;
982 file->stack_count++;
984 /* Stack the buffer. */
985 cpp_buffer *buffer
986 = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
987 CPP_OPTION (pfile, preprocessed)
988 && !CPP_OPTION (pfile, directives_only));
989 buffer->file = file;
990 buffer->sysp = sysp;
991 buffer->to_free = file->buffer_start;
993 /* Initialize controlling macro state. */
994 pfile->mi_valid = true;
995 pfile->mi_cmacro = 0;
998 /* In the case of a normal #include, we're now at the start of the
999 line *following* the #include. A separate location_t for this
1000 location makes no sense, until we do the LC_LEAVE.
1002 This does not apply if we found a PCH file, we're not a regular
1003 include, or we ran out of locations. */
1004 bool decrement = (file->pchname == NULL
1005 && type < IT_DIRECTIVE_HWM
1006 && (pfile->line_table->highest_location
1007 != LINE_MAP_MAX_LOCATION - 1));
1008 if (decrement)
1009 pfile->line_table->highest_location--;
1011 /* Normally a header unit becomes an __import directive in the current file,
1012 but with -include we need something to LC_LEAVE to trigger the file_change
1013 hook and continue to the next -include or the main source file. */
1014 if (file->header_unit <= 0 || type == IT_CMDLINE)
1015 /* Add line map and do callbacks. */
1016 _cpp_do_file_change (pfile, LC_ENTER, file->path,
1017 /* With preamble injection, start on line zero,
1018 so the preamble doesn't appear to have been
1019 included from line 1. Likewise when
1020 starting preprocessed, we expect an initial
1021 locating line. */
1022 type == IT_PRE_MAIN ? 0 : 1, sysp);
1023 else if (decrement)
1025 /* Adjust the line back one so we appear on the #include line itself. */
1026 const line_map_ordinary *map
1027 = LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table);
1028 linenum_type line = SOURCE_LINE (map, pfile->line_table->highest_line);
1029 linemap_line_start (pfile->line_table, line - 1, 0);
1032 return true;
1035 /* Mark FILE to be included once only. */
1036 void
1037 _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
1039 pfile->seen_once_only = true;
1040 file->once_only = true;
1043 /* Return the directory from which searching for FNAME should start,
1044 considering the directive TYPE and ANGLE_BRACKETS. If there is
1045 nothing left in the path, returns NULL. */
1046 static struct cpp_dir *
1047 search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
1048 enum include_type type, bool suppress_diagnostic)
1050 cpp_dir *dir;
1051 _cpp_file *file;
1053 if (IS_ABSOLUTE_PATH (fname))
1054 return &pfile->no_search_path;
1056 /* pfile->buffer is NULL when processing an -include command-line flag. */
1057 file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
1059 /* For #include_next, skip in the search path past the dir in which
1060 the current file was found, but if it was found via an absolute
1061 path use the normal search logic. */
1062 if (type == IT_INCLUDE_NEXT && file->dir
1063 && file->dir != &pfile->no_search_path)
1064 dir = file->dir->next;
1065 else if (angle_brackets)
1066 dir = pfile->bracket_include;
1067 else if (type == IT_CMDLINE)
1068 /* -include and -imacros use the #include "" chain with the
1069 preprocessor's cwd prepended. */
1070 return make_cpp_dir (pfile, "./", false);
1071 else if (pfile->quote_ignores_source_dir)
1072 dir = pfile->quote_include;
1073 else
1074 return make_cpp_dir (pfile, dir_name_of_file (file),
1075 pfile->buffer ? pfile->buffer->sysp : 0);
1077 if (dir == NULL && !suppress_diagnostic)
1078 cpp_error (pfile, CPP_DL_ERROR,
1079 "no include path in which to search for %s", fname);
1081 return dir;
1084 /* Strip the basename from the file's path. It ends with a slash if
1085 of nonzero length. Note that this procedure also works for
1086 <stdin>, which is represented by the empty string. */
1087 static const char *
1088 dir_name_of_file (_cpp_file *file)
1090 if (!file->dir_name)
1092 size_t len = lbasename (file->path) - file->path;
1093 char *dir_name = XNEWVEC (char, len + 1);
1095 memcpy (dir_name, file->path, len);
1096 dir_name[len] = '\0';
1097 file->dir_name = dir_name;
1100 return file->dir_name;
1103 /* Handles #include-family directives (distinguished by TYPE),
1104 including HEADER, and the command line -imacros and -include.
1105 Returns true if a buffer was stacked. */
1106 bool
1107 _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
1108 enum include_type type, location_t loc)
1110 /* For -include command-line flags we have type == IT_CMDLINE.
1111 When the first -include file is processed we have the case, where
1112 pfile->cur_token == pfile->cur_run->base, we are directly called up
1113 by the front end. However in the case of the second -include file,
1114 we are called from _cpp_lex_token -> _cpp_get_fresh_line ->
1115 cpp_push_include, with pfile->cur_token != pfile->cur_run->base,
1116 and pfile->cur_token[-1].src_loc not (yet) initialized.
1117 However, when the include file cannot be found, we need src_loc to
1118 be initialized to some safe value: 0 means UNKNOWN_LOCATION. */
1119 if (type == IT_CMDLINE && pfile->cur_token != pfile->cur_run->base)
1120 pfile->cur_token[-1].src_loc = 0;
1122 cpp_dir *dir = search_path_head (pfile, fname, angle_brackets, type);
1123 if (!dir)
1124 return false;
1126 _cpp_file *file = _cpp_find_file (pfile, fname, dir, angle_brackets,
1127 type == IT_DEFAULT ? _cpp_FFK_PRE_INCLUDE
1128 : _cpp_FFK_NORMAL, loc);
1129 if (type == IT_DEFAULT && file == NULL)
1130 return false;
1132 return _cpp_stack_file (pfile, file, type, loc);
1135 /* NAME is a header file name, find the _cpp_file, if any. */
1137 static _cpp_file *
1138 test_header_unit (cpp_reader *pfile, const char *name, bool angle,
1139 location_t loc)
1141 if (cpp_dir *dir = search_path_head (pfile, name, angle, IT_INCLUDE))
1142 return _cpp_find_file (pfile, name, dir, angle, _cpp_FFK_NORMAL, loc);
1144 return nullptr;
1147 /* NAME is a header file name, find the path we'll use to open it and infer that
1148 it is a header-unit. */
1150 const char *
1151 _cpp_find_header_unit (cpp_reader *pfile, const char *name, bool angle,
1152 location_t loc)
1154 if (_cpp_file *file = test_header_unit (pfile, name, angle, loc))
1156 if (file->fd > 0)
1158 /* Don't leave it open. */
1159 close (file->fd);
1160 file->fd = 0;
1163 file->header_unit = +1;
1164 _cpp_mark_file_once_only (pfile, file);
1166 return file->path;
1169 return nullptr;
1172 /* NAME is a header file name, find the path we'll use to open it. But do not
1173 infer it is a header unit. */
1175 const char *
1176 cpp_probe_header_unit (cpp_reader *pfile, const char *name, bool angle,
1177 location_t loc)
1179 if (_cpp_file *file = test_header_unit (pfile, name, angle, loc))
1180 return file->path;
1182 return nullptr;
1185 /* Retrofit the just-entered main file asif it was an include. This
1186 will permit correct include_next use, and mark it as a system
1187 header if that's where it resides. We use filesystem-appropriate
1188 prefix matching of the include path to locate the main file. */
1189 void
1190 cpp_retrofit_as_include (cpp_reader *pfile)
1192 /* We should be the outermost. */
1193 gcc_assert (!pfile->buffer->prev);
1195 if (const char *name = pfile->main_file->name)
1197 /* Locate name on the include dir path, using a prefix match. */
1198 size_t name_len = strlen (name);
1199 for (cpp_dir *dir = pfile->quote_include; dir; dir = dir->next)
1200 if (dir->len < name_len
1201 && IS_DIR_SEPARATOR (name[dir->len])
1202 && !filename_ncmp (name, dir->name, dir->len))
1204 pfile->main_file->dir = dir;
1205 if (dir->sysp)
1206 cpp_make_system_header (pfile, 1, 0);
1207 break;
1211 /* Initialize controlling macro state. */
1212 pfile->mi_valid = true;
1213 pfile->mi_cmacro = 0;
1216 /* Could not open FILE. The complication is dependency output. */
1217 static void
1218 open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets,
1219 location_t loc)
1221 int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
1222 bool print_dep = CPP_OPTION (pfile, deps.style) > (angle_brackets || !!sysp);
1224 errno = file->err_no;
1225 if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
1227 deps_add_dep (pfile->deps, file->name);
1228 /* If the preprocessor output (other than dependency information) is
1229 being used, we must also flag an error. */
1230 if (CPP_OPTION (pfile, deps.need_preprocessor_output))
1231 cpp_errno_filename (pfile, CPP_DL_FATAL,
1232 file->path ? file->path : file->name,
1233 loc);
1235 else
1237 /* If we are not outputting dependencies, or if we are and dependencies
1238 were requested for this file, or if preprocessor output is needed
1239 in addition to dependency information, this is an error.
1241 Otherwise (outputting dependencies but not for this file, and not
1242 using the preprocessor output), we can still produce correct output
1243 so it's only a warning. */
1244 if (CPP_OPTION (pfile, deps.style) == DEPS_NONE
1245 || print_dep
1246 || CPP_OPTION (pfile, deps.need_preprocessor_output))
1247 cpp_errno_filename (pfile, CPP_DL_FATAL,
1248 file->path ? file->path : file->name,
1249 loc);
1250 else
1251 cpp_errno_filename (pfile, CPP_DL_WARNING,
1252 file->path ? file->path : file->name,
1253 loc);
1257 /* Search in the chain beginning at HEAD for a file whose search path
1258 started at START_DIR != NULL. */
1259 static struct cpp_file_hash_entry *
1260 search_cache (struct cpp_file_hash_entry *head, const cpp_dir *start_dir)
1262 while (head && head->start_dir != start_dir)
1263 head = head->next;
1265 return head;
1268 /* Allocate a new _cpp_file structure. */
1269 static _cpp_file *
1270 make_cpp_file (cpp_dir *dir, const char *fname)
1272 _cpp_file *file = XCNEW (_cpp_file);
1273 file->fd = -1;
1274 file->dir = dir;
1275 file->name = xstrdup (fname);
1277 return file;
1280 /* Release a _cpp_file structure. */
1281 static void
1282 destroy_cpp_file (_cpp_file *file)
1284 free ((void *) file->buffer_start);
1285 free ((void *) file->name);
1286 free ((void *) file->path);
1287 free (file);
1290 /* Release all the files allocated by this reader. */
1291 static void
1292 destroy_all_cpp_files (cpp_reader *pfile)
1294 _cpp_file *iter = pfile->all_files;
1295 while (iter)
1297 _cpp_file *next = iter->next_file;
1298 destroy_cpp_file (iter);
1299 iter = next;
1303 /* A hash of directory names. The directory names are the path names
1304 of files which contain a #include "", the included file name is
1305 appended to this directories.
1307 To avoid duplicate entries we follow the convention that all
1308 non-empty directory names should end in a '/'. DIR_NAME must be
1309 stored in permanently allocated memory. */
1310 static cpp_dir *
1311 make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
1313 struct cpp_file_hash_entry *entry, **hash_slot;
1314 cpp_dir *dir;
1316 hash_slot = (struct cpp_file_hash_entry **)
1317 htab_find_slot_with_hash (pfile->dir_hash, dir_name,
1318 htab_hash_string (dir_name),
1319 INSERT);
1321 /* Have we already hashed this directory? */
1322 for (entry = *hash_slot; entry; entry = entry->next)
1323 if (entry->start_dir == NULL)
1324 return entry->u.dir;
1326 dir = XCNEW (cpp_dir);
1327 dir->next = pfile->quote_include;
1328 dir->name = (char *) dir_name;
1329 dir->len = strlen (dir_name);
1330 dir->sysp = sysp;
1331 dir->construct = 0;
1333 /* Store this new result in the hash table. */
1334 entry = new_file_hash_entry (pfile);
1335 entry->next = *hash_slot;
1336 entry->start_dir = NULL;
1337 entry->location = pfile->line_table->highest_location;
1338 entry->u.dir = dir;
1339 *hash_slot = entry;
1341 return dir;
1344 /* Create a new block of memory for file hash entries. */
1345 static void
1346 allocate_file_hash_entries (cpp_reader *pfile)
1348 struct file_hash_entry_pool *pool = XNEW (struct file_hash_entry_pool);
1349 pool->file_hash_entries_used = 0;
1350 pool->next = pfile->file_hash_entries;
1351 pfile->file_hash_entries = pool;
1354 /* Return a new file hash entry. */
1355 static struct cpp_file_hash_entry *
1356 new_file_hash_entry (cpp_reader *pfile)
1358 unsigned int idx;
1359 if (pfile->file_hash_entries->file_hash_entries_used == FILE_HASH_POOL_SIZE)
1360 allocate_file_hash_entries (pfile);
1362 idx = pfile->file_hash_entries->file_hash_entries_used++;
1363 return &pfile->file_hash_entries->pool[idx];
1366 /* Free the file hash entry pools. */
1367 static void
1368 free_file_hash_entries (cpp_reader *pfile)
1370 struct file_hash_entry_pool *iter = pfile->file_hash_entries;
1371 while (iter)
1373 struct file_hash_entry_pool *next = iter->next;
1374 free (iter);
1375 iter = next;
1379 /* Returns TRUE if a file FNAME has ever been successfully opened.
1380 This routine is not intended to correctly handle filenames aliased
1381 by links or redundant . or .. traversals etc. */
1382 bool
1383 cpp_included (cpp_reader *pfile, const char *fname)
1385 struct cpp_file_hash_entry *entry;
1387 entry = (struct cpp_file_hash_entry *)
1388 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
1390 while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
1391 entry = entry->next;
1393 return entry != NULL;
1396 /* Returns TRUE if a file FNAME has ever been successfully opened
1397 before LOCATION. This routine is not intended to correctly handle
1398 filenames aliased by links or redundant . or .. traversals etc. */
1399 bool
1400 cpp_included_before (cpp_reader *pfile, const char *fname,
1401 location_t location)
1403 struct cpp_file_hash_entry *entry
1404 = (struct cpp_file_hash_entry *)
1405 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
1407 if (IS_ADHOC_LOC (location))
1408 location = get_location_from_adhoc_loc (pfile->line_table, location);
1410 while (entry && (entry->start_dir == NULL || entry->u.file->err_no
1411 || entry->location > location))
1412 entry = entry->next;
1414 return entry != NULL;
1417 /* Calculate the hash value of a file hash entry P. */
1419 static hashval_t
1420 file_hash_hash (const void *p)
1422 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
1423 const char *hname;
1424 if (entry->start_dir)
1425 hname = entry->u.file->name;
1426 else
1427 hname = entry->u.dir->name;
1429 return htab_hash_string (hname);
1432 /* Compare a string Q against a file hash entry P. */
1433 static int
1434 file_hash_eq (const void *p, const void *q)
1436 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
1437 const char *fname = (const char *) q;
1438 const char *hname;
1440 if (entry->start_dir)
1441 hname = entry->u.file->name;
1442 else
1443 hname = entry->u.dir->name;
1445 return filename_cmp (hname, fname) == 0;
1448 /* Compare entries in the nonexistent file hash table. These are just
1449 strings. */
1450 static int
1451 nonexistent_file_hash_eq (const void *p, const void *q)
1453 return filename_cmp ((const char *) p, (const char *) q) == 0;
1456 /* Initialize everything in this source file. */
1457 void
1458 _cpp_init_files (cpp_reader *pfile)
1460 pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1461 NULL, xcalloc, free);
1462 pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1463 NULL, xcalloc, free);
1464 allocate_file_hash_entries (pfile);
1465 pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
1466 nonexistent_file_hash_eq,
1467 NULL, xcalloc, free);
1468 obstack_specify_allocation (&pfile->nonexistent_file_ob, 0, 0,
1469 xmalloc, free);
1472 /* Finalize everything in this source file. */
1473 void
1474 _cpp_cleanup_files (cpp_reader *pfile)
1476 htab_delete (pfile->file_hash);
1477 htab_delete (pfile->dir_hash);
1478 htab_delete (pfile->nonexistent_file_hash);
1479 obstack_free (&pfile->nonexistent_file_ob, 0);
1480 free_file_hash_entries (pfile);
1481 destroy_all_cpp_files (pfile);
1484 /* Make the parser forget about files it has seen. This can be useful
1485 for resetting the parser to start another run. */
1486 void
1487 cpp_clear_file_cache (cpp_reader *pfile)
1489 _cpp_cleanup_files (pfile);
1490 pfile->file_hash_entries = NULL;
1491 pfile->all_files = NULL;
1492 _cpp_init_files (pfile);
1495 /* Enter a file name in the hash for the sake of cpp_included. */
1496 void
1497 _cpp_fake_include (cpp_reader *pfile, const char *fname)
1499 /* It does not matter what are the contents of fake_source_dir, it will never
1500 be inspected; we just use its address to uniquely signify that this file
1501 was added as a fake include, so a later call to _cpp_find_file (to include
1502 the file for real) won't find the fake one in the hash table. */
1503 static cpp_dir fake_source_dir;
1504 _cpp_find_file (pfile, fname, &fake_source_dir, 0, _cpp_FFK_FAKE, 0);
1507 /* Not everyone who wants to set system-header-ness on a buffer can
1508 see the details of a buffer. This is an exported interface because
1509 fix-header needs it. */
1510 void
1511 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
1513 int flags = 0;
1514 const class line_maps *line_table = pfile->line_table;
1515 const line_map_ordinary *map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
1516 /* 1 = system header, 2 = system header to be treated as C. */
1517 if (syshdr)
1518 flags = 1 + (externc != 0);
1519 pfile->buffer->sysp = flags;
1520 _cpp_do_file_change (pfile, LC_RENAME, ORDINARY_MAP_FILE_NAME (map),
1521 SOURCE_LINE (map, pfile->line_table->highest_line),
1522 flags);
1525 /* Allow the client to change the current file. Used by the front end
1526 to achieve pseudo-file names like <built-in>.
1527 If REASON is LC_LEAVE, then NEW_NAME must be NULL. */
1528 void
1529 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
1530 const char *new_name)
1532 _cpp_do_file_change (pfile, reason, new_name, 1, 0);
1535 struct report_missing_guard_data
1537 cpp_reader *pfile;
1538 const char **paths;
1539 size_t count;
1542 /* Callback function for htab_traverse. */
1543 static int
1544 report_missing_guard (void **slot, void *d)
1546 struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) *slot;
1547 struct report_missing_guard_data *data
1548 = (struct report_missing_guard_data *) d;
1550 /* Skip directories. */
1551 if (entry->start_dir != NULL)
1553 _cpp_file *file = entry->u.file;
1555 /* We don't want MI guard advice for the main file. */
1556 if (!file->once_only
1557 && file->cmacro == NULL
1558 && file->stack_count == 1
1559 && data->pfile->main_file != file)
1561 if (data->paths == NULL)
1563 data->paths = XCNEWVEC (const char *, data->count);
1564 data->count = 0;
1567 data->paths[data->count++] = file->path;
1571 /* Keep traversing the hash table. */
1572 return 1;
1575 /* Comparison function for qsort. */
1576 static int
1577 report_missing_guard_cmp (const void *p1, const void *p2)
1579 return strcmp (*(const char *const *) p1, *(const char *const *) p2);
1582 /* Report on all files that might benefit from a multiple include guard.
1583 Triggered by -H. */
1584 void
1585 _cpp_report_missing_guards (cpp_reader *pfile)
1587 struct report_missing_guard_data data;
1589 data.pfile = pfile;
1590 data.paths = NULL;
1591 data.count = htab_elements (pfile->file_hash);
1592 htab_traverse (pfile->file_hash, report_missing_guard, &data);
1594 if (data.paths != NULL)
1596 size_t i;
1598 /* Sort the paths to avoid outputting them in hash table
1599 order. */
1600 qsort (data.paths, data.count, sizeof (const char *),
1601 report_missing_guard_cmp);
1602 fputs (_("Multiple include guards may be useful for:\n"),
1603 stderr);
1604 for (i = 0; i < data.count; i++)
1606 fputs (data.paths[i], stderr);
1607 putc ('\n', stderr);
1609 free (data.paths);
1613 /* Locate HEADER, and determine whether it is newer than the current
1614 file. If it cannot be located or dated, return -1, if it is
1615 newer, return 1, otherwise 0. */
1617 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
1618 int angle_brackets)
1620 _cpp_file *file;
1621 struct cpp_dir *dir;
1623 dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
1624 if (!dir)
1625 return -1;
1627 file = _cpp_find_file (pfile, fname, dir, angle_brackets, _cpp_FFK_NORMAL, 0);
1628 if (file->err_no)
1629 return -1;
1631 if (file->fd != -1)
1633 close (file->fd);
1634 file->fd = -1;
1637 return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1640 /* Pushes the given file onto the buffer stack. Returns nonzero if
1641 successful. */
1642 bool
1643 cpp_push_include (cpp_reader *pfile, const char *fname)
1645 return _cpp_stack_include (pfile, fname, false, IT_CMDLINE,
1646 pfile->line_table->highest_line);
1649 /* Pushes the given file, implicitly included at the start of a
1650 compilation, onto the buffer stack but without any errors if the
1651 file is not found. Returns nonzero if successful. */
1652 bool
1653 cpp_push_default_include (cpp_reader *pfile, const char *fname)
1655 return _cpp_stack_include (pfile, fname, true, IT_DEFAULT,
1656 pfile->line_table->highest_line);
1659 /* Do appropriate cleanup when a file INC's buffer is popped off the
1660 input stack. */
1661 void
1662 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file,
1663 const unsigned char *to_free)
1665 /* Record the inclusion-preventing macro, which could be NULL
1666 meaning no controlling macro. */
1667 if (pfile->mi_valid && file->cmacro == NULL)
1668 file->cmacro = pfile->mi_cmacro;
1670 /* Invalidate control macros in the #including file. */
1671 pfile->mi_valid = false;
1673 if (to_free)
1675 if (to_free == file->buffer_start)
1677 file->buffer_start = NULL;
1678 file->buffer = NULL;
1679 file->buffer_valid = false;
1681 free ((void *) to_free);
1685 /* Return the file name associated with FILE. */
1686 const char *
1687 _cpp_get_file_name (_cpp_file *file)
1689 return file->name;
1692 /* Inteface to file statistics record in _cpp_file structure. */
1693 struct stat *
1694 _cpp_get_file_stat (_cpp_file *file)
1696 return &file->st;
1699 /* Set the include chain for "" to QUOTE, for <> to BRACKET. If
1700 QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1701 directory of the including file.
1703 If BRACKET does not lie in the QUOTE chain, it is set to QUOTE. */
1704 void
1705 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1706 int quote_ignores_source_dir)
1708 pfile->quote_include = quote;
1709 pfile->bracket_include = quote;
1710 pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1712 for (; quote; quote = quote->next)
1714 quote->name_map = NULL;
1715 quote->len = strlen (quote->name);
1716 if (quote == bracket)
1717 pfile->bracket_include = bracket;
1721 /* Append the file name to the directory to create the path, but don't
1722 turn / into // or // into ///; // may be a namespace escape. */
1723 static char *
1724 append_file_to_dir (const char *fname, cpp_dir *dir)
1726 size_t dlen, flen;
1727 char *path;
1729 dlen = dir->len;
1730 flen = strlen (fname);
1731 path = XNEWVEC (char, dlen + 1 + flen + 1);
1732 memcpy (path, dir->name, dlen);
1733 if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1]))
1734 path[dlen++] = '/';
1735 memcpy (&path[dlen], fname, flen + 1);
1737 return path;
1740 /* Read a space delimited string of unlimited length from a stdio
1741 file F. */
1742 static char *
1743 read_filename_string (int ch, FILE *f)
1745 char *alloc, *set;
1746 int len;
1748 len = 20;
1749 set = alloc = XNEWVEC (char, len + 1);
1750 if (! is_space (ch))
1752 *set++ = ch;
1753 while ((ch = getc (f)) != EOF && ! is_space (ch))
1755 if (set - alloc == len)
1757 len *= 2;
1758 alloc = XRESIZEVEC (char, alloc, len + 1);
1759 set = alloc + len / 2;
1761 *set++ = ch;
1764 *set = '\0';
1765 ungetc (ch, f);
1766 return alloc;
1769 /* Read the file name map file for DIR. */
1770 static void
1771 read_name_map (cpp_dir *dir)
1773 static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1774 char *name;
1775 FILE *f;
1776 size_t len, count = 0, room = 9;
1778 len = dir->len;
1779 name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1780 memcpy (name, dir->name, len);
1781 if (len && !IS_DIR_SEPARATOR (name[len - 1]))
1782 name[len++] = '/';
1783 strcpy (name + len, FILE_NAME_MAP_FILE);
1784 f = fopen (name, "r");
1786 dir->name_map = XNEWVEC (const char *, room);
1788 /* Silently return NULL if we cannot open. */
1789 if (f)
1791 int ch;
1793 while ((ch = getc (f)) != EOF)
1795 char *to;
1797 if (is_space (ch))
1798 continue;
1800 if (count + 2 > room)
1802 room += 8;
1803 dir->name_map = XRESIZEVEC (const char *, dir->name_map, room);
1806 dir->name_map[count] = read_filename_string (ch, f);
1807 while ((ch = getc (f)) != EOF && is_hspace (ch))
1810 to = read_filename_string (ch, f);
1811 if (IS_ABSOLUTE_PATH (to))
1812 dir->name_map[count + 1] = to;
1813 else
1815 dir->name_map[count + 1] = append_file_to_dir (to, dir);
1816 free (to);
1819 count += 2;
1820 while ((ch = getc (f)) != '\n')
1821 if (ch == EOF)
1822 break;
1825 fclose (f);
1828 /* Terminate the list of maps. */
1829 dir->name_map[count] = NULL;
1832 /* Remap a FILE's name based on the file_name_map, if any, for
1833 FILE->dir. If the file name has any directory separators,
1834 recursively check those directories too. */
1835 static char *
1836 remap_filename (cpp_reader *pfile, _cpp_file *file)
1838 const char *fname, *p;
1839 char *new_dir, *p3;
1840 cpp_dir *dir;
1841 size_t index, len;
1843 dir = file->dir;
1844 fname = file->name;
1846 for (;;)
1848 if (!dir->name_map)
1849 read_name_map (dir);
1851 for (index = 0; dir->name_map[index]; index += 2)
1852 if (!filename_cmp (dir->name_map[index], fname))
1853 return xstrdup (dir->name_map[index + 1]);
1854 if (IS_ABSOLUTE_PATH (fname))
1855 return NULL;
1856 p = strchr (fname, '/');
1857 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
1859 const char *p2 = strchr (fname, '\\');
1860 if (!p || (p2 && p > p2))
1861 p = p2;
1863 #endif
1864 if (!p || p == fname)
1865 return NULL;
1867 len = dir->len + (p - fname + 1);
1868 new_dir = XNEWVEC (char, len + 2);
1869 p3 = new_dir + dir->len;
1870 memcpy (new_dir, dir->name, dir->len);
1871 if (dir->len && !IS_DIR_SEPARATOR (dir->name[dir->len - 1]))
1873 *p3++ = '/';
1874 len++;
1876 memcpy (p3, fname, p - fname + 1);
1877 new_dir[len] = '\0';
1879 dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1880 fname = p + 1;
1884 /* Returns true if PCHNAME is a valid PCH file for FILE. */
1885 static bool
1886 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1888 const char *saved_path = file->path;
1889 bool valid = false;
1891 file->path = pchname;
1892 if (open_file (file))
1894 valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1896 if (!valid)
1898 close (file->fd);
1899 file->fd = -1;
1902 if (CPP_OPTION (pfile, print_include_names))
1904 unsigned int i;
1905 for (i = 1; i < pfile->line_table->depth; i++)
1906 putc ('.', stderr);
1907 fprintf (stderr, "%c %s\n",
1908 valid ? '!' : 'x', pchname);
1912 file->path = saved_path;
1913 return valid;
1916 /* Get the path associated with the _cpp_file F. The path includes
1917 the base name from the include directive and the directory it was
1918 found in via the search path. */
1920 const char *
1921 cpp_get_path (struct _cpp_file *f)
1923 return f->path;
1926 /* Get the directory associated with the _cpp_file F. */
1928 cpp_dir *
1929 cpp_get_dir (struct _cpp_file *f)
1931 return f->dir;
1934 /* Get the cpp_buffer currently associated with the cpp_reader
1935 PFILE. */
1937 cpp_buffer *
1938 cpp_get_buffer (cpp_reader *pfile)
1940 return pfile->buffer;
1943 /* Get the _cpp_file associated with the cpp_buffer B. */
1945 _cpp_file *
1946 cpp_get_file (cpp_buffer *b)
1948 return b->file;
1951 /* Get the previous cpp_buffer given a cpp_buffer B. The previous
1952 buffer is the buffer that included the given buffer. */
1954 cpp_buffer *
1955 cpp_get_prev (cpp_buffer *b)
1957 return b->prev;
1960 /* This data structure holds the list of header files that were seen
1961 while the PCH was being built. The 'entries' field is kept sorted
1962 in memcmp() order; yes, this means that on little-endian systems,
1963 it's sorted initially by the least-significant byte of 'size', but
1964 that's OK. The code does rely on having entries with the same size
1965 next to each other. */
1967 struct pchf_entry {
1968 /* The size of this file. This is used to save running a MD5 checksum
1969 if the sizes don't match. */
1970 off_t size;
1971 /* The MD5 checksum of this file. */
1972 unsigned char sum[16];
1973 /* Is this file to be included only once? */
1974 bool once_only;
1977 struct pchf_data {
1978 /* Number of pchf_entry structures. */
1979 size_t count;
1981 /* Are there any values with once_only set?
1982 This is used as an optimisation, it means we don't have to search
1983 the structure if we're processing a regular #include. */
1984 bool have_once_only;
1986 struct pchf_entry entries[1];
1989 static struct pchf_data *pchf;
1991 /* A qsort ordering function for pchf_entry structures. */
1993 static int
1994 pchf_save_compare (const void *e1, const void *e2)
1996 return memcmp (e1, e2, sizeof (struct pchf_entry));
1999 /* Create and write to F a pchf_data structure. */
2001 bool
2002 _cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
2004 size_t count = 0;
2005 struct pchf_data *result;
2006 size_t result_size;
2007 _cpp_file *f;
2008 bool ret;
2010 for (f = pfile->all_files; f; f = f->next_file)
2011 ++count;
2013 result_size = (sizeof (struct pchf_data)
2014 + sizeof (struct pchf_entry) * (count - 1));
2015 result = XCNEWVAR (struct pchf_data, result_size);
2017 result->count = 0;
2018 result->have_once_only = false;
2020 for (f = pfile->all_files; f; f = f->next_file)
2022 size_t count;
2024 /* This should probably never happen, since if a read error occurred
2025 the PCH file shouldn't be written... */
2026 if (f->dont_read || f->err_no)
2027 continue;
2029 if (f->stack_count == 0)
2030 continue;
2032 count = result->count++;
2034 result->entries[count].once_only = f->once_only;
2035 /* |= is avoided in the next line because of an HP C compiler bug */
2036 result->have_once_only = result->have_once_only | f->once_only;
2037 if (f->buffer_valid)
2038 md5_buffer ((const char *)f->buffer,
2039 f->st.st_size, result->entries[count].sum);
2040 else
2042 FILE *ff;
2043 int oldfd = f->fd;
2045 if (!open_file (f))
2047 open_file_failed (pfile, f, 0, 0);
2048 free (result);
2049 return false;
2051 ff = fdopen (f->fd, "rb");
2052 md5_stream (ff, result->entries[count].sum);
2053 fclose (ff);
2054 f->fd = oldfd;
2056 result->entries[count].size = f->st.st_size;
2059 result_size = (sizeof (struct pchf_data)
2060 + sizeof (struct pchf_entry) * (result->count - 1));
2062 qsort (result->entries, result->count, sizeof (struct pchf_entry),
2063 pchf_save_compare);
2065 ret = fwrite (result, result_size, 1, fp) == 1;
2066 free (result);
2067 return ret;
2070 /* Read the pchf_data structure from F. */
2072 bool
2073 _cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
2075 struct pchf_data d;
2077 if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
2078 != 1)
2079 return false;
2081 pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data)
2082 + sizeof (struct pchf_entry) * (d.count - 1));
2083 memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
2084 if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
2085 != d.count)
2086 return false;
2087 return true;
2090 /* The parameters for pchf_compare. */
2092 struct pchf_compare_data
2094 /* The size of the file we're looking for. */
2095 off_t size;
2097 /* The MD5 checksum of the file, if it's been computed. */
2098 unsigned char sum[16];
2100 /* Is SUM valid? */
2101 bool sum_computed;
2103 /* Do we need to worry about entries that don't have ONCE_ONLY set? */
2104 bool check_included;
2106 /* The file that we're searching for. */
2107 _cpp_file *f;
2110 /* bsearch comparison function; look for D_P in E_P. */
2112 static int
2113 pchf_compare (const void *d_p, const void *e_p)
2115 const struct pchf_entry *e = (const struct pchf_entry *)e_p;
2116 struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
2117 int result;
2119 result = memcmp (&d->size, &e->size, sizeof (off_t));
2120 if (result != 0)
2121 return result;
2123 if (! d->sum_computed)
2125 _cpp_file *const f = d->f;
2127 md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
2128 d->sum_computed = true;
2131 result = memcmp (d->sum, e->sum, 16);
2132 if (result != 0)
2133 return result;
2135 if (d->check_included || e->once_only)
2136 return 0;
2137 else
2138 return 1;
2141 /* Check that F is not in a list read from a PCH file (if any).
2142 Assumes that f->buffer_valid is true. Return TRUE if the file
2143 should not be read. */
2145 static bool
2146 check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
2147 _cpp_file *f,
2148 bool check_included)
2150 struct pchf_compare_data d;
2152 if (pchf == NULL
2153 || (! check_included && ! pchf->have_once_only))
2154 return false;
2156 d.size = f->st.st_size;
2157 d.sum_computed = false;
2158 d.f = f;
2159 d.check_included = check_included;
2160 return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
2161 pchf_compare) != NULL;
2164 /* Return true if the file FNAME is found in the appropriate include file path
2165 as indicated by ANGLE_BRACKETS. */
2167 bool
2168 _cpp_has_header (cpp_reader *pfile, const char *fname, int angle_brackets,
2169 enum include_type type)
2171 cpp_dir *start_dir = search_path_head (pfile, fname, angle_brackets, type,
2172 /* suppress_diagnostic = */ true);
2173 if (!start_dir)
2174 return false;
2175 _cpp_file *file = _cpp_find_file (pfile, fname, start_dir, angle_brackets,
2176 _cpp_FFK_HAS_INCLUDE, 0);
2177 return file->err_no != ENOENT;
2180 /* Read a file and convert to input charset, the same as if it were being read
2181 by a cpp_reader. */
2183 cpp_converted_source
2184 cpp_get_converted_source (const char *fname, const char *input_charset)
2186 cpp_converted_source res = {};
2187 _cpp_file file = {};
2188 file.fd = -1;
2189 file.name = lbasename (fname);
2190 file.path = fname;
2191 if (!open_file (&file))
2192 return res;
2193 const bool ok = read_file_guts (NULL, &file, 0, input_charset);
2194 close (file.fd);
2195 if (!ok)
2196 return res;
2197 res.to_free = (char *) file.buffer_start;
2198 res.data = (char *) file.buffer;
2199 res.len = file.st.st_size;
2200 return res;