OSDN Git Service

* de.po: Update.
[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, 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 "md5.h"
32 #include <dirent.h>
33
34 /* Variable length record files on VMS will have a stat size that includes
35    record control characters that won't be included in the read size.  */
36 #ifdef VMS
37 # define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
38 # define STAT_SIZE_RELIABLE(ST) ((ST).st_fab_rfm != FAB_C_VAR)
39 #else
40 # define STAT_SIZE_RELIABLE(ST) true
41 #endif
42
43 #ifdef __DJGPP__
44   /* For DJGPP redirected input is opened in text mode.  */
45 #  define set_stdin_to_binary_mode() \
46      if (! isatty (0)) setmode (0, O_BINARY)
47 #else
48 #  define set_stdin_to_binary_mode() /* Nothing */
49 #endif
50
51 #ifndef O_BINARY
52 # define O_BINARY 0
53 #endif
54
55 /* This structure represents a file searched for by CPP, whether it
56    exists or not.  An instance may be pointed to by more than one
57    file_hash_entry; at present no reference count is kept.  */
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                            bool *invalid_pch);
160 static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
161                               bool *invalid_pch);
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 should_stack_file (cpp_reader *, _cpp_file *file, bool import);
165 static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
166                                  int angle_brackets, enum include_type);
167 static const char *dir_name_of_file (_cpp_file *file);
168 static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
169 static struct file_hash_entry *search_cache (struct file_hash_entry *head,
170                                              const cpp_dir *start_dir);
171 static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
172 static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
173 static void allocate_file_hash_entries (cpp_reader *pfile);
174 static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
175 static int report_missing_guard (void **slot, void *b);
176 static hashval_t file_hash_hash (const void *p);
177 static int file_hash_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 static int pchf_adder (void **slot, void *data);
185 static int pchf_save_compare (const void *e1, const void *e2);
186 static int pchf_compare (const void *d_p, const void *e_p);
187 static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
188
189 /* Given a filename in FILE->PATH, with the empty string interpreted
190    as <stdin>, open it.
191
192    On success FILE contains an open file descriptor and stat
193    information for the file.  On failure the file descriptor is -1 and
194    the appropriate errno is also stored in FILE.  Returns TRUE iff
195    successful.
196
197    We used to open files in nonblocking mode, but that caused more
198    problems than it solved.  Do take care not to acquire a controlling
199    terminal by mistake (this can't happen on sane systems, but
200    paranoia is a virtue).
201
202    Use the three-argument form of open even though we aren't
203    specifying O_CREAT, to defend against broken system headers.
204
205    O_BINARY tells some runtime libraries (notably DJGPP) not to do
206    newline translation; we can handle DOS line breaks just fine
207    ourselves.  */
208 static bool
209 open_file (_cpp_file *file)
210 {
211   if (file->path[0] == '\0')
212     {
213       file->fd = 0;
214       set_stdin_to_binary_mode ();
215     }
216   else
217     file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
218
219   if (file->fd != -1)
220     {
221       if (fstat (file->fd, &file->st) == 0)
222         {
223           if (!S_ISDIR (file->st.st_mode))
224             {
225               file->err_no = 0;
226               return true;
227             }
228
229           /* Ignore a directory and continue the search.  The file we're
230              looking for may be elsewhere in the search path.  */
231           errno = ENOENT;
232         }
233
234       close (file->fd);
235       file->fd = -1;
236     }
237   else if (errno == ENOTDIR)
238     errno = ENOENT;
239
240   file->err_no = errno;
241
242   return false;
243 }
244
245 /* Temporary PCH intercept of opening a file.  Try to find a PCH file
246    based on FILE->name and FILE->dir, and test those found for
247    validity using PFILE->cb.valid_pch.  Return true iff a valid file is
248    found.  Set *INVALID_PCH if a PCH file is found but wasn't valid.  */
249
250 static bool
251 pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
252 {
253   static const char extension[] = ".gch";
254   const char *path = file->path;
255   size_t len, flen;
256   char *pchname;
257   struct stat st;
258   bool valid = false;
259
260   /* No PCH on <stdin> or if not requested.  */
261   if (file->name[0] == '\0' || !pfile->cb.valid_pch)
262     return false;
263
264   flen = strlen (path);
265   len = flen + sizeof (extension);
266   pchname = xmalloc (len);
267   memcpy (pchname, path, flen);
268   memcpy (pchname + flen, extension, sizeof (extension));
269
270   if (stat (pchname, &st) == 0)
271     {
272       DIR *pchdir;
273       struct dirent *d;
274       size_t dlen, plen = len;
275
276       if (!S_ISDIR (st.st_mode))
277         valid = validate_pch (pfile, file, pchname);
278       else if ((pchdir = opendir (pchname)) != NULL)
279         {
280           pchname[plen - 1] = '/';
281           while ((d = readdir (pchdir)) != NULL)
282             {
283               dlen = strlen (d->d_name) + 1;
284               if ((strcmp (d->d_name, ".") == 0)
285                   || (strcmp (d->d_name, "..") == 0))
286                 continue;
287               if (dlen + plen > len)
288                 {
289                   len += dlen + 64;
290                   pchname = xrealloc (pchname, len);
291                 }
292               memcpy (pchname + plen, d->d_name, dlen);
293               valid = validate_pch (pfile, file, pchname);
294               if (valid)
295                 break;
296             }
297           closedir (pchdir);
298         }
299       if (valid)
300         file->pch = true;
301       else
302         *invalid_pch = true;
303     }
304
305   if (valid)
306     file->pchname = pchname;
307   else
308     free (pchname);
309
310   return valid;
311 }
312
313 /* Try to open the path FILE->name appended to FILE->dir.  This is
314    where remap and PCH intercept the file lookup process.  Return true
315    if the file was found, whether or not the open was successful.
316    Set *INVALID_PCH to true if a PCH file is found but wasn't valid.  */
317
318 static bool
319 find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
320 {
321   char *path;
322
323   if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
324     ;
325   else
326     path = append_file_to_dir (file->name, file->dir);
327
328   file->path = path;
329   if (pch_open_file (pfile, file, invalid_pch))
330     return true;
331
332   if (open_file (file))
333     return true;
334
335   if (file->err_no != ENOENT)
336     {
337       open_file_failed (pfile, file);
338       return true;
339     }
340
341   free (path);
342   file->path = file->name;
343   return false;
344 }
345
346 bool
347 _cpp_find_failed (_cpp_file *file)
348 {
349   return file->err_no != 0;
350 }
351
352 /* Given a filename FNAME search for such a file in the include path
353    starting from START_DIR.  If FNAME is the empty string it is
354    interpreted as STDIN if START_DIR is PFILE->no_seach_path.
355
356    If the file is not found in the file cache fall back to the O/S and
357    add the result to our cache.
358
359    If the file was not found in the filesystem, or there was an error
360    opening it, then ERR_NO is nonzero and FD is -1.  If the file was
361    found, then ERR_NO is zero and FD could be -1 or an open file
362    descriptor.  FD can be -1 if the file was found in the cache and
363    had previously been closed.  To open it again pass the return value
364    to open_file().
365 */
366 _cpp_file *
367 _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake)
368 {
369   struct file_hash_entry *entry, **hash_slot;
370   _cpp_file *file;
371   bool invalid_pch = false;
372
373   /* Ensure we get no confusion between cached files and directories.  */
374   if (start_dir == NULL)
375     cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
376
377   hash_slot = (struct file_hash_entry **)
378     htab_find_slot_with_hash (pfile->file_hash, fname,
379                               htab_hash_string (fname),
380                               INSERT);
381
382   /* First check the cache before we resort to memory allocation.  */
383   entry = search_cache (*hash_slot, start_dir);
384   if (entry)
385     return entry->u.file;
386
387   file = make_cpp_file (pfile, start_dir, fname);
388
389   /* Try each path in the include chain.  */
390   for (; !fake ;)
391     {
392       if (find_file_in_dir (pfile, file, &invalid_pch))
393         break;
394
395       file->dir = file->dir->next;
396       if (file->dir == NULL)
397         {
398           open_file_failed (pfile, file);
399           if (invalid_pch)
400             {
401               cpp_error (pfile, CPP_DL_ERROR,
402                "one or more PCH files were found, but they were invalid");
403               if (!cpp_get_options (pfile)->warn_invalid_pch)
404                 cpp_error (pfile, CPP_DL_ERROR,
405                            "use -Winvalid-pch for more information");
406             }
407           break;
408         }
409
410       /* Only check the cache for the starting location (done above)
411          and the quote and bracket chain heads because there are no
412          other possible starting points for searches.  */
413       if (file->dir != pfile->bracket_include
414           && file->dir != pfile->quote_include)
415         continue;
416
417       entry = search_cache (*hash_slot, file->dir);
418       if (entry)
419         break;
420     }
421
422   if (entry)
423     {
424       /* Cache for START_DIR too, sharing the _cpp_file structure.  */
425       free ((char *) file->name);
426       free (file);
427       file = entry->u.file;
428     }
429   else
430     {
431       /* This is a new file; put it in the list.  */
432       file->next_file = pfile->all_files;
433       pfile->all_files = file;
434     }
435
436   /* Store this new result in the hash table.  */
437   entry = new_file_hash_entry (pfile);
438   entry->next = *hash_slot;
439   entry->start_dir = start_dir;
440   entry->u.file = file;
441   *hash_slot = entry;
442
443   return file;
444 }
445
446 /* Read a file into FILE->buffer, returning true on success.
447
448    If FILE->fd is something weird, like a block device, we don't want
449    to read it at all.  Don't even try to figure out what something is,
450    except for plain files and block devices, since there is no
451    reliable portable way of doing this.
452
453    FIXME: Flush file cache and try again if we run out of memory.  */
454 static bool
455 read_file_guts (cpp_reader *pfile, _cpp_file *file)
456 {
457   ssize_t size, total, count;
458   uchar *buf;
459   bool regular;
460
461   if (S_ISBLK (file->st.st_mode))
462     {
463       cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
464       return false;
465     }
466
467   regular = S_ISREG (file->st.st_mode);
468   if (regular)
469     {
470       /* off_t might have a wider range than ssize_t - in other words,
471          the max size of a file might be bigger than the address
472          space.  We can't handle a file that large.  (Anyone with
473          a single source file bigger than 2GB needs to rethink
474          their coding style.)  Some systems (e.g. AIX 4.1) define
475          SSIZE_MAX to be much smaller than the actual range of the
476          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
477          does not bite us.  */
478       if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
479         {
480           cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
481           return false;
482         }
483
484       size = file->st.st_size;
485     }
486   else
487     /* 8 kilobytes is a sensible starting size.  It ought to be bigger
488        than the kernel pipe buffer, and it's definitely bigger than
489        the majority of C source files.  */
490     size = 8 * 1024;
491
492   buf = xmalloc (size + 1);
493   total = 0;
494   while ((count = read (file->fd, buf + total, size - total)) > 0)
495     {
496       total += count;
497
498       if (total == size)
499         {
500           if (regular)
501             break;
502           size *= 2;
503           buf = xrealloc (buf, size + 1);
504         }
505     }
506
507   if (count < 0)
508     {
509       cpp_errno (pfile, CPP_DL_ERROR, file->path);
510       return false;
511     }
512
513   if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
514     cpp_error (pfile, CPP_DL_WARNING,
515                "%s is shorter than expected", file->path);
516
517   file->buffer = _cpp_convert_input (pfile, CPP_OPTION (pfile, input_charset),
518                                      buf, size, total, &file->st.st_size);
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   /* Check the file against the PCH file.  This is done before
592      checking against files we've already seen, since it may save on
593      I/O.  */
594   if (check_file_against_entries (pfile, file, import))
595     {
596       /* If this isn't a #import, but yet we can't include the file,
597          that means that it was #import-ed in the PCH file,
598          so we can never include it again.  */
599       if (! import)
600         _cpp_mark_file_once_only (pfile, file);
601       return false;
602     }
603
604   /* Now we've read the file's contents, we can stack it if there
605      are no once-only files.  */
606   if (!pfile->seen_once_only)
607     return true;
608
609   /* We may have read the file under a different name.  Look
610      for likely candidates and compare file contents to be sure.  */
611   for (f = pfile->all_files; f; f = f->next_file)
612     {
613       if (f == file)
614         continue;
615
616       if ((import || f->once_only)
617           && f->err_no == 0
618           && f->st.st_mtime == file->st.st_mtime
619           && f->st.st_size == file->st.st_size
620           && read_file (pfile, f)
621           /* Size might have changed in read_file().  */
622           && f->st.st_size == file->st.st_size
623           && !memcmp (f->buffer, file->buffer, f->st.st_size))
624         break;
625     }
626
627   return f == NULL;
628 }
629
630 /* Place the file referenced by FILE into a new buffer on the buffer
631    stack if possible.  IMPORT is true if this stacking attempt is
632    because of a #import directive.  Returns true if a buffer is
633    stacked.  */
634 bool
635 _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
636 {
637   cpp_buffer *buffer;
638   int sysp;
639
640   if (!should_stack_file (pfile, file, import))
641       return false;
642
643   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
644               (file->dir ? file->dir->sysp : 0));
645
646   /* Add the file to the dependencies on its first inclusion.  */
647   if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
648     {
649       if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
650         deps_add_dep (pfile->deps, file->path);
651     }
652
653   /* Clear buffer_valid since _cpp_clean_line messes it up.  */
654   file->buffer_valid = false;
655   file->stack_count++;
656
657   /* Stack the buffer.  */
658   buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
659                             CPP_OPTION (pfile, preprocessed));
660   buffer->file = file;
661
662   /* Initialize controlling macro state.  */
663   pfile->mi_valid = true;
664   pfile->mi_cmacro = 0;
665
666   /* Generate the call back.  */
667   _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
668
669   return true;
670 }
671
672 /* Mark FILE to be included once only.  */
673 void
674 _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
675 {
676   pfile->seen_once_only = true;
677   file->once_only = true;
678 }
679
680 /* Return the directory from which searching for FNAME should start,
681    considering the directive TYPE and ANGLE_BRACKETS.  If there is
682    nothing left in the path, returns NULL.  */
683 static struct cpp_dir *
684 search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets,
685                   enum include_type type)
686 {
687   cpp_dir *dir;
688   _cpp_file *file;
689
690   if (IS_ABSOLUTE_PATH (fname))
691     return &pfile->no_search_path;
692
693   /* pfile->buffer is NULL when processing an -include command-line flag.  */
694   file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
695
696   /* For #include_next, skip in the search path past the dir in which
697      the current file was found, but if it was found via an absolute
698      path use the normal search logic.  */
699   if (type == IT_INCLUDE_NEXT && file->dir)
700     dir = file->dir->next;
701   else if (angle_brackets)
702     dir = pfile->bracket_include;
703   else if (type == IT_CMDLINE)
704     /* -include and -imacros use the #include "" chain with the
705        preprocessor's cwd prepended.  */
706     return make_cpp_dir (pfile, "./", false);
707   else if (pfile->quote_ignores_source_dir)
708     dir = pfile->quote_include;
709   else
710     return make_cpp_dir (pfile, dir_name_of_file (file), pfile->map->sysp);
711
712   if (dir == NULL)
713     cpp_error (pfile, CPP_DL_ERROR,
714                "no include path in which to search for %s", fname);
715
716   return dir;
717 }
718
719 /* Strip the basename from the file's path.  It ends with a slash if
720    of nonzero length.  Note that this procedure also works for
721    <stdin>, which is represented by the empty string.  */
722 static const char *
723 dir_name_of_file (_cpp_file *file)
724 {
725   if (!file->dir_name)
726     {
727       size_t len = lbasename (file->path) - file->path;
728       char *dir_name = xmalloc (len + 1);
729
730       memcpy (dir_name, file->path, len);
731       dir_name[len] = '\0';
732       file->dir_name = dir_name;
733     }
734
735   return file->dir_name;
736 }
737
738 /* Handles #include-family directives (distinguished by TYPE),
739    including HEADER, and the command line -imacros and -include.
740    Returns true if a buffer was stacked.  */
741 bool
742 _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets,
743                     enum include_type type)
744 {
745   struct cpp_dir *dir;
746
747   dir = search_path_head (pfile, fname, angle_brackets, type);
748   if (!dir)
749     return false;
750
751   return _cpp_stack_file (pfile, _cpp_find_file (pfile, fname, dir, false),
752                      type == IT_IMPORT);
753 }
754
755 /* Could not open FILE.  The complication is dependency output.  */
756 static void
757 open_file_failed (cpp_reader *pfile, _cpp_file *file)
758 {
759   int sysp = pfile->map ? pfile->map->sysp: 0;
760   bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
761
762   errno = file->err_no;
763   if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
764     deps_add_dep (pfile->deps, file->name);
765   else
766     {
767       /* If we are outputting dependencies but not for this file then
768          don't error because we can still produce correct output.  */
769       if (CPP_OPTION (pfile, deps.style) && ! print_dep)
770         cpp_errno (pfile, CPP_DL_WARNING, file->path);
771       else
772         cpp_errno (pfile, CPP_DL_ERROR, file->path);
773     }
774 }
775
776 /* Search in the chain beginning at HEAD for a file whose search path
777    started at START_DIR != NULL.  */
778 static struct file_hash_entry *
779 search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
780 {
781   while (head && head->start_dir != start_dir)
782     head = head->next;
783
784   return head;
785 }
786
787 /* Allocate a new _cpp_file structure.  */
788 static _cpp_file *
789 make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
790 {
791   _cpp_file *file;
792
793   file = xcalloc (1, sizeof (_cpp_file));
794   file->main_file = !pfile->buffer;
795   file->fd = -1;
796   file->dir = dir;
797   file->name = xstrdup (fname);
798
799   return file;
800 }
801
802 /* A hash of directory names.  The directory names are the path names
803    of files which contain a #include "", the included file name is
804    appended to this directories.
805
806    To avoid duplicate entries we follow the convention that all
807    non-empty directory names should end in a '/'.  DIR_NAME must be
808    stored in permanently allocated memory.  */
809 static cpp_dir *
810 make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
811 {
812   struct file_hash_entry *entry, **hash_slot;
813   cpp_dir *dir;
814
815   hash_slot = (struct file_hash_entry **)
816     htab_find_slot_with_hash (pfile->file_hash, dir_name,
817                               htab_hash_string (dir_name),
818                               INSERT);
819
820   /* Have we already hashed this directory?  */
821   for (entry = *hash_slot; entry; entry = entry->next)
822     if (entry->start_dir == NULL)
823       return entry->u.dir;
824
825   dir = xcalloc (1, sizeof (cpp_dir));
826   dir->next = pfile->quote_include;
827   dir->name = (char *) dir_name;
828   dir->len = strlen (dir_name);
829   dir->sysp = sysp;
830
831   /* Store this new result in the hash table.  */
832   entry = new_file_hash_entry (pfile);
833   entry->next = *hash_slot;
834   entry->start_dir = NULL;
835   entry->u.dir = dir;
836   *hash_slot = entry;
837
838   return dir;
839 }
840
841 /* Create a new block of memory for file hash entries.  */
842 static void
843 allocate_file_hash_entries (cpp_reader *pfile)
844 {
845   pfile->file_hash_entries_used = 0;
846   pfile->file_hash_entries_allocated = 127;
847   pfile->file_hash_entries = xmalloc
848     (pfile->file_hash_entries_allocated * sizeof (struct file_hash_entry));
849 }
850
851 /* Return a new file hash entry.  */
852 static struct file_hash_entry *
853 new_file_hash_entry (cpp_reader *pfile)
854 {
855   if (pfile->file_hash_entries_used == pfile->file_hash_entries_allocated)
856     allocate_file_hash_entries (pfile);
857
858   return &pfile->file_hash_entries[pfile->file_hash_entries_used++];
859 }
860
861 /* Returns TRUE if a file FNAME has ever been successfully opened.
862    This routine is not intended to correctly handle filenames aliased
863    by links or redundant . or .. traversals etc.  */
864 bool
865 cpp_included (cpp_reader *pfile, const char *fname)
866 {
867   struct file_hash_entry *entry;
868
869   entry = htab_find_with_hash (pfile->file_hash, fname,
870                                htab_hash_string (fname));
871
872   while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
873     entry = entry->next;
874
875   return entry != NULL;
876 }
877
878 /* Calculate the hash value of a file hash entry P.  */
879
880 static hashval_t
881 file_hash_hash (const void *p)
882 {
883   struct file_hash_entry *entry = (struct file_hash_entry *) p;
884   const char *hname;
885   if (entry->start_dir)
886     hname = entry->u.file->name;
887   else
888     hname = entry->u.dir->name;
889
890   return htab_hash_string (hname);
891 }
892
893 /* Compare a string Q against a file hash entry P.  */
894 static int
895 file_hash_eq (const void *p, const void *q)
896 {
897   struct file_hash_entry *entry = (struct file_hash_entry *) p;
898   const char *fname = (const char *) q;
899   const char *hname;
900
901   if (entry->start_dir)
902     hname = entry->u.file->name;
903   else
904     hname = entry->u.dir->name;
905
906   return strcmp (hname, fname) == 0;
907 }
908
909 /* Initialize everything in this source file.  */
910 void
911 _cpp_init_files (cpp_reader *pfile)
912 {
913   pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
914                                         NULL, xcalloc, free);
915   allocate_file_hash_entries (pfile);
916 }
917
918 /* Finalize everything in this source file.  */
919 void
920 _cpp_cleanup_files (cpp_reader *pfile)
921 {
922   htab_delete (pfile->file_hash);
923 }
924
925 /* Enter a file name in the hash for the sake of cpp_included.  */
926 void
927 _cpp_fake_include (cpp_reader *pfile, const char *fname)
928 {
929   _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true);
930 }
931
932 /* Not everyone who wants to set system-header-ness on a buffer can
933    see the details of a buffer.  This is an exported interface because
934    fix-header needs it.  */
935 void
936 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
937 {
938   int flags = 0;
939
940   /* 1 = system header, 2 = system header to be treated as C.  */
941   if (syshdr)
942     flags = 1 + (externc != 0);
943   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
944                        SOURCE_LINE (pfile->map, pfile->line), flags);
945 }
946
947 /* Allow the client to change the current file.  Used by the front end
948    to achieve pseudo-file names like <built-in>.
949    If REASON is LC_LEAVE, then NEW_NAME must be NULL.  */
950 void
951 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
952                  const char *new_name)
953 {
954   _cpp_do_file_change (pfile, reason, new_name, 1, 0);
955 }
956
957 /* Callback function for htab_traverse.  */
958 static int
959 report_missing_guard (void **slot, void *b)
960 {
961   struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
962   int *bannerp = (int *) b;
963
964   /* Skip directories.  */
965   if (entry->start_dir != NULL)
966     {
967       _cpp_file *file = entry->u.file;
968
969       /* We don't want MI guard advice for the main file.  */
970       if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file)
971         {
972           if (*bannerp == 0)
973             {
974               fputs (_("Multiple include guards may be useful for:\n"),
975                      stderr);
976               *bannerp = 1;
977             }
978
979           fputs (entry->u.file->path, stderr);
980           putc ('\n', stderr);
981         }
982     }
983
984   return 0;
985 }
986
987 /* Report on all files that might benefit from a multiple include guard.
988    Triggered by -H.  */
989 void
990 _cpp_report_missing_guards (cpp_reader *pfile)
991 {
992   int banner = 0;
993
994   htab_traverse (pfile->file_hash, report_missing_guard, &banner);
995 }
996
997 /* Locate HEADER, and determine whether it is newer than the current
998    file.  If it cannot be located or dated, return -1, if it is
999    newer, return 1, otherwise 0.  */
1000 int
1001 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
1002                         int angle_brackets)
1003 {
1004   _cpp_file *file;
1005   struct cpp_dir *dir;
1006
1007   dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE);
1008   if (!dir)
1009     return -1;
1010
1011   file = _cpp_find_file (pfile, fname, dir, false);
1012   if (file->err_no)
1013     return -1;
1014
1015   if (file->fd != -1)
1016     {
1017       close (file->fd);
1018       file->fd = -1;
1019     }
1020
1021   return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1022 }
1023
1024 /* Pushes the given file onto the buffer stack.  Returns nonzero if
1025    successful.  */
1026 bool
1027 cpp_push_include (cpp_reader *pfile, const char *fname)
1028 {
1029   /* Make the command line directive take up a line.  */
1030   pfile->line++;
1031   return _cpp_stack_include (pfile, fname, false, IT_CMDLINE);
1032 }
1033
1034 /* Do appropriate cleanup when a file INC's buffer is popped off the
1035    input stack.  */
1036 void
1037 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
1038 {
1039   /* Record the inclusion-preventing macro, which could be NULL
1040      meaning no controlling macro.  */
1041   if (pfile->mi_valid && file->cmacro == NULL)
1042     file->cmacro = pfile->mi_cmacro;
1043
1044   /* Invalidate control macros in the #including file.  */
1045   pfile->mi_valid = false;
1046
1047   if (file->buffer)
1048     {
1049       free ((void *) file->buffer);
1050       file->buffer = NULL;
1051     }
1052 }
1053
1054 /* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
1055    QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1056    directory of the including file.
1057
1058    If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
1059 void
1060 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1061                         int quote_ignores_source_dir)
1062 {
1063   pfile->quote_include = quote;
1064   pfile->bracket_include = quote;
1065   pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1066
1067   for (; quote; quote = quote->next)
1068     {
1069       quote->name_map = NULL;
1070       quote->len = strlen (quote->name);
1071       if (quote == bracket)
1072         pfile->bracket_include = bracket;
1073     }
1074 }
1075
1076 /* Append the file name to the directory to create the path, but don't
1077    turn / into // or // into ///; // may be a namespace escape.  */
1078 static char *
1079 append_file_to_dir (const char *fname, cpp_dir *dir)
1080 {
1081   size_t dlen, flen;
1082   char *path;
1083
1084   dlen = dir->len;
1085   flen = strlen (fname);
1086   path = xmalloc (dlen + 1 + flen + 1);
1087   memcpy (path, dir->name, dlen);
1088   if (dlen && path[dlen - 1] != '/')
1089     path[dlen++] = '/';
1090   memcpy (&path[dlen], fname, flen + 1);
1091
1092   return path;
1093 }
1094
1095 /* Read a space delimited string of unlimited length from a stdio
1096    file F.  */
1097 static char *
1098 read_filename_string (int ch, FILE *f)
1099 {
1100   char *alloc, *set;
1101   int len;
1102
1103   len = 20;
1104   set = alloc = xmalloc (len + 1);
1105   if (! is_space (ch))
1106     {
1107       *set++ = ch;
1108       while ((ch = getc (f)) != EOF && ! is_space (ch))
1109         {
1110           if (set - alloc == len)
1111             {
1112               len *= 2;
1113               alloc = xrealloc (alloc, len + 1);
1114               set = alloc + len / 2;
1115             }
1116           *set++ = ch;
1117         }
1118     }
1119   *set = '\0';
1120   ungetc (ch, f);
1121   return alloc;
1122 }
1123
1124 /* Read the file name map file for DIR.  */
1125 static void
1126 read_name_map (cpp_dir *dir)
1127 {
1128   static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1129   char *name;
1130   FILE *f;
1131   size_t len, count = 0, room = 9;
1132
1133   len = dir->len;
1134   name = alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1135   memcpy (name, dir->name, len);
1136   if (len && name[len - 1] != '/')
1137     name[len++] = '/';
1138   strcpy (name + len, FILE_NAME_MAP_FILE);
1139   f = fopen (name, "r");
1140
1141   dir->name_map = xmalloc (room * sizeof (char *));
1142
1143   /* Silently return NULL if we cannot open.  */
1144   if (f)
1145     {
1146       int ch;
1147
1148       while ((ch = getc (f)) != EOF)
1149         {
1150           char *to;
1151
1152           if (is_space (ch))
1153             continue;
1154
1155           if (count + 2 > room)
1156             {
1157               room += 8;
1158               dir->name_map = xrealloc (dir->name_map, room * sizeof (char *));
1159             }
1160
1161           dir->name_map[count] = read_filename_string (ch, f);
1162           while ((ch = getc (f)) != EOF && is_hspace (ch))
1163             ;
1164
1165           to = read_filename_string (ch, f);
1166           if (IS_ABSOLUTE_PATH (to))
1167             dir->name_map[count + 1] = to;
1168           else
1169             {
1170               dir->name_map[count + 1] = append_file_to_dir (to, dir);
1171               free (to);
1172             }
1173
1174           count += 2;
1175           while ((ch = getc (f)) != '\n')
1176             if (ch == EOF)
1177               break;
1178         }
1179
1180       fclose (f);
1181     }
1182
1183   /* Terminate the list of maps.  */
1184   dir->name_map[count] = NULL;
1185 }
1186
1187 /* Remap a FILE's name based on the file_name_map, if any, for
1188    FILE->dir.  If the file name has any directory separators,
1189    recursively check those directories too.  */
1190 static char *
1191 remap_filename (cpp_reader *pfile, _cpp_file *file)
1192 {
1193   const char *fname, *p;
1194   char *new_dir;
1195   cpp_dir *dir;
1196   size_t index, len;
1197
1198   dir = file->dir;
1199   fname = file->name;
1200
1201   for (;;)
1202     {
1203       if (!dir->name_map)
1204         read_name_map (dir);
1205
1206       for (index = 0; dir->name_map[index]; index += 2)
1207         if (!strcmp (dir->name_map[index], fname))
1208             return xstrdup (dir->name_map[index + 1]);
1209
1210       p = strchr (fname, '/');
1211       if (!p || p == fname)
1212         return NULL;
1213
1214       len = dir->len + (p - fname + 1);
1215       new_dir = xmalloc (len + 1);
1216       memcpy (new_dir, dir->name, dir->len);
1217       memcpy (new_dir + dir->len, fname, p - fname + 1);
1218       new_dir[len] = '\0';
1219
1220       dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1221       fname = p + 1;
1222     }
1223 }
1224
1225 /* Return true if FILE is usable by PCH.  */
1226 static bool
1227 include_pch_p (_cpp_file *file)
1228 {
1229   return file->pch & 1;
1230 }
1231
1232 /* Returns true if PCHNAME is a valid PCH file for FILE.  */
1233 static bool
1234 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1235 {
1236   const char *saved_path = file->path;
1237   bool valid = false;
1238
1239   file->path = pchname;
1240   if (open_file (file))
1241     {
1242       valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1243
1244       if (!valid)
1245         {
1246           close (file->fd);
1247           file->fd = -1;
1248         }
1249
1250       if (CPP_OPTION (pfile, print_include_names))
1251         {
1252           unsigned int i;
1253           for (i = 1; i < pfile->line_table->depth; i++)
1254             putc ('.', stderr);
1255           fprintf (stderr, "%c %s\n",
1256                    valid ? '!' : 'x', pchname);
1257         }
1258     }
1259
1260   file->path = saved_path;
1261   return valid;
1262 }
1263 \f
1264 /* This datastructure holds the list of header files that were seen
1265    while the PCH was being built.  The 'entries' field is kept sorted
1266    in memcmp() order; yes, this means that on little-endian systems,
1267    it's sorted initially by the least-significant byte of 'size', but
1268    that's OK.  The code does rely on having entries with the same size
1269    next to each other.  */
1270
1271 struct pchf_data {
1272   /* Number of pchf_entry structures.  */
1273   size_t count;
1274
1275   /* Are there any values with once_only set?
1276      This is used as an optimisation, it means we don't have to search
1277      the structure if we're processing a regular #include.  */
1278   bool have_once_only;
1279
1280   struct pchf_entry {
1281     /* The size of this file.  This is used to save running a MD5 checksum
1282        if the sizes don't match.  */
1283     off_t size;
1284     /* The MD5 checksum of this file.  */
1285     unsigned char sum[16];
1286     /* Is this file to be included only once?  */
1287     bool once_only;
1288   } entries[1];
1289 };
1290
1291 static struct pchf_data *pchf;
1292
1293 /* Data for pchf_addr.  */
1294 struct pchf_adder_info
1295 {
1296   cpp_reader *pfile;
1297   struct pchf_data *d;
1298 };
1299
1300 /* A hash traversal function to add entries into DATA->D.  */
1301
1302 static int
1303 pchf_adder (void **slot, void *data)
1304 {
1305   struct file_hash_entry *h = (struct file_hash_entry *) *slot;
1306   struct pchf_adder_info *i = (struct pchf_adder_info *) data;
1307
1308   if (h->start_dir != NULL && h->u.file->stack_count != 0)
1309     {
1310       struct pchf_data *d = i->d;
1311       _cpp_file *f = h->u.file;
1312       size_t count = d->count++;
1313
1314       /* This should probably never happen, since if a read error occurred
1315          the PCH file shouldn't be written...  */
1316       if (f->dont_read || f->err_no)
1317         return 1;
1318
1319       d->entries[count].once_only = f->once_only;
1320       d->have_once_only |= f->once_only;
1321       if (f->buffer_valid)
1322           md5_buffer ((const char *)f->buffer,
1323                       f->st.st_size, d->entries[count].sum);
1324       else
1325         {
1326           FILE *ff;
1327           int oldfd = f->fd;
1328
1329           if (!open_file (f))
1330             {
1331               open_file_failed (i->pfile, f);
1332               return 0;
1333             }
1334           ff = fdopen (f->fd, "rb");
1335           md5_stream (ff, d->entries[count].sum);
1336           fclose (ff);
1337           f->fd = oldfd;
1338         }
1339       d->entries[count].size = f->st.st_size;
1340     }
1341   return 1;
1342 }
1343
1344 /* A qsort ordering function for pchf_entry structures.  */
1345
1346 static int
1347 pchf_save_compare (const void *e1, const void *e2)
1348 {
1349   return memcmp (e1, e2, sizeof (struct pchf_entry));
1350 }
1351
1352 /* Create and write to F a pchf_data structure.  */
1353
1354 bool
1355 _cpp_save_file_entries (cpp_reader *pfile, FILE *f)
1356 {
1357   size_t count = 0;
1358   struct pchf_data *result;
1359   size_t result_size;
1360   struct pchf_adder_info pai;
1361
1362   count = htab_elements (pfile->file_hash);
1363   result_size = (sizeof (struct pchf_data)
1364                  + sizeof (struct pchf_entry) * (count - 1));
1365   result = xcalloc (result_size, 1);
1366
1367   result->count = 0;
1368   result->have_once_only = false;
1369
1370   pai.pfile = pfile;
1371   pai.d = result;
1372   htab_traverse (pfile->file_hash, pchf_adder, &pai);
1373
1374   result_size = (sizeof (struct pchf_data)
1375                  + sizeof (struct pchf_entry) * (result->count - 1));
1376
1377   qsort (result->entries, result->count, sizeof (struct pchf_entry),
1378          pchf_save_compare);
1379
1380   return fwrite (result, result_size, 1, f) == 1;
1381 }
1382
1383 /* Read the pchf_data structure from F.  */
1384
1385 bool
1386 _cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
1387 {
1388   struct pchf_data d;
1389
1390   if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
1391        != 1)
1392     return false;
1393
1394   pchf = xmalloc (sizeof (struct pchf_data)
1395                   + sizeof (struct pchf_entry) * (d.count - 1));
1396   memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
1397   if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
1398       != d.count)
1399     return false;
1400   return true;
1401 }
1402
1403 /* The parameters for pchf_compare.  */
1404
1405 struct pchf_compare_data
1406 {
1407   /* The size of the file we're looking for.  */
1408   off_t size;
1409
1410   /* The MD5 checksum of the file, if it's been computed.  */
1411   unsigned char sum[16];
1412
1413   /* Is SUM valid?  */
1414   bool sum_computed;
1415
1416   /* Do we need to worry about entries that don't have ONCE_ONLY set?  */
1417   bool check_included;
1418
1419   /* The file that we're searching for.  */
1420   _cpp_file *f;
1421 };
1422
1423 /* bsearch comparison function; look for D_P in E_P.  */
1424
1425 static int
1426 pchf_compare (const void *d_p, const void *e_p)
1427 {
1428   const struct pchf_entry *e = (const struct pchf_entry *)e_p;
1429   struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
1430   int result;
1431
1432   result = memcmp (&d->size, &e->size, sizeof (off_t));
1433   if (result != 0)
1434     return result;
1435
1436   if (! d->sum_computed)
1437     {
1438       _cpp_file *const f = d->f;
1439
1440       md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
1441       d->sum_computed = true;
1442     }
1443
1444   result = memcmp (d->sum, e->sum, 16);
1445   if (result != 0)
1446     return result;
1447
1448   if (d->check_included || e->once_only)
1449     return 0;
1450   else
1451     return 1;
1452 }
1453
1454 /* Check that F is not in a list read from a PCH file (if any).
1455    Assumes that f->buffer_valid is true.  Return TRUE if the file
1456    should not be read.  */
1457
1458 static bool
1459 check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
1460                             _cpp_file *f,
1461                             bool check_included)
1462 {
1463   struct pchf_compare_data d;
1464
1465   if (pchf == NULL
1466       || (! check_included && ! pchf->have_once_only))
1467     return false;
1468
1469   d.size = f->st.st_size;
1470   d.sum_computed = false;
1471   d.f = f;
1472   d.check_included = check_included;
1473   return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
1474                   pchf_compare) != NULL;
1475 }