Merge from vendor branch NTPD:
[dragonfly.git] / contrib / gcc-3.4 / gcc / cppfiles.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 Free Software Foundation, Inc.
4    Written by Per Bothner, 1994.
5    Based on CCCP program by Paul Rubin, June 1986
6    Adapted to ANSI C, Richard Stallman, Jan 1987
7    Split out of cpplib.c, Zack Weinberg, Oct 1998
8    Reimplemented, Neil Booth, Jul 2003
9
10 This program is free software; you can redistribute it and/or modify it
11 under the terms of the GNU General Public License as published by the
12 Free Software Foundation; either version 2, or (at your option) any
13 later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
23
24 #include "config.h"
25 #include "system.h"
26 #include "cpplib.h"
27 #include "cpphash.h"
28 #include "intl.h"
29 #include "mkdeps.h"
30 #include "hashtab.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   /* For DJGPP redirected input is opened in text mode.  */
44 #  define set_stdin_to_binary_mode() \
45      if (! isatty (0)) setmode (0, O_BINARY)
46 #else
47 #  define set_stdin_to_binary_mode() /* Nothing */
48 #endif
49
50 #ifndef O_BINARY
51 # define O_BINARY 0
52 #endif
53
54 /* This structure represents a file searched for by CPP, whether it
55    exists or not.  An instance may be pointed to by more than one
56    file_hash_entry; at present no reference count is kept.  */
57 struct _cpp_file
58 {
59   /* Filename as given to #include or command line switch.  */
60   const char *name;
61
62   /* The full path used to find the file.  */
63   const char *path;
64
65   /* The full path of the pch file.  */
66   const char *pchname;
67
68   /* The file's path with the basename stripped.  NULL if it hasn't
69      been calculated yet.  */
70   const char *dir_name;
71
72   /* Chain through all files.  */
73   struct _cpp_file *next_file;
74
75   /* The contents of NAME after calling read_file().  */
76   const uchar *buffer;
77
78   /* The macro, if any, preventing re-inclusion.  */
79   const cpp_hashnode *cmacro;
80
81   /* The directory in the search path where FILE was found.  Used for
82      #include_next and determining whether a header is a system
83      header.  */
84   cpp_dir *dir;
85
86   /* As filled in by stat(2) for the file.  */
87   struct stat st;
88
89   /* File descriptor.  Invalid if -1, otherwise open.  */
90   int fd;
91
92   /* Zero if this file was successfully opened and stat()-ed,
93      otherwise errno obtained from failure.  */
94   int err_no;
95
96   /* Number of times the file has been stacked for preprocessing.  */
97   unsigned short stack_count;
98
99   /* If opened with #import or contains #pragma once.  */
100   bool once_only;
101
102   /* If read() failed before.  */
103   bool dont_read;
104
105   /* If this file is the main file.  */
106   bool main_file;
107
108   /* If BUFFER above contains the true contents of the file.  */
109   bool buffer_valid;
110
111   /* 0: file not known to be a PCH.
112      1: file is a PCH (on return from find_include_file).
113      2: file is not and never will be a valid precompiled header.
114      3: file is always a valid precompiled header.  */
115   uchar pch;
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   union
150   {
151     _cpp_file *file;
152     cpp_dir *dir;
153   } u;
154 };
155
156 static bool open_file (_cpp_file *file);
157 static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
158                            bool *invalid_pch);
159 static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
160                               bool *invalid_pch);
161 static bool read_file_guts (cpp_reader *pfile, _cpp_file *file);
162 static bool read_file (cpp_reader *pfile, _cpp_file *file);
163 static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import);
164 static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
165                                  int angle_brackets, enum include_type);
166 static const char *dir_name_of_file (_cpp_file *file);
167 static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
168 static struct file_hash_entry *search_cache (struct file_hash_entry *head,
169                                              const cpp_dir *start_dir);
170 static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
171 static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
172 static void allocate_file_hash_entries (cpp_reader *pfile);
173 static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
174 static int report_missing_guard (void **slot, void *b);
175 static hashval_t file_hash_hash (const void *p);
176 static int file_hash_eq (const void *p, const void *q);
177 static char *read_filename_string (int ch, FILE *f);
178 static void read_name_map (cpp_dir *dir);
179 static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
180 static char *append_file_to_dir (const char *fname, cpp_dir *dir);
181 static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
182 static bool include_pch_p (_cpp_file *file);
183
184 /* Given a filename in FILE->PATH, with the empty string interpreted
185    as <stdin>, open it.
186
187    On success FILE contains an open file descriptor and stat
188    information for the file.  On failure the file descriptor is -1 and
189    the appropriate errno is also stored in FILE.  Returns TRUE iff
190    successful.
191
192    We used to open files in nonblocking mode, but that caused more
193    problems than it solved.  Do take care not to acquire a controlling
194    terminal by mistake (this can't happen on sane systems, but
195    paranoia is a virtue).
196
197    Use the three-argument form of open even though we aren't
198    specifying O_CREAT, to defend against broken system headers.
199
200    O_BINARY tells some runtime libraries (notably DJGPP) not to do
201    newline translation; we can handle DOS line breaks just fine
202    ourselves.  */
203 static bool
204 open_file (_cpp_file *file)
205 {
206   if (file->path[0] == '\0')
207     {
208       file->fd = 0;
209       set_stdin_to_binary_mode ();
210     }
211   else
212     file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
213
214   if (file->fd != -1)
215     {
216       if (fstat (file->fd, &file->st) == 0)
217         {
218           if (!S_ISDIR (file->st.st_mode))
219             {
220               file->err_no = 0;
221               return true;
222             }
223
224           /* Ignore a directory and continue the search.  The file we're
225              looking for may be elsewhere in the search path.  */
226           errno = ENOENT;
227         }
228
229       close (file->fd);
230       file->fd = -1;
231     }
232   else if (errno == ENOTDIR)
233     errno = ENOENT;
234
235   file->err_no = errno;
236
237   return false;
238 }
239
240 /* Temporary PCH intercept of opening a file.  Try to find a PCH file
241    based on FILE->name and FILE->dir, and test those found for
242    validity using PFILE->cb.valid_pch.  Return true iff a valid file is
243    found.  Set *INVALID_PCH if a PCH file is found but wasn't valid.  */
244
245 static bool
246 pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
247 {
248   static const char extension[] = ".gch";
249   const char *path = file->path;
250   size_t len, flen;
251   char *pchname;
252   struct stat st;
253   bool valid = false;
254
255   /* No PCH on <stdin> or if not requested.  */
256   if (file->name[0] == '\0' || !pfile->cb.valid_pch)
257     return false;
258
259   flen = strlen (path);
260   len = flen + sizeof (extension);
261   pchname = xmalloc (len);
262   memcpy (pchname, path, flen);
263   memcpy (pchname + flen, extension, sizeof (extension));
264
265   if (stat (pchname, &st) == 0)
266     {
267       DIR *pchdir;
268       struct dirent *d;
269       size_t dlen, plen = len;
270
271       if (!S_ISDIR (st.st_mode))
272         valid = validate_pch (pfile, file, pchname);
273       else if ((pchdir = opendir (pchname)) != NULL)
274         {
275           pchname[plen - 1] = '/';
276           while ((d = readdir (pchdir)) != NULL)
277             {
278               dlen = strlen (d->d_name) + 1;
279               if ((strcmp (d->d_name, ".") == 0)
280                   || (strcmp (d->d_name, "..") == 0))
281                 continue;
282               if (dlen + plen > len)
283                 {
284                   len += dlen + 64;
285                   pchname = xrealloc (pchname, len);
286                 }
287               memcpy (pchname + plen, d->d_name, dlen);
288               valid = validate_pch (pfile, file, pchname);
289               if (valid)
290                 break;
291             }
292           closedir (pchdir);
293         }
294       if (valid)
295         file->pch = true;
296       else
297         *invalid_pch = true;
298     }
299
300   if (valid)
301     file->pchname = pchname;
302   else
303     free (pchname);
304
305   return valid;
306 }
307
308 /* Try to open the path FILE->name appended to FILE->dir.  This is
309    where remap and PCH intercept the file lookup process.  Return true
310    if the file was found, whether or not the open was successful.  
311    Set *INVALID_PCH to true if a PCH file is found but wasn't valid.  */
312
313 static bool
314 find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
315 {
316   char *path;
317
318   if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
319     ;
320   else
321     path = append_file_to_dir (file->name, file->dir);
322
323   file->path = path;
324   if (pch_open_file (pfile, file, invalid_pch))
325     return true;
326
327   if (open_file (file))
328     return true;
329
330   if (file->err_no != ENOENT)
331     {
332       open_file_failed (pfile, file);
333       return true;
334     }
335
336   free (path);
337   file->path = file->name;
338   return false;
339 }
340
341 bool
342 _cpp_find_failed (_cpp_file *file)
343 {
344   return file->err_no != 0;
345 }
346
347 /* Given a filename FNAME search for such a file in the include path
348    starting from START_DIR.  If FNAME is the empty string it is
349    interpreted as STDIN if START_DIR is PFILE->no_seach_path.
350
351    If the file is not found in the file cache fall back to the O/S and
352    add the result to our cache.
353
354    If the file was not found in the filesystem, or there was an error
355    opening it, then ERR_NO is nonzero and FD is -1.  If the file was
356    found, then ERR_NO is zero and FD could be -1 or an open file
357    descriptor.  FD can be -1 if the file was found in the cache and
358    had previously been closed.  To open it again pass the return value
359    to open_file().
360 */
361 _cpp_file *
362 _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake)
363 {
364   struct file_hash_entry *entry, **hash_slot;
365   _cpp_file *file;
366   bool invalid_pch = false;
367
368   /* Ensure we get no confusion between cached files and directories.  */
369   if (start_dir == NULL)
370     cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
371
372   hash_slot = (struct file_hash_entry **)
373     htab_find_slot_with_hash (pfile->file_hash, fname,
374                               htab_hash_string (fname),
375                               INSERT);
376
377   /* First check the cache before we resort to memory allocation.  */
378   entry = search_cache (*hash_slot, start_dir);
379   if (entry)
380     return entry->u.file;
381
382   file = make_cpp_file (pfile, start_dir, fname);
383
384   /* Try each path in the include chain.  */
385   for (; !fake ;)
386     {
387       if (find_file_in_dir (pfile, file, &invalid_pch))
388         break;
389
390       file->dir = file->dir->next;
391       if (file->dir == NULL)
392         {
393           open_file_failed (pfile, file);
394           if (invalid_pch)
395             {
396               cpp_error (pfile, CPP_DL_ERROR, 
397                "one or more PCH files were found, but they were invalid");
398               if (!cpp_get_options (pfile)->warn_invalid_pch)
399                 cpp_error (pfile, CPP_DL_ERROR, 
400                            "use -Winvalid-pch for more information");
401             }
402           break;
403         }
404
405       /* Only check the cache for the starting location (done above)
406          and the quote and bracket chain heads because there are no
407          other possible starting points for searches.  */
408       if (file->dir != pfile->bracket_include
409           && file->dir != pfile->quote_include)
410         continue;
411
412       entry = search_cache (*hash_slot, file->dir);
413       if (entry)
414         break;
415     }
416
417   if (entry)
418     {
419       /* Cache for START_DIR too, sharing the _cpp_file structure.  */
420       free ((char *) file->name);
421       free (file);
422       file = entry->u.file;
423     }
424   else
425     {
426       /* This is a new file; put it in the list.  */
427       file->next_file = pfile->all_files;
428       pfile->all_files = file;
429     }
430
431   /* Store this new result in the hash table.  */
432   entry = new_file_hash_entry (pfile);
433   entry->next = *hash_slot;
434   entry->start_dir = start_dir;
435   entry->u.file = file;
436   *hash_slot = entry;
437
438   return file;
439 }
440
441 /* Read a file into FILE->buffer, returning true on success.
442
443    If FILE->fd is something weird, like a block device, we don't want
444    to read it at all.  Don't even try to figure out what something is,
445    except for plain files and block devices, since there is no
446    reliable portable way of doing this.
447
448    FIXME: Flush file cache and try again if we run out of memory.  */
449 static bool
450 read_file_guts (cpp_reader *pfile, _cpp_file *file)
451 {
452   ssize_t size, total, count;
453   uchar *buf;
454   bool regular;
455   
456   if (S_ISBLK (file->st.st_mode))
457     {
458       cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
459       return false;
460     }
461
462   regular = S_ISREG (file->st.st_mode);
463   if (regular)
464     {
465       /* off_t might have a wider range than ssize_t - in other words,
466          the max size of a file might be bigger than the address
467          space.  We can't handle a file that large.  (Anyone with
468          a single source file bigger than 2GB needs to rethink
469          their coding style.)  Some systems (e.g. AIX 4.1) define
470          SSIZE_MAX to be much smaller than the actual range of the
471          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
472          does not bite us.  */
473       if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
474         {
475           cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
476           return false;
477         }
478
479       size = file->st.st_size;
480     }
481   else
482     /* 8 kilobytes is a sensible starting size.  It ought to be bigger
483        than the kernel pipe buffer, and it's definitely bigger than
484        the majority of C source files.  */
485     size = 8 * 1024;
486
487   buf = xmalloc (size + 1);
488   total = 0;
489   while ((count = read (file->fd, buf + total, size - total)) > 0)
490     {
491       total += count;
492
493       if (total == size)
494         {
495           if (regular)
496             break;
497           size *= 2;
498           buf = xrealloc (buf, size + 1);
499         }
500     }
501
502   if (count < 0)
503     {
504       cpp_errno (pfile, CPP_DL_ERROR, file->path);
505       return false;
506     }
507
508   if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
509     cpp_error (pfile, CPP_DL_WARNING,
510                "%s is shorter than expected", file->path);
511
512   file->buffer = _cpp_convert_input (pfile, CPP_OPTION (pfile, input_charset),
513                                      buf, size, total, &file->st.st_size);
514   file->buffer_valid = true;
515
516   return true;
517 }
518
519 /* Convenience wrapper around read_file_guts that opens the file if
520    necessary and closes the file descriptor after reading.  FILE must
521    have been passed through find_file() at some stage.  */
522 static bool
523 read_file (cpp_reader *pfile, _cpp_file *file)
524 {
525   /* If we already have its contents in memory, succeed immediately.  */
526   if (file->buffer_valid)
527     return true;
528
529   /* If an earlier read failed for some reason don't try again.  */
530   if (file->dont_read || file->err_no)
531     return false;
532
533   if (file->fd == -1 && !open_file (file))
534     {
535       open_file_failed (pfile, file);
536       return false;
537     }
538
539   file->dont_read = !read_file_guts (pfile, file);
540   close (file->fd);
541   file->fd = -1;
542
543   return !file->dont_read;
544 }
545
546 /* Returns TRUE if FILE's contents have been successfully placed in
547    FILE->buffer and the file should be stacked, otherwise false.  */
548 static bool
549 should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
550 {
551   _cpp_file *f;
552
553   /* Skip once-only files.  */
554   if (file->once_only)
555     return false;
556
557   /* We must mark the file once-only if #import now, before header 
558      guard checks.  Otherwise, undefining the header guard might
559      cause the file to be re-stacked.  */
560   if (import)
561     {
562       _cpp_mark_file_once_only (pfile, file);
563
564       /* Don't stack files that have been stacked before.  */
565       if (file->stack_count)
566         return false;
567     }
568
569   /* Skip if the file had a header guard and the macro is defined.
570      PCH relies on this appearing before the PCH handler below.  */
571   if (file->cmacro && file->cmacro->type == NT_MACRO)
572     return false;
573
574   /* Handle PCH files immediately; don't stack them.  */
575   if (include_pch_p (file))
576     {
577       pfile->cb.read_pch (pfile, file->path, file->fd, file->pchname);
578       close (file->fd);
579       file->fd = -1;
580       return false;
581     }
582
583   if (!read_file (pfile, file))
584     return false;
585
586   /* Now we've read the file's contents, we can stack it if there
587      are no once-only files.  */
588   if (!pfile->seen_once_only)
589     return true;
590
591   /* We may have read the file under a different name.  Look
592      for likely candidates and compare file contents to be sure.  */
593   for (f = pfile->all_files; f; f = f->next_file)
594     {
595       if (f == file)
596         continue;
597
598       if ((import || f->once_only)
599           && f->err_no == 0
600           && f->st.st_mtime == file->st.st_mtime
601           && f->st.st_size == file->st.st_size
602           && read_file (pfile, f)
603           /* Size might have changed in read_file().  */
604           && f->st.st_size == file->st.st_size
605           && !memcmp (f->buffer, file->buffer, f->st.st_size))
606         break;
607     }
608
609   return f == NULL;
610 }
611
612 /* Place the file referenced by FILE into a new buffer on the buffer
613    stack if possible.  IMPORT is true if this stacking attempt is
614    because of a #import directive.  Returns true if a buffer is
615    stacked.  */
616 bool
617 _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
618 {
619   cpp_buffer *buffer;
620   int sysp;
621
622   if (!should_stack_file (pfile, file, import))
623       return false;
624
625   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
626               (file->dir ? file->dir->sysp : 0));
627
628   /* Add the file to the dependencies on its first inclusion.  */
629   if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
630     {
631       if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
632         deps_add_dep (pfile->deps, file->path);
633     }
634
635   /* Clear buffer_valid since _cpp_clean_line messes it up.  */
636   file->buffer_valid = false;
637   file->stack_count++;
638
639   /* Stack the buffer.  */
640   buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
641                             CPP_OPTION (pfile, preprocessed));
642   buffer->file = file;
643
644   /* Initialize controlling macro state.  */
645   pfile->mi_valid = true;
646   pfile->mi_cmacro = 0;
647
648   /* Generate the call back.  */
649   _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
650
651   return true;
652 }
653
654 /* Mark FILE to be included once only.  */
655 void
656 _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
657 {
658   pfile->seen_once_only = true;
659   file->once_only = true;
660 }
661
662 /* Return the directory from which searching for FNAME should start,
663    considering the directive TYPE and ANGLE_BRACKETS.  If there is
664    nothing left in the path, returns NULL.  */
665 static struct cpp_dir *
666 search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
667                   enum include_type type)
668 {
669   cpp_dir *dir;
670   _cpp_file *file;
671
672   if (IS_ABSOLUTE_PATH (fname))
673     return &pfile->no_search_path;
674
675   /* pfile->buffer is NULL when processing an -include command-line flag.  */
676   file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
677
678   /* For #include_next, skip in the search path past the dir in which
679      the current file was found, but if it was found via an absolute
680      path use the normal search logic.  */
681   if (type == IT_INCLUDE_NEXT && file->dir)
682     dir = file->dir->next;
683   else if (angle_brackets)
684     dir = pfile->bracket_include;
685   else if (type == IT_CMDLINE)
686     /* -include and -imacros use the #include "" chain with the
687        preprocessor's cwd prepended.  */
688     return make_cpp_dir (pfile, "./", false);
689   else if (pfile->quote_ignores_source_dir)
690     dir = pfile->quote_include;
691   else
692     return make_cpp_dir (pfile, dir_name_of_file (file), pfile->map->sysp);
693
694   if (dir == NULL)
695     cpp_error (pfile, CPP_DL_ERROR,
696                "no include path in which to search for %s", fname);
697
698   return dir;
699 }
700
701 /* Strip the basename from the file's path.  It ends with a slash if
702    of nonzero length.  Note that this procedure also works for
703    <stdin>, which is represented by the empty string.  */
704 static const char *
705 dir_name_of_file (_cpp_file *file)
706 {
707   if (!file->dir_name)
708     {
709       size_t len = lbasename (file->path) - file->path;
710       char *dir_name = xmalloc (len + 1);
711
712       memcpy (dir_name, file->path, len);
713       dir_name[len] = '\0';
714       file->dir_name = dir_name;
715     }
716
717   return file->dir_name;
718 }
719
720 /* Handles #include-family directives (distinguished by TYPE),
721    including HEADER, and the command line -imacros and -include.
722    Returns true if a buffer was stacked.  */
723 bool
724 _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
725                     enum include_type type)
726 {
727   struct cpp_dir *dir;
728
729   dir = search_path_head (pfile, fname, angle_brackets, type);
730   if (!dir)
731     return false;
732
733   return _cpp_stack_file (pfile, _cpp_find_file (pfile, fname, dir, false),
734                      type == IT_IMPORT);
735 }
736
737 /* Could not open FILE.  The complication is dependency output.  */
738 static void
739 open_file_failed (cpp_reader *pfile, _cpp_file *file)
740 {
741   int sysp = pfile->map ? pfile->map->sysp: 0;
742   bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
743
744   errno = file->err_no;
745   if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
746     deps_add_dep (pfile->deps, file->name);
747   else
748     {
749       /* If we are outputting dependencies but not for this file then
750          don't error because we can still produce correct output.  */
751       if (CPP_OPTION (pfile, deps.style) && ! print_dep)
752         cpp_errno (pfile, CPP_DL_WARNING, file->path);
753       else
754         cpp_errno (pfile, CPP_DL_ERROR, file->path);
755     }
756 }
757
758 /* Search in the chain beginning at HEAD for a file whose search path
759    started at START_DIR != NULL.  */
760 static struct file_hash_entry *
761 search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
762 {
763   while (head && head->start_dir != start_dir)
764     head = head->next;
765
766   return head;
767 }
768
769 /* Allocate a new _cpp_file structure.  */
770 static _cpp_file *
771 make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
772 {
773   _cpp_file *file;
774
775   file = xcalloc (1, sizeof (_cpp_file));
776   file->main_file = !pfile->buffer;
777   file->fd = -1;
778   file->dir = dir;
779   file->name = xstrdup (fname);
780
781   return file;
782 }
783
784 /* A hash of directory names.  The directory names are the path names
785    of files which contain a #include "", the included file name is
786    appended to this directories.
787
788    To avoid duplicate entries we follow the convention that all
789    non-empty directory names should end in a '/'.  DIR_NAME must be
790    stored in permanently allocated memory.  */
791 static cpp_dir *
792 make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
793 {
794   struct file_hash_entry *entry, **hash_slot;
795   cpp_dir *dir;
796
797   hash_slot = (struct file_hash_entry **)
798     htab_find_slot_with_hash (pfile->file_hash, dir_name,
799                               htab_hash_string (dir_name),
800                               INSERT);
801
802   /* Have we already hashed this directory?  */
803   for (entry = *hash_slot; entry; entry = entry->next)
804     if (entry->start_dir == NULL)
805       return entry->u.dir;
806
807   dir = xcalloc (1, sizeof (cpp_dir));
808   dir->next = pfile->quote_include;
809   dir->name = (char *) dir_name;
810   dir->len = strlen (dir_name);
811   dir->sysp = sysp;
812
813   /* Store this new result in the hash table.  */
814   entry = new_file_hash_entry (pfile);
815   entry->next = *hash_slot;
816   entry->start_dir = NULL;
817   entry->u.dir = dir;
818   *hash_slot = entry;
819
820   return dir;
821 }
822
823 /* Create a new block of memory for file hash entries.  */
824 static void
825 allocate_file_hash_entries (cpp_reader *pfile)
826 {
827   pfile->file_hash_entries_used = 0;
828   pfile->file_hash_entries_allocated = 127;
829   pfile->file_hash_entries = xmalloc
830     (pfile->file_hash_entries_allocated * sizeof (struct file_hash_entry));
831 }
832
833 /* Return a new file hash entry.  */
834 static struct file_hash_entry *
835 new_file_hash_entry (cpp_reader *pfile)
836 {
837   if (pfile->file_hash_entries_used == pfile->file_hash_entries_allocated)
838     allocate_file_hash_entries (pfile);
839
840   return &pfile->file_hash_entries[pfile->file_hash_entries_used++];
841 }
842
843 /* Returns TRUE if a file FNAME has ever been successfully opened.
844    This routine is not intended to correctly handle filenames aliased
845    by links or redundant . or .. traversals etc.  */
846 bool
847 cpp_included (cpp_reader *pfile, const char *fname)
848 {
849   struct file_hash_entry *entry;
850
851   entry = htab_find_with_hash (pfile->file_hash, fname,
852                                htab_hash_string (fname));
853
854   while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
855     entry = entry->next;
856
857   return entry != NULL;
858 }
859
860 /* Calculate the hash value of a file hash entry P.  */
861
862 static hashval_t
863 file_hash_hash (const void *p)
864 {
865   struct file_hash_entry *entry = (struct file_hash_entry *) p;
866   const char *hname;
867   if (entry->start_dir)
868     hname = entry->u.file->name;
869   else
870     hname = entry->u.dir->name;
871
872   return htab_hash_string (hname);
873 }
874
875 /* Compare a string Q against a file hash entry P.  */
876 static int
877 file_hash_eq (const void *p, const void *q)
878 {
879   struct file_hash_entry *entry = (struct file_hash_entry *) p;
880   const char *fname = (const char *) q;
881   const char *hname;
882
883   if (entry->start_dir)
884     hname = entry->u.file->name;
885   else
886     hname = entry->u.dir->name;
887
888   return strcmp (hname, fname) == 0;
889 }
890
891 /* Initialize everything in this source file.  */
892 void
893 _cpp_init_files (cpp_reader *pfile)
894 {
895   pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
896                                         NULL, xcalloc, free);
897   allocate_file_hash_entries (pfile);
898 }
899
900 /* Finalize everything in this source file.  */
901 void
902 _cpp_cleanup_files (cpp_reader *pfile)
903 {
904   htab_delete (pfile->file_hash);
905 }
906
907 /* Enter a file name in the hash for the sake of cpp_included.  */
908 void
909 _cpp_fake_include (cpp_reader *pfile, const char *fname)
910 {
911   _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true);
912 }
913
914 /* Not everyone who wants to set system-header-ness on a buffer can
915    see the details of a buffer.  This is an exported interface because
916    fix-header needs it.  */
917 void
918 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
919 {
920   int flags = 0;
921
922   /* 1 = system header, 2 = system header to be treated as C.  */
923   if (syshdr)
924     flags = 1 + (externc != 0);
925   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
926                        SOURCE_LINE (pfile->map, pfile->line), flags);
927 }
928
929 /* Allow the client to change the current file.  Used by the front end
930    to achieve pseudo-file names like <built-in>.
931    If REASON is LC_LEAVE, then NEW_NAME must be NULL.  */
932 void
933 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
934                  const char *new_name)
935 {
936   _cpp_do_file_change (pfile, reason, new_name, 1, 0);
937 }
938
939 /* Callback function for htab_traverse.  */
940 static int
941 report_missing_guard (void **slot, void *b)
942 {
943   struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
944   int *bannerp = (int *) b;
945
946   /* Skip directories.  */
947   if (entry->start_dir != NULL)
948     {
949       _cpp_file *file = entry->u.file;
950
951       /* We don't want MI guard advice for the main file.  */
952       if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
953         {
954           if (*bannerp == 0)
955             {
956               fputs (_("Multiple include guards may be useful for:\n"),
957                      stderr);
958               *bannerp = 1;
959             }
960
961           fputs (entry->u.file->path, stderr);
962           putc ('\n', stderr);
963         }
964     }
965
966   return 0;
967 }
968
969 /* Report on all files that might benefit from a multiple include guard.
970    Triggered by -H.  */
971 void
972 _cpp_report_missing_guards (cpp_reader *pfile)
973 {
974   int banner = 0;
975
976   htab_traverse (pfile->file_hash, report_missing_guard, &banner);
977 }
978
979 /* Locate HEADER, and determine whether it is newer than the current
980    file.  If it cannot be located or dated, return -1, if it is
981    newer, return 1, otherwise 0.  */
982 int
983 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
984                         int angle_brackets)
985 {
986   _cpp_file *file;
987   struct cpp_dir *dir;
988
989   dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
990   if (!dir)
991     return -1;
992
993   file = _cpp_find_file (pfile, fname, dir, false);
994   if (file->err_no)
995     return -1;
996
997   if (file->fd != -1)
998     {
999       close (file->fd);
1000       file->fd = -1;
1001     }
1002
1003   return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1004 }
1005
1006 /* Pushes the given file onto the buffer stack.  Returns nonzero if
1007    successful.  */
1008 bool
1009 cpp_push_include (cpp_reader *pfile, const char *fname)
1010 {
1011   /* Make the command line directive take up a line.  */
1012   pfile->line++;
1013   return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
1014 }
1015
1016 /* Do appropriate cleanup when a file INC's buffer is popped off the
1017    input stack.  */
1018 void
1019 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
1020 {
1021   /* Record the inclusion-preventing macro, which could be NULL
1022      meaning no controlling macro.  */
1023   if (pfile->mi_valid && file->cmacro == NULL)
1024     file->cmacro = pfile->mi_cmacro;
1025
1026   /* Invalidate control macros in the #including file.  */
1027   pfile->mi_valid = false;
1028
1029   if (file->buffer)
1030     {
1031       free ((void *) file->buffer);
1032       file->buffer = NULL;
1033     }
1034 }
1035
1036 /* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
1037    QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1038    directory of the including file.
1039
1040    If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
1041 void
1042 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1043                         int quote_ignores_source_dir)
1044 {
1045   pfile->quote_include = quote;
1046   pfile->bracket_include = quote;
1047   pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1048
1049   for (; quote; quote = quote->next)
1050     {
1051       quote->name_map = NULL;
1052       quote->len = strlen (quote->name);
1053       if (quote == bracket)
1054         pfile->bracket_include = bracket;
1055     }
1056 }
1057
1058 /* Append the file name to the directory to create the path, but don't
1059    turn / into // or // into ///; // may be a namespace escape.  */
1060 static char *
1061 append_file_to_dir (const char *fname, cpp_dir *dir)
1062 {
1063   size_t dlen, flen;
1064   char *path;
1065
1066   dlen = dir->len;
1067   flen = strlen (fname);
1068   path = xmalloc (dlen + 1 + flen + 1);
1069   memcpy (path, dir->name, dlen);
1070   if (dlen && path[dlen - 1] != '/')
1071     path[dlen++] = '/';
1072   memcpy (&path[dlen], fname, flen + 1);
1073
1074   return path;
1075 }
1076
1077 /* Read a space delimited string of unlimited length from a stdio
1078    file F.  */
1079 static char *
1080 read_filename_string (int ch, FILE *f)
1081 {
1082   char *alloc, *set;
1083   int len;
1084
1085   len = 20;
1086   set = alloc = xmalloc (len + 1);
1087   if (! is_space (ch))
1088     {
1089       *set++ = ch;
1090       while ((ch = getc (f)) != EOF && ! is_space (ch))
1091         {
1092           if (set - alloc == len)
1093             {
1094               len *= 2;
1095               alloc = xrealloc (alloc, len + 1);
1096               set = alloc + len / 2;
1097             }
1098           *set++ = ch;
1099         }
1100     }
1101   *set = '\0';
1102   ungetc (ch, f);
1103   return alloc;
1104 }
1105
1106 /* Read the file name map file for DIR.  */
1107 static void
1108 read_name_map (cpp_dir *dir)
1109 {
1110   static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1111   char *name;
1112   FILE *f;
1113   size_t len, count = 0, room = 9;
1114
1115   len = dir->len;
1116   name = alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1117   memcpy (name, dir->name, len);
1118   if (len && name[len - 1] != '/')
1119     name[len++] = '/';
1120   strcpy (name + len, FILE_NAME_MAP_FILE);
1121   f = fopen (name, "r");
1122
1123   dir->name_map = xmalloc (room * sizeof (char *));
1124
1125   /* Silently return NULL if we cannot open.  */
1126   if (f)
1127     {
1128       int ch;
1129
1130       while ((ch = getc (f)) != EOF)
1131         {
1132           char *to;
1133
1134           if (is_space (ch))
1135             continue;
1136
1137           if (count + 2 > room)
1138             {
1139               room += 8;
1140               dir->name_map = xrealloc (dir->name_map, room * sizeof (char *));
1141             }
1142
1143           dir->name_map[count] = read_filename_string (ch, f);
1144           while ((ch = getc (f)) != EOF && is_hspace (ch))
1145             ;
1146
1147           to = read_filename_string (ch, f);
1148           if (IS_ABSOLUTE_PATH (to))
1149             dir->name_map[count + 1] = to;
1150           else
1151             {
1152               dir->name_map[count + 1] = append_file_to_dir (to, dir);
1153               free (to);
1154             }
1155
1156           count += 2;
1157           while ((ch = getc (f)) != '\n')
1158             if (ch == EOF)
1159               break;
1160         }
1161
1162       fclose (f);
1163     }
1164
1165   /* Terminate the list of maps.  */
1166   dir->name_map[count] = NULL;
1167 }
1168
1169 /* Remap a FILE's name based on the file_name_map, if any, for
1170    FILE->dir.  If the file name has any directory separators,
1171    recursively check those directories too.  */
1172 static char *
1173 remap_filename (cpp_reader *pfile, _cpp_file *file)
1174 {
1175   const char *fname, *p;
1176   char *new_dir;
1177   cpp_dir *dir;
1178   size_t index, len;
1179
1180   dir = file->dir;
1181   fname = file->name;
1182
1183   for (;;)
1184     {
1185       if (!dir->name_map)
1186         read_name_map (dir);
1187
1188       for (index = 0; dir->name_map[index]; index += 2)
1189         if (!strcmp (dir->name_map[index], fname))
1190             return xstrdup (dir->name_map[index + 1]);
1191
1192       p = strchr (fname, '/');
1193       if (!p || p == fname)
1194         return NULL;
1195
1196       len = dir->len + (p - fname + 1);
1197       new_dir = xmalloc (len + 1);
1198       memcpy (new_dir, dir->name, dir->len);
1199       memcpy (new_dir + dir->len, fname, p - fname + 1);
1200       new_dir[len] = '\0';
1201
1202       dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1203       fname = p + 1;
1204     }
1205 }
1206
1207 /* Return true if FILE is usable by PCH.  */
1208 static bool
1209 include_pch_p (_cpp_file *file)
1210 {
1211   return file->pch & 1;
1212 }
1213
1214 /* Returns true if PCHNAME is a valid PCH file for FILE.  */
1215 static bool
1216 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1217 {
1218   const char *saved_path = file->path;
1219   bool valid = false;
1220
1221   file->path = pchname;
1222   if (open_file (file))
1223     {
1224       valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1225
1226       if (!valid)
1227         {
1228           close (file->fd);
1229           file->fd = -1;
1230         }
1231
1232       if (CPP_OPTION (pfile, print_include_names))
1233         {
1234           unsigned int i;
1235           for (i = 1; i < pfile->line_maps.depth; i++)
1236             putc ('.', stderr);
1237           fprintf (stderr, "%c %s\n",
1238                    valid ? '!' : 'x', pchname);
1239         }
1240     }
1241
1242   file->path = saved_path;
1243   return valid;
1244 }