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