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