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