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