OSDN Git Service

cp:
[pf3gnuchains/gcc-fork.git] / 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 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       file->pch |= valid;
295       *invalid_pch |= ! valid;
296     }
297
298   if (valid)
299     file->pchname = pchname;
300   else
301     free (pchname);
302
303   return valid;
304 }
305
306 /* Try to open the path FILE->name appended to FILE->dir.  This is
307    where remap and PCH intercept the file lookup process.  Return true
308    if the file was found, whether or not the open was successful.  
309    Set *INVALID_PCH to true if a PCH file is found but wasn't valid.  */
310
311 static bool
312 find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
313 {
314   char *path;
315
316   if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
317     ;
318   else
319     path = append_file_to_dir (file->name, file->dir);
320
321   file->path = path;
322   if (pch_open_file (pfile, file, invalid_pch))
323     return true;
324
325   if (open_file (file))
326     return true;
327
328   if (file->err_no != ENOENT)
329     {
330       open_file_failed (pfile, file);
331       return true;
332     }
333
334   free (path);
335   file->path = file->name;
336   return false;
337 }
338
339 bool
340 _cpp_find_failed (_cpp_file *file)
341 {
342   return file->err_no != 0;
343 }
344
345 /* Given a filename FNAME search for such a file in the include path
346    starting from START_DIR.  If FNAME is the empty string it is
347    interpreted as STDIN if START_DIR is PFILE->no_seach_path.
348
349    If the file is not found in the file cache fall back to the O/S and
350    add the result to our cache.
351
352    If the file was not found in the filesystem, or there was an error
353    opening it, then ERR_NO is nonzero and FD is -1.  If the file was
354    found, then ERR_NO is zero and FD could be -1 or an open file
355    descriptor.  FD can be -1 if the file was found in the cache and
356    had previously been closed.  To open it again pass the return value
357    to open_file().
358 */
359 _cpp_file *
360 _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake)
361 {
362   struct file_hash_entry *entry, **hash_slot;
363   _cpp_file *file;
364   bool invalid_pch = false;
365
366   /* Ensure we get no confusion between cached files and directories.  */
367   if (start_dir == NULL)
368     cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
369
370   hash_slot = (struct file_hash_entry **)
371     htab_find_slot_with_hash (pfile->file_hash, fname,
372                               htab_hash_string (fname),
373                               INSERT);
374
375   /* First check the cache before we resort to memory allocation.  */
376   entry = search_cache (*hash_slot, start_dir);
377   if (entry)
378     return entry->u.file;
379
380   file = make_cpp_file (pfile, start_dir, fname);
381
382   /* Try each path in the include chain.  */
383   for (; !fake ;)
384     {
385       if (find_file_in_dir (pfile, file, &invalid_pch))
386         break;
387
388       file->dir = file->dir->next;
389       if (file->dir == NULL)
390         {
391           open_file_failed (pfile, file);
392           if (invalid_pch)
393             {
394               cpp_error (pfile, CPP_DL_ERROR, 
395                "one or more PCH files were found, but they were invalid");
396               if (!cpp_get_options (pfile)->warn_invalid_pch)
397                 cpp_error (pfile, CPP_DL_ERROR, 
398                            "use -Winvalid-pch for more information");
399             }
400           break;
401         }
402
403       /* Only check the cache for the starting location (done above)
404          and the quote and bracket chain heads because there are no
405          other possible starting points for searches.  */
406       if (file->dir != pfile->bracket_include
407           && file->dir != pfile->quote_include)
408         continue;
409
410       entry = search_cache (*hash_slot, file->dir);
411       if (entry)
412         break;
413     }
414
415   if (entry)
416     {
417       /* Cache for START_DIR too, sharing the _cpp_file structure.  */
418       free ((char *) file->name);
419       free (file);
420       file = entry->u.file;
421     }
422   else
423     {
424       /* This is a new file; put it in the list.  */
425       file->next_file = pfile->all_files;
426       pfile->all_files = file;
427     }
428
429   /* Store this new result in the hash table.  */
430   entry = new_file_hash_entry (pfile);
431   entry->next = *hash_slot;
432   entry->start_dir = start_dir;
433   entry->u.file = file;
434   *hash_slot = entry;
435
436   return file;
437 }
438
439 /* Read a file into FILE->buffer, returning true on success.
440
441    If FILE->fd is something weird, like a block device, we don't want
442    to read it at all.  Don't even try to figure out what something is,
443    except for plain files and block devices, since there is no
444    reliable portable way of doing this.
445
446    FIXME: Flush file cache and try again if we run out of memory.  */
447 static bool
448 read_file_guts (cpp_reader *pfile, _cpp_file *file)
449 {
450   ssize_t size, total, count;
451   uchar *buf;
452   bool regular;
453   
454   if (S_ISBLK (file->st.st_mode))
455     {
456       cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
457       return false;
458     }
459
460   regular = S_ISREG (file->st.st_mode);
461   if (regular)
462     {
463       /* off_t might have a wider range than ssize_t - in other words,
464          the max size of a file might be bigger than the address
465          space.  We can't handle a file that large.  (Anyone with
466          a single source file bigger than 2GB needs to rethink
467          their coding style.)  Some systems (e.g. AIX 4.1) define
468          SSIZE_MAX to be much smaller than the actual range of the
469          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
470          does not bite us.  */
471       if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
472         {
473           cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
474           return false;
475         }
476
477       size = file->st.st_size;
478     }
479   else
480     /* 8 kilobytes is a sensible starting size.  It ought to be bigger
481        than the kernel pipe buffer, and it's definitely bigger than
482        the majority of C source files.  */
483     size = 8 * 1024;
484
485   buf = xmalloc (size + 1);
486   total = 0;
487   while ((count = read (file->fd, buf + total, size - total)) > 0)
488     {
489       total += count;
490
491       if (total == size)
492         {
493           if (regular)
494             break;
495           size *= 2;
496           buf = xrealloc (buf, size + 1);
497         }
498     }
499
500   if (count < 0)
501     {
502       cpp_errno (pfile, CPP_DL_ERROR, file->path);
503       return false;
504     }
505
506   if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
507     cpp_error (pfile, CPP_DL_WARNING,
508                "%s is shorter than expected", file->path);
509
510   /* Shrink buffer if we allocated substantially too much.  */
511   if (total + 4096 < size)
512     buf = xrealloc (buf, total + 1);
513
514   /* The lexer requires that the buffer be \n-terminated.  */
515   buf[total] = '\n';
516
517   file->buffer = buf;
518   file->st.st_size = total;
519   file->buffer_valid = true;
520
521   return true;
522 }
523
524 /* Convenience wrapper around read_file_guts that opens the file if
525    necessary and closes the file descriptor after reading.  FILE must
526    have been passed through find_file() at some stage.  */
527 static bool
528 read_file (cpp_reader *pfile, _cpp_file *file)
529 {
530   /* If we already have its contents in memory, succeed immediately.  */
531   if (file->buffer_valid)
532     return true;
533
534   /* If an earlier read failed for some reason don't try again.  */
535   if (file->dont_read || file->err_no)
536     return false;
537
538   if (file->fd == -1 && !open_file (file))
539     {
540       open_file_failed (pfile, file);
541       return false;
542     }
543
544   file->dont_read = !read_file_guts (pfile, file);
545   close (file->fd);
546   file->fd = -1;
547
548   return !file->dont_read;
549 }
550
551 /* Returns TRUE if FILE's contents have been successfully placed in
552    FILE->buffer and the file should be stacked, otherwise false.  */
553 static bool
554 should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
555 {
556   _cpp_file *f;
557
558   /* Skip once-only files.  */
559   if (file->once_only)
560     return false;
561
562   /* We must mark the file once-only if #import now, before header 
563      guard checks.  Otherwise, undefining the header guard might
564      cause the file to be re-stacked.  */
565   if (import)
566     {
567       _cpp_mark_file_once_only (pfile, file);
568
569       /* Don't stack files that have been stacked before.  */
570       if (file->stack_count)
571         return false;
572     }
573
574   /* Skip if the file had a header guard and the macro is defined.
575      PCH relies on this appearing before the PCH handler below.  */
576   if (file->cmacro && file->cmacro->type == NT_MACRO)
577     return false;
578
579   /* Handle PCH files immediately; don't stack them.  */
580   if (include_pch_p (file))
581     {
582       pfile->cb.read_pch (pfile, file->path, file->fd, file->pchname);
583       close (file->fd);
584       file->fd = -1;
585       return false;
586     }
587
588   if (!read_file (pfile, file))
589     return false;
590
591   /* Now we've read the file's contents, we can stack it if there
592      are no once-only files.  */
593   if (!pfile->seen_once_only)
594     return true;
595
596   /* We may have read the file under a different name.  Look
597      for likely candidates and compare file contents to be sure.  */
598   for (f = pfile->all_files; f; f = f->next_file)
599     {
600       if (f == file)
601         continue;
602
603       if ((import || f->once_only)
604           && f->err_no == 0
605           && f->st.st_mtime == file->st.st_mtime
606           && f->st.st_size == file->st.st_size
607           && read_file (pfile, f)
608           /* Size might have changed in read_file().  */
609           && f->st.st_size == file->st.st_size
610           && !memcmp (f->buffer, file->buffer, f->st.st_size))
611         break;
612     }
613
614   return f == NULL;
615 }
616
617 /* Place the file referenced by FILE into a new buffer on the buffer
618    stack if possible.  IMPORT is true if this stacking attempt is
619    because of a #import directive.  Returns true if a buffer is
620    stacked.  */
621 bool
622 _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
623 {
624   cpp_buffer *buffer;
625   int sysp;
626
627   if (!should_stack_file (pfile, file, import))
628       return false;
629
630   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
631               (file->dir ? file->dir->sysp : 0));
632
633   /* Add the file to the dependencies on its first inclusion.  */
634   if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
635     {
636       if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
637         deps_add_dep (pfile->deps, file->path);
638     }
639
640   /* Clear buffer_valid since _cpp_clean_line messes it up.  */
641   file->buffer_valid = false;
642   file->stack_count++;
643
644   /* Stack the buffer.  */
645   buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
646                             CPP_OPTION (pfile, preprocessed));
647   buffer->file = file;
648
649   /* Initialize controlling macro state.  */
650   pfile->mi_valid = true;
651   pfile->mi_cmacro = 0;
652
653   /* Generate the call back.  */
654   _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
655
656   return true;
657 }
658
659 /* Mark FILE to be included once only.  */
660 void
661 _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
662 {
663   pfile->seen_once_only = true;
664   file->once_only = true;
665 }
666
667 /* Return the directory from which searching for FNAME should start,
668    considering the directive TYPE and ANGLE_BRACKETS.  If there is
669    nothing left in the path, returns NULL.  */
670 static struct cpp_dir *
671 search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
672                   enum include_type type)
673 {
674   cpp_dir *dir;
675   _cpp_file *file;
676
677   if (IS_ABSOLUTE_PATH (fname))
678     return &pfile->no_search_path;
679
680   /* pfile->buffer is NULL when processing an -include command-line flag.  */
681   file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
682
683   /* For #include_next, skip in the search path past the dir in which
684      the current file was found, but if it was found via an absolute
685      path use the normal search logic.  */
686   if (type == IT_INCLUDE_NEXT && file->dir)
687     dir = file->dir->next;
688   else if (angle_brackets)
689     dir = pfile->bracket_include;
690   else if (type == IT_CMDLINE)
691     /* -include and -imacros use the #include "" chain with the
692        preprocessor's cwd prepended.  */
693     return make_cpp_dir (pfile, "./", false);
694   else if (pfile->quote_ignores_source_dir)
695     dir = pfile->quote_include;
696   else
697     return make_cpp_dir (pfile, dir_name_of_file (file), pfile->map->sysp);
698
699   if (dir == NULL)
700     cpp_error (pfile, CPP_DL_ERROR,
701                "no include path in which to search for %s", fname);
702
703   return dir;
704 }
705
706 /* Strip the basename from the file's path.  It ends with a slash if
707    of nonzero length.  Note that this procedure also works for
708    <stdin>, which is represented by the empty string.  */
709 static const char *
710 dir_name_of_file (_cpp_file *file)
711 {
712   if (!file->dir_name)
713     {
714       size_t len = lbasename (file->path) - file->path;
715       char *dir_name = xmalloc (len + 1);
716
717       memcpy (dir_name, file->path, len);
718       dir_name[len] = '\0';
719       file->dir_name = dir_name;
720     }
721
722   return file->dir_name;
723 }
724
725 /* Handles #include-family directives (distinguished by TYPE),
726    including HEADER, and the command line -imacros and -include.
727    Returns true if a buffer was stacked.  */
728 bool
729 _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
730                     enum include_type type)
731 {
732   struct cpp_dir *dir;
733
734   dir = search_path_head (pfile, fname, angle_brackets, type);
735   if (!dir)
736     return false;
737
738   return _cpp_stack_file (pfile, _cpp_find_file (pfile, fname, dir, false),
739                      type == IT_IMPORT);
740 }
741
742 /* Could not open FILE.  The complication is dependency output.  */
743 static void
744 open_file_failed (cpp_reader *pfile, _cpp_file *file)
745 {
746   int sysp = pfile->map ? pfile->map->sysp: 0;
747   bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
748
749   errno = file->err_no;
750   if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
751     deps_add_dep (pfile->deps, file->name);
752   else
753     {
754       /* If we are outputting dependencies but not for this file then
755          don't error because we can still produce correct output.  */
756       if (CPP_OPTION (pfile, deps.style) && ! print_dep)
757         cpp_errno (pfile, CPP_DL_WARNING, file->path);
758       else
759         cpp_errno (pfile, CPP_DL_ERROR, file->path);
760     }
761 }
762
763 /* Search in the chain beginning at HEAD for a file whose search path
764    started at START_DIR != NULL.  */
765 static struct file_hash_entry *
766 search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
767 {
768   while (head && head->start_dir != start_dir)
769     head = head->next;
770
771   return head;
772 }
773
774 /* Allocate a new _cpp_file structure.  */
775 static _cpp_file *
776 make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
777 {
778   _cpp_file *file;
779
780   file = xcalloc (1, sizeof (_cpp_file));
781   file->main_file = !pfile->buffer;
782   file->fd = -1;
783   file->dir = dir;
784   file->name = xstrdup (fname);
785
786   return file;
787 }
788
789 /* A hash of directory names.  The directory names are the path names
790    of files which contain a #include "", the included file name is
791    appended to this directories.
792
793    To avoid duplicate entries we follow the convention that all
794    non-empty directory names should end in a '/'.  DIR_NAME must be
795    stored in permanently allocated memory.  */
796 static cpp_dir *
797 make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
798 {
799   struct file_hash_entry *entry, **hash_slot;
800   cpp_dir *dir;
801
802   hash_slot = (struct file_hash_entry **)
803     htab_find_slot_with_hash (pfile->file_hash, dir_name,
804                               htab_hash_string (dir_name),
805                               INSERT);
806
807   /* Have we already hashed this directory?  */
808   for (entry = *hash_slot; entry; entry = entry->next)
809     if (entry->start_dir == NULL)
810       return entry->u.dir;
811
812   dir = xcalloc (1, sizeof (cpp_dir));
813   dir->next = pfile->quote_include;
814   dir->name = (char *) dir_name;
815   dir->len = strlen (dir_name);
816   dir->sysp = sysp;
817
818   /* Store this new result in the hash table.  */
819   entry = new_file_hash_entry (pfile);
820   entry->next = *hash_slot;
821   entry->start_dir = NULL;
822   entry->u.dir = dir;
823   *hash_slot = entry;
824
825   return dir;
826 }
827
828 /* Create a new block of memory for file hash entries.  */
829 static void
830 allocate_file_hash_entries (cpp_reader *pfile)
831 {
832   pfile->file_hash_entries_used = 0;
833   pfile->file_hash_entries_allocated = 127;
834   pfile->file_hash_entries = xmalloc
835     (pfile->file_hash_entries_allocated * sizeof (struct file_hash_entry));
836 }
837
838 /* Return a new file hash entry.  */
839 static struct file_hash_entry *
840 new_file_hash_entry (cpp_reader *pfile)
841 {
842   if (pfile->file_hash_entries_used == pfile->file_hash_entries_allocated)
843     allocate_file_hash_entries (pfile);
844
845   return &pfile->file_hash_entries[pfile->file_hash_entries_used++];
846 }
847
848 /* Returns TRUE if a file FNAME has ever been successfully opened.
849    This routine is not intended to correctly handle filenames aliased
850    by links or redundant . or .. traversals etc.  */
851 bool
852 cpp_included (cpp_reader *pfile, const char *fname)
853 {
854   struct file_hash_entry *entry;
855
856   entry = htab_find_with_hash (pfile->file_hash, fname,
857                                htab_hash_string (fname));
858
859   while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
860     entry = entry->next;
861
862   return entry != NULL;
863 }
864
865 /* Calculate the hash value of a file hash entry P. */
866
867 static hashval_t
868 file_hash_hash (const void *p)
869 {
870   struct file_hash_entry *entry = (struct file_hash_entry *) p;
871   const char *hname;
872   if (entry->start_dir)
873     hname = entry->u.file->name;
874   else
875     hname = entry->u.dir->name;
876
877   return htab_hash_string (hname);
878 }
879
880 /* Compare a string Q against a file hash entry P.  */
881 static int
882 file_hash_eq (const void *p, const void *q)
883 {
884   struct file_hash_entry *entry = (struct file_hash_entry *) p;
885   const char *fname = (const char *) q;
886   const char *hname;
887
888   if (entry->start_dir)
889     hname = entry->u.file->name;
890   else
891     hname = entry->u.dir->name;
892
893   return strcmp (hname, fname) == 0;
894 }
895
896 /* Initialize everything in this source file.  */
897 void
898 _cpp_init_files (cpp_reader *pfile)
899 {
900   pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
901                                         NULL, xcalloc, free);
902   allocate_file_hash_entries (pfile);
903 }
904
905 /* Finalize everything in this source file.  */
906 void
907 _cpp_cleanup_files (cpp_reader *pfile)
908 {
909   htab_delete (pfile->file_hash);
910 }
911
912 /* Enter a file name in the hash for the sake of cpp_included.  */
913 void
914 _cpp_fake_include (cpp_reader *pfile, const char *fname)
915 {
916   _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true);
917 }
918
919 /* Not everyone who wants to set system-header-ness on a buffer can
920    see the details of a buffer.  This is an exported interface because
921    fix-header needs it.  */
922 void
923 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
924 {
925   int flags = 0;
926
927   /* 1 = system header, 2 = system header to be treated as C.  */
928   if (syshdr)
929     flags = 1 + (externc != 0);
930   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
931                        SOURCE_LINE (pfile->map, pfile->line), flags);
932 }
933
934 /* Allow the client to change the current file.  Used by the front end
935    to achieve pseudo-file names like <built-in>.
936    If REASON is LC_LEAVE, then NEW_NAME must be NULL.  */
937 void
938 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
939                  const char *new_name)
940 {
941   _cpp_do_file_change (pfile, reason, new_name, 1, 0);
942 }
943
944 /* Callback function for htab_traverse.  */
945 static int
946 report_missing_guard (void **slot, void *b)
947 {
948   struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
949   int *bannerp = (int *) b;
950
951   /* Skip directories.  */
952   if (entry->start_dir != NULL)
953     {
954       _cpp_file *file = entry->u.file;
955
956       /* We don't want MI guard advice for the main file.  */
957       if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
958         {
959           if (*bannerp == 0)
960             {
961               fputs (_("Multiple include guards may be useful for:\n"),
962                      stderr);
963               *bannerp = 1;
964             }
965
966           fputs (entry->u.file->path, stderr);
967           putc ('\n', stderr);
968         }
969     }
970
971   return 0;
972 }
973
974 /* Report on all files that might benefit from a multiple include guard.
975    Triggered by -H.  */
976 void
977 _cpp_report_missing_guards (cpp_reader *pfile)
978 {
979   int banner = 0;
980
981   htab_traverse (pfile->file_hash, report_missing_guard, &banner);
982 }
983
984 /* Locate HEADER, and determine whether it is newer than the current
985    file.  If it cannot be located or dated, return -1, if it is
986    newer, return 1, otherwise 0.  */
987 int
988 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
989                         int angle_brackets)
990 {
991   _cpp_file *file;
992   struct cpp_dir *dir;
993
994   dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
995   if (!dir)
996     return -1;
997
998   file = _cpp_find_file (pfile, fname, dir, false);
999   if (file->err_no)
1000     return -1;
1001
1002   if (file->fd != -1)
1003     {
1004       close (file->fd);
1005       file->fd = -1;
1006     }
1007
1008   return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1009 }
1010
1011 /* Pushes the given file onto the buffer stack.  Returns nonzero if
1012    successful.  */
1013 bool
1014 cpp_push_include (cpp_reader *pfile, const char *fname)
1015 {
1016   /* Make the command line directive take up a line.  */
1017   pfile->line++;
1018   return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
1019 }
1020
1021 /* Do appropriate cleanup when a file INC's buffer is popped off the
1022    input stack.  */
1023 void
1024 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
1025 {
1026   /* Record the inclusion-preventing macro, which could be NULL
1027      meaning no controlling macro.  */
1028   if (pfile->mi_valid && file->cmacro == NULL)
1029     file->cmacro = pfile->mi_cmacro;
1030
1031   /* Invalidate control macros in the #including file.  */
1032   pfile->mi_valid = false;
1033
1034   if (file->buffer)
1035     {
1036       free ((void *) file->buffer);
1037       file->buffer = NULL;
1038     }
1039 }
1040
1041 /* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
1042    QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1043    directory of the including file.
1044
1045    If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
1046 void
1047 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1048                         int quote_ignores_source_dir)
1049 {
1050   pfile->quote_include = quote;
1051   pfile->bracket_include = quote;
1052   pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1053
1054   for (; quote; quote = quote->next)
1055     {
1056       quote->name_map = NULL;
1057       quote->len = strlen (quote->name);
1058       if (quote == bracket)
1059         pfile->bracket_include = bracket;
1060     }
1061 }
1062
1063 /* Append the file name to the directory to create the path, but don't
1064    turn / into // or // into ///; // may be a namespace escape.  */
1065 static char *
1066 append_file_to_dir (const char *fname, cpp_dir *dir)
1067 {
1068   size_t dlen, flen;
1069   char *path;
1070
1071   dlen = dir->len;
1072   flen = strlen (fname);
1073   path = xmalloc (dlen + 1 + flen + 1);
1074   memcpy (path, dir->name, dlen);
1075   if (dlen && path[dlen - 1] != '/')
1076     path[dlen++] = '/';
1077   memcpy (&path[dlen], fname, flen + 1);
1078
1079   return path;
1080 }
1081
1082 /* Read a space delimited string of unlimited length from a stdio
1083    file F.  */
1084 static char *
1085 read_filename_string (int ch, FILE *f)
1086 {
1087   char *alloc, *set;
1088   int len;
1089
1090   len = 20;
1091   set = alloc = xmalloc (len + 1);
1092   if (! is_space (ch))
1093     {
1094       *set++ = ch;
1095       while ((ch = getc (f)) != EOF && ! is_space (ch))
1096         {
1097           if (set - alloc == len)
1098             {
1099               len *= 2;
1100               alloc = xrealloc (alloc, len + 1);
1101               set = alloc + len / 2;
1102             }
1103           *set++ = ch;
1104         }
1105     }
1106   *set = '\0';
1107   ungetc (ch, f);
1108   return alloc;
1109 }
1110
1111 /* Read the file name map file for DIR.  */
1112 static void
1113 read_name_map (cpp_dir *dir)
1114 {
1115   static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1116   char *name;
1117   FILE *f;
1118   size_t len, count = 0, room = 9;
1119
1120   len = dir->len;
1121   name = alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1122   memcpy (name, dir->name, len);
1123   if (len && name[len - 1] != '/')
1124     name[len++] = '/';
1125   strcpy (name + len, FILE_NAME_MAP_FILE);
1126   f = fopen (name, "r");
1127
1128   dir->name_map = xmalloc (room * sizeof (char *));
1129
1130   /* Silently return NULL if we cannot open.  */
1131   if (f)
1132     {
1133       int ch;
1134
1135       while ((ch = getc (f)) != EOF)
1136         {
1137           char *to;
1138
1139           if (is_space (ch))
1140             continue;
1141
1142           if (count + 2 > room)
1143             {
1144               room += 8;
1145               dir->name_map = xrealloc (dir->name_map, room * sizeof (char *));
1146             }
1147
1148           dir->name_map[count] = read_filename_string (ch, f);
1149           while ((ch = getc (f)) != EOF && is_hspace (ch))
1150             ;
1151
1152           to = read_filename_string (ch, f);
1153           if (IS_ABSOLUTE_PATH (to))
1154             dir->name_map[count + 1] = to;
1155           else
1156             {
1157               dir->name_map[count + 1] = append_file_to_dir (to, dir);
1158               free (to);
1159             }
1160
1161           count += 2;
1162           while ((ch = getc (f)) != '\n')
1163             if (ch == EOF)
1164               break;
1165         }
1166
1167       fclose (f);
1168     }
1169
1170   /* Terminate the list of maps.  */
1171   dir->name_map[count] = NULL;
1172 }
1173
1174 /* Remap a FILE's name based on the file_name_map, if any, for
1175    FILE->dir.  If the file name has any directory separators,
1176    recursively check those directories too.  */
1177 static char *
1178 remap_filename (cpp_reader *pfile, _cpp_file *file)
1179 {
1180   const char *fname, *p;
1181   char *new_dir;
1182   cpp_dir *dir;
1183   size_t index, len;
1184
1185   dir = file->dir;
1186   fname = file->name;
1187
1188   for (;;)
1189     {
1190       if (!dir->name_map)
1191         read_name_map (dir);
1192
1193       for (index = 0; dir->name_map[index]; index += 2)
1194         if (!strcmp (dir->name_map[index], fname))
1195             return xstrdup (dir->name_map[index + 1]);
1196
1197       p = strchr (fname, '/');
1198       if (!p || p == fname)
1199         return NULL;
1200
1201       len = dir->len + (p - fname + 1);
1202       new_dir = xmalloc (len + 1);
1203       memcpy (new_dir, dir->name, dir->len);
1204       memcpy (new_dir + dir->len, fname, p - fname + 1);
1205       new_dir[len] = '\0';
1206
1207       dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1208       fname = p + 1;
1209     }
1210 }
1211
1212 /* Return true if FILE is usable by PCH.  */
1213 static bool
1214 include_pch_p (_cpp_file *file)
1215 {
1216   return file->pch & 1;
1217 }
1218
1219 /* Returns true if PCHNAME is a valid PCH file for FILE.  */
1220 static bool
1221 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1222 {
1223   const char *saved_path = file->path;
1224   bool valid = false;
1225
1226   file->path = pchname;
1227   if (open_file (file))
1228     {
1229       valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1230
1231       if (!valid)
1232         {
1233           close (file->fd);
1234           file->fd = -1;
1235         }
1236
1237       if (CPP_OPTION (pfile, print_include_names))
1238         {
1239           unsigned int i;
1240           for (i = 1; i < pfile->line_maps.depth; i++)
1241             putc ('.', stderr);
1242           fprintf (stderr, "%c %s\n",
1243                    valid ? '!' : 'x', pchname);
1244         }
1245     }
1246
1247   file->path = saved_path;
1248   return valid;
1249 }