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