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