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