xref: /netbsd-src/external/gpl3/gcc.old/dist/libcpp/files.c (revision f3cfa6f6ce31685c6c4a758bc430e69eb99f50a4)
1 /* Part of CPP library.  File handling.
2    Copyright (C) 1986-2016 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     = (struct cpp_file_hash_entry *)
1244       htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
1245 
1246   if (IS_ADHOC_LOC (location))
1247     location = get_location_from_adhoc_loc (pfile->line_table, location);
1248 
1249   while (entry && (entry->start_dir == NULL || entry->u.file->err_no
1250 		   || entry->location > location))
1251     entry = entry->next;
1252 
1253   return entry != NULL;
1254 }
1255 
1256 /* Calculate the hash value of a file hash entry P.  */
1257 
1258 static hashval_t
1259 file_hash_hash (const void *p)
1260 {
1261   struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
1262   const char *hname;
1263   if (entry->start_dir)
1264     hname = entry->u.file->name;
1265   else
1266     hname = entry->u.dir->name;
1267 
1268   return htab_hash_string (hname);
1269 }
1270 
1271 /* Compare a string Q against a file hash entry P.  */
1272 static int
1273 file_hash_eq (const void *p, const void *q)
1274 {
1275   struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) p;
1276   const char *fname = (const char *) q;
1277   const char *hname;
1278 
1279   if (entry->start_dir)
1280     hname = entry->u.file->name;
1281   else
1282     hname = entry->u.dir->name;
1283 
1284   return filename_cmp (hname, fname) == 0;
1285 }
1286 
1287 /* Compare entries in the nonexistent file hash table.  These are just
1288    strings.  */
1289 static int
1290 nonexistent_file_hash_eq (const void *p, const void *q)
1291 {
1292   return filename_cmp ((const char *) p, (const char *) q) == 0;
1293 }
1294 
1295 /* Initialize everything in this source file.  */
1296 void
1297 _cpp_init_files (cpp_reader *pfile)
1298 {
1299   pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1300 					NULL, xcalloc, free);
1301   pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1302 					NULL, xcalloc, free);
1303   allocate_file_hash_entries (pfile);
1304   pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
1305 						    nonexistent_file_hash_eq,
1306 						    NULL, xcalloc, free);
1307   obstack_specify_allocation (&pfile->nonexistent_file_ob, 0, 0,
1308 			      xmalloc, free);
1309 }
1310 
1311 /* Finalize everything in this source file.  */
1312 void
1313 _cpp_cleanup_files (cpp_reader *pfile)
1314 {
1315   htab_delete (pfile->file_hash);
1316   htab_delete (pfile->dir_hash);
1317   htab_delete (pfile->nonexistent_file_hash);
1318   obstack_free (&pfile->nonexistent_file_ob, 0);
1319   free_file_hash_entries (pfile);
1320   destroy_all_cpp_files (pfile);
1321 }
1322 
1323 /* Make the parser forget about files it has seen.  This can be useful
1324    for resetting the parser to start another run.  */
1325 void
1326 cpp_clear_file_cache (cpp_reader *pfile)
1327 {
1328   _cpp_cleanup_files (pfile);
1329   pfile->file_hash_entries = NULL;
1330   pfile->all_files = NULL;
1331   _cpp_init_files (pfile);
1332 }
1333 
1334 /* Enter a file name in the hash for the sake of cpp_included.  */
1335 void
1336 _cpp_fake_include (cpp_reader *pfile, const char *fname)
1337 {
1338   _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true, 0, false);
1339 }
1340 
1341 /* Not everyone who wants to set system-header-ness on a buffer can
1342    see the details of a buffer.  This is an exported interface because
1343    fix-header needs it.  */
1344 void
1345 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
1346 {
1347   int flags = 0;
1348   const struct line_maps *line_table = pfile->line_table;
1349   const line_map_ordinary *map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
1350   /* 1 = system header, 2 = system header to be treated as C.  */
1351   if (syshdr)
1352     flags = 1 + (externc != 0);
1353   pfile->buffer->sysp = flags;
1354   _cpp_do_file_change (pfile, LC_RENAME, ORDINARY_MAP_FILE_NAME (map),
1355 		       SOURCE_LINE (map, pfile->line_table->highest_line), flags);
1356 }
1357 
1358 /* Allow the client to change the current file.  Used by the front end
1359    to achieve pseudo-file names like <built-in>.
1360    If REASON is LC_LEAVE, then NEW_NAME must be NULL.  */
1361 void
1362 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
1363 		 const char *new_name)
1364 {
1365   _cpp_do_file_change (pfile, reason, new_name, 1, 0);
1366 }
1367 
1368 struct report_missing_guard_data
1369 {
1370   const char **paths;
1371   size_t count;
1372 };
1373 
1374 /* Callback function for htab_traverse.  */
1375 static int
1376 report_missing_guard (void **slot, void *d)
1377 {
1378   struct cpp_file_hash_entry *entry = (struct cpp_file_hash_entry *) *slot;
1379   struct report_missing_guard_data *data
1380     = (struct report_missing_guard_data *) d;
1381 
1382   /* Skip directories.  */
1383   if (entry->start_dir != NULL)
1384     {
1385       _cpp_file *file = entry->u.file;
1386 
1387       /* We don't want MI guard advice for the main file.  */
1388       if (!file->once_only && file->cmacro == NULL
1389 	  && file->stack_count == 1 && !file->main_file)
1390 	{
1391 	  if (data->paths == NULL)
1392 	    {
1393 	      data->paths = XCNEWVEC (const char *, data->count);
1394 	      data->count = 0;
1395 	    }
1396 
1397 	  data->paths[data->count++] = file->path;
1398 	}
1399     }
1400 
1401   /* Keep traversing the hash table.  */
1402   return 1;
1403 }
1404 
1405 /* Comparison function for qsort.  */
1406 static int
1407 report_missing_guard_cmp (const void *p1, const void *p2)
1408 {
1409   return strcmp (*(const char *const *) p1, *(const char *const *) p2);
1410 }
1411 
1412 /* Report on all files that might benefit from a multiple include guard.
1413    Triggered by -H.  */
1414 void
1415 _cpp_report_missing_guards (cpp_reader *pfile)
1416 {
1417   struct report_missing_guard_data data;
1418 
1419   data.paths = NULL;
1420   data.count = htab_elements (pfile->file_hash);
1421   htab_traverse (pfile->file_hash, report_missing_guard, &data);
1422 
1423   if (data.paths != NULL)
1424     {
1425       size_t i;
1426 
1427       /* Sort the paths to avoid outputting them in hash table
1428 	 order.  */
1429       qsort (data.paths, data.count, sizeof (const char *),
1430 	     report_missing_guard_cmp);
1431       fputs (_("Multiple include guards may be useful for:\n"),
1432 	     stderr);
1433       for (i = 0; i < data.count; i++)
1434 	{
1435 	  fputs (data.paths[i], stderr);
1436 	  putc ('\n', stderr);
1437 	}
1438       free (data.paths);
1439     }
1440 }
1441 
1442 /* Locate HEADER, and determine whether it is newer than the current
1443    file.  If it cannot be located or dated, return -1, if it is
1444    newer, return 1, otherwise 0.  */
1445 int
1446 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
1447 			int angle_brackets)
1448 {
1449   _cpp_file *file;
1450   struct cpp_dir *dir;
1451 
1452   dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
1453   if (!dir)
1454     return -1;
1455 
1456   file = _cpp_find_file (pfile, fname, dir, false, angle_brackets, false);
1457   if (file->err_no)
1458     return -1;
1459 
1460   if (file->fd != -1)
1461     {
1462       close (file->fd);
1463       file->fd = -1;
1464     }
1465 
1466   return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1467 }
1468 
1469 /* Pushes the given file onto the buffer stack.  Returns nonzero if
1470    successful.  */
1471 bool
1472 cpp_push_include (cpp_reader *pfile, const char *fname)
1473 {
1474   return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
1475 }
1476 
1477 /* Pushes the given file, implicitly included at the start of a
1478    compilation, onto the buffer stack but without any errors if the
1479    file is not found.  Returns nonzero if successful.  */
1480 bool
1481 cpp_push_default_include (cpp_reader *pfile, const char *fname)
1482 {
1483   return _cpp_stack_include (pfile, fname, true, IT_DEFAULT);
1484 }
1485 
1486 /* Do appropriate cleanup when a file INC's buffer is popped off the
1487    input stack.  */
1488 void
1489 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file,
1490 		      const unsigned char *to_free)
1491 {
1492   /* Record the inclusion-preventing macro, which could be NULL
1493      meaning no controlling macro.  */
1494   if (pfile->mi_valid && file->cmacro == NULL)
1495     file->cmacro = pfile->mi_cmacro;
1496 
1497   /* Invalidate control macros in the #including file.  */
1498   pfile->mi_valid = false;
1499 
1500   if (to_free)
1501     {
1502       if (to_free == file->buffer_start)
1503 	{
1504 	  file->buffer_start = NULL;
1505 	  file->buffer = NULL;
1506 	  file->buffer_valid = false;
1507 	}
1508       free ((void *) to_free);
1509     }
1510 }
1511 
1512 /* Return the file name associated with FILE.  */
1513 const char *
1514 _cpp_get_file_name (_cpp_file *file)
1515 {
1516   return file->name;
1517 }
1518 
1519 /* Inteface to file statistics record in _cpp_file structure. */
1520 struct stat *
1521 _cpp_get_file_stat (_cpp_file *file)
1522 {
1523     return &file->st;
1524 }
1525 
1526 /* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
1527    QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1528    directory of the including file.
1529 
1530    If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
1531 void
1532 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1533 			int quote_ignores_source_dir)
1534 {
1535   pfile->quote_include = quote;
1536   pfile->bracket_include = quote;
1537   pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1538 
1539   for (; quote; quote = quote->next)
1540     {
1541       quote->name_map = NULL;
1542       quote->len = strlen (quote->name);
1543       if (quote == bracket)
1544 	pfile->bracket_include = bracket;
1545     }
1546 }
1547 
1548 /* Append the file name to the directory to create the path, but don't
1549    turn / into // or // into ///; // may be a namespace escape.  */
1550 static char *
1551 append_file_to_dir (const char *fname, cpp_dir *dir)
1552 {
1553   size_t dlen, flen;
1554   char *path;
1555 
1556   dlen = dir->len;
1557   flen = strlen (fname);
1558   path = XNEWVEC (char, dlen + 1 + flen + 1);
1559   memcpy (path, dir->name, dlen);
1560   if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1]))
1561     path[dlen++] = '/';
1562   memcpy (&path[dlen], fname, flen + 1);
1563 
1564   return path;
1565 }
1566 
1567 /* Read a space delimited string of unlimited length from a stdio
1568    file F.  */
1569 static char *
1570 read_filename_string (int ch, FILE *f)
1571 {
1572   char *alloc, *set;
1573   int len;
1574 
1575   len = 20;
1576   set = alloc = XNEWVEC (char, len + 1);
1577   if (! is_space (ch))
1578     {
1579       *set++ = ch;
1580       while ((ch = getc (f)) != EOF && ! is_space (ch))
1581 	{
1582 	  if (set - alloc == len)
1583 	    {
1584 	      len *= 2;
1585 	      alloc = XRESIZEVEC (char, alloc, len + 1);
1586 	      set = alloc + len / 2;
1587 	    }
1588 	  *set++ = ch;
1589 	}
1590     }
1591   *set = '\0';
1592   ungetc (ch, f);
1593   return alloc;
1594 }
1595 
1596 /* Read the file name map file for DIR.  */
1597 static void
1598 read_name_map (cpp_dir *dir)
1599 {
1600   static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1601   char *name;
1602   FILE *f;
1603   size_t len, count = 0, room = 9;
1604 
1605   len = dir->len;
1606   name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1607   memcpy (name, dir->name, len);
1608   if (len && !IS_DIR_SEPARATOR (name[len - 1]))
1609     name[len++] = '/';
1610   strcpy (name + len, FILE_NAME_MAP_FILE);
1611   f = fopen (name, "r");
1612 
1613   dir->name_map = XNEWVEC (const char *, room);
1614 
1615   /* Silently return NULL if we cannot open.  */
1616   if (f)
1617     {
1618       int ch;
1619 
1620       while ((ch = getc (f)) != EOF)
1621 	{
1622 	  char *to;
1623 
1624 	  if (is_space (ch))
1625 	    continue;
1626 
1627 	  if (count + 2 > room)
1628 	    {
1629 	      room += 8;
1630 	      dir->name_map = XRESIZEVEC (const char *, dir->name_map, room);
1631 	    }
1632 
1633 	  dir->name_map[count] = read_filename_string (ch, f);
1634 	  while ((ch = getc (f)) != EOF && is_hspace (ch))
1635 	    ;
1636 
1637 	  to = read_filename_string (ch, f);
1638 	  if (IS_ABSOLUTE_PATH (to))
1639 	    dir->name_map[count + 1] = to;
1640 	  else
1641 	    {
1642 	      dir->name_map[count + 1] = append_file_to_dir (to, dir);
1643 	      free (to);
1644 	    }
1645 
1646 	  count += 2;
1647 	  while ((ch = getc (f)) != '\n')
1648 	    if (ch == EOF)
1649 	      break;
1650 	}
1651 
1652       fclose (f);
1653     }
1654 
1655   /* Terminate the list of maps.  */
1656   dir->name_map[count] = NULL;
1657 }
1658 
1659 /* Remap a FILE's name based on the file_name_map, if any, for
1660    FILE->dir.  If the file name has any directory separators,
1661    recursively check those directories too.  */
1662 static char *
1663 remap_filename (cpp_reader *pfile, _cpp_file *file)
1664 {
1665   const char *fname, *p;
1666   char *new_dir;
1667   cpp_dir *dir;
1668   size_t index, len;
1669 
1670   dir = file->dir;
1671   fname = file->name;
1672 
1673   for (;;)
1674     {
1675       if (!dir->name_map)
1676 	read_name_map (dir);
1677 
1678       for (index = 0; dir->name_map[index]; index += 2)
1679 	if (!filename_cmp (dir->name_map[index], fname))
1680 	    return xstrdup (dir->name_map[index + 1]);
1681       if (IS_ABSOLUTE_PATH (fname))
1682 	return NULL;
1683       p = strchr (fname, '/');
1684 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
1685       {
1686 	char *p2 = strchr (fname, '\\');
1687 	if (!p || (p > p2))
1688 	  p = p2;
1689       }
1690 #endif
1691       if (!p || p == fname)
1692 	return NULL;
1693 
1694       len = dir->len + (p - fname + 1);
1695       new_dir = XNEWVEC (char, len + 1);
1696       memcpy (new_dir, dir->name, dir->len);
1697       memcpy (new_dir + dir->len, fname, p - fname + 1);
1698       new_dir[len] = '\0';
1699 
1700       dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1701       fname = p + 1;
1702     }
1703 }
1704 
1705 /* Returns true if PCHNAME is a valid PCH file for FILE.  */
1706 static bool
1707 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1708 {
1709   const char *saved_path = file->path;
1710   bool valid = false;
1711 
1712   file->path = pchname;
1713   if (open_file (file))
1714     {
1715       valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1716 
1717       if (!valid)
1718 	{
1719 	  close (file->fd);
1720 	  file->fd = -1;
1721 	}
1722 
1723       if (CPP_OPTION (pfile, print_include_names))
1724 	{
1725 	  unsigned int i;
1726 	  for (i = 1; i < pfile->line_table->depth; i++)
1727 	    putc ('.', stderr);
1728 	  fprintf (stderr, "%c %s\n",
1729 		   valid ? '!' : 'x', pchname);
1730 	}
1731     }
1732 
1733   file->path = saved_path;
1734   return valid;
1735 }
1736 
1737 /* Get the path associated with the _cpp_file F.  The path includes
1738    the base name from the include directive and the directory it was
1739    found in via the search path.  */
1740 
1741 const char *
1742 cpp_get_path (struct _cpp_file *f)
1743 {
1744   return f->path;
1745 }
1746 
1747 /* Get the directory associated with the _cpp_file F.  */
1748 
1749 cpp_dir *
1750 cpp_get_dir (struct _cpp_file *f)
1751 {
1752   return f->dir;
1753 }
1754 
1755 /* Get the cpp_buffer currently associated with the cpp_reader
1756    PFILE.  */
1757 
1758 cpp_buffer *
1759 cpp_get_buffer (cpp_reader *pfile)
1760 {
1761   return pfile->buffer;
1762 }
1763 
1764 /* Get the _cpp_file associated with the cpp_buffer B.  */
1765 
1766 _cpp_file *
1767 cpp_get_file (cpp_buffer *b)
1768 {
1769   return b->file;
1770 }
1771 
1772 /* Get the previous cpp_buffer given a cpp_buffer B.  The previous
1773    buffer is the buffer that included the given buffer.  */
1774 
1775 cpp_buffer *
1776 cpp_get_prev (cpp_buffer *b)
1777 {
1778   return b->prev;
1779 }
1780 
1781 /* This data structure holds the list of header files that were seen
1782    while the PCH was being built.  The 'entries' field is kept sorted
1783    in memcmp() order; yes, this means that on little-endian systems,
1784    it's sorted initially by the least-significant byte of 'size', but
1785    that's OK.  The code does rely on having entries with the same size
1786    next to each other.  */
1787 
1788 struct pchf_entry {
1789   /* The size of this file.  This is used to save running a MD5 checksum
1790      if the sizes don't match.  */
1791   off_t size;
1792   /* The MD5 checksum of this file.  */
1793   unsigned char sum[16];
1794   /* Is this file to be included only once?  */
1795   bool once_only;
1796 };
1797 
1798 struct pchf_data {
1799   /* Number of pchf_entry structures.  */
1800   size_t count;
1801 
1802   /* Are there any values with once_only set?
1803      This is used as an optimisation, it means we don't have to search
1804      the structure if we're processing a regular #include.  */
1805   bool have_once_only;
1806 
1807   struct pchf_entry entries[1];
1808 };
1809 
1810 static struct pchf_data *pchf;
1811 
1812 /* A qsort ordering function for pchf_entry structures.  */
1813 
1814 static int
1815 pchf_save_compare (const void *e1, const void *e2)
1816 {
1817   return memcmp (e1, e2, sizeof (struct pchf_entry));
1818 }
1819 
1820 /* Create and write to F a pchf_data structure.  */
1821 
1822 bool
1823 _cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
1824 {
1825   size_t count = 0;
1826   struct pchf_data *result;
1827   size_t result_size;
1828   _cpp_file *f;
1829   bool ret;
1830 
1831   for (f = pfile->all_files; f; f = f->next_file)
1832     ++count;
1833 
1834   result_size = (sizeof (struct pchf_data)
1835 		 + sizeof (struct pchf_entry) * (count - 1));
1836   result = XCNEWVAR (struct pchf_data, result_size);
1837 
1838   result->count = 0;
1839   result->have_once_only = false;
1840 
1841   for (f = pfile->all_files; f; f = f->next_file)
1842     {
1843       size_t count;
1844 
1845       /* This should probably never happen, since if a read error occurred
1846 	 the PCH file shouldn't be written...  */
1847       if (f->dont_read || f->err_no)
1848 	continue;
1849 
1850       if (f->stack_count == 0)
1851 	continue;
1852 
1853       count = result->count++;
1854 
1855       result->entries[count].once_only = f->once_only;
1856       /* |= is avoided in the next line because of an HP C compiler bug */
1857       result->have_once_only = result->have_once_only | f->once_only;
1858       if (f->buffer_valid)
1859 	md5_buffer ((const char *)f->buffer,
1860 		    f->st.st_size, result->entries[count].sum);
1861       else
1862 	{
1863 	  FILE *ff;
1864 	  int oldfd = f->fd;
1865 
1866 	  if (!open_file (f))
1867 	    {
1868 	      open_file_failed (pfile, f, 0);
1869 	      free (result);
1870 	      return false;
1871 	    }
1872 	  ff = fdopen (f->fd, "rb");
1873 	  md5_stream (ff, result->entries[count].sum);
1874 	  fclose (ff);
1875 	  f->fd = oldfd;
1876 	}
1877       result->entries[count].size = f->st.st_size;
1878     }
1879 
1880   result_size = (sizeof (struct pchf_data)
1881                  + sizeof (struct pchf_entry) * (result->count - 1));
1882 
1883   qsort (result->entries, result->count, sizeof (struct pchf_entry),
1884 	 pchf_save_compare);
1885 
1886   ret = fwrite (result, result_size, 1, fp) == 1;
1887   free (result);
1888   return ret;
1889 }
1890 
1891 /* Read the pchf_data structure from F.  */
1892 
1893 bool
1894 _cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
1895 {
1896   struct pchf_data d;
1897 
1898   if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
1899        != 1)
1900     return false;
1901 
1902   pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data)
1903 		  + sizeof (struct pchf_entry) * (d.count - 1));
1904   memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
1905   if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
1906       != d.count)
1907     return false;
1908   return true;
1909 }
1910 
1911 /* The parameters for pchf_compare.  */
1912 
1913 struct pchf_compare_data
1914 {
1915   /* The size of the file we're looking for.  */
1916   off_t size;
1917 
1918   /* The MD5 checksum of the file, if it's been computed.  */
1919   unsigned char sum[16];
1920 
1921   /* Is SUM valid?  */
1922   bool sum_computed;
1923 
1924   /* Do we need to worry about entries that don't have ONCE_ONLY set?  */
1925   bool check_included;
1926 
1927   /* The file that we're searching for.  */
1928   _cpp_file *f;
1929 };
1930 
1931 /* bsearch comparison function; look for D_P in E_P.  */
1932 
1933 static int
1934 pchf_compare (const void *d_p, const void *e_p)
1935 {
1936   const struct pchf_entry *e = (const struct pchf_entry *)e_p;
1937   struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
1938   int result;
1939 
1940   result = memcmp (&d->size, &e->size, sizeof (off_t));
1941   if (result != 0)
1942     return result;
1943 
1944   if (! d->sum_computed)
1945     {
1946       _cpp_file *const f = d->f;
1947 
1948       md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
1949       d->sum_computed = true;
1950     }
1951 
1952   result = memcmp (d->sum, e->sum, 16);
1953   if (result != 0)
1954     return result;
1955 
1956   if (d->check_included || e->once_only)
1957     return 0;
1958   else
1959     return 1;
1960 }
1961 
1962 /* Check that F is not in a list read from a PCH file (if any).
1963    Assumes that f->buffer_valid is true.  Return TRUE if the file
1964    should not be read.  */
1965 
1966 static bool
1967 check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
1968 			    _cpp_file *f,
1969 			    bool check_included)
1970 {
1971   struct pchf_compare_data d;
1972 
1973   if (pchf == NULL
1974       || (! check_included && ! pchf->have_once_only))
1975     return false;
1976 
1977   d.size = f->st.st_size;
1978   d.sum_computed = false;
1979   d.f = f;
1980   d.check_included = check_included;
1981   return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
1982 		  pchf_compare) != NULL;
1983 }
1984 
1985 /* Return true if the file FNAME is found in the appropriate include file path
1986    as indicated by ANGLE_BRACKETS.  */
1987 
1988 bool
1989 _cpp_has_header (cpp_reader *pfile, const char *fname, int angle_brackets,
1990 		 enum include_type type)
1991 {
1992   cpp_dir *start_dir = search_path_head (pfile, fname, angle_brackets, type);
1993   _cpp_file *file = _cpp_find_file (pfile, fname, start_dir,
1994 				    /*fake=*/false, angle_brackets,
1995 				    /*implicit_preinclude=*/false);
1996   return file->err_no != ENOENT;
1997 }
1998 
1999