OSDN Git Service

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