OSDN Git Service

* Makefile.in (C_AND_OBJC_OBJS, c-incpath.o, c-lex.o, LIBCPP_OBJS,
[pf3gnuchains/gcc-fork.git] / gcc / cppfiles.c
1 /* Part of CPP library.  (include 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
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 2, or (at your option) any
12 later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include <dirent.h>
26 #include "coretypes.h"
27 #include "tm.h"
28 #include "cpplib.h"
29 #include "cpphash.h"
30 #include "intl.h"
31 #include "mkdeps.h"
32 #include "splay-tree.h"
33 #ifdef ENABLE_VALGRIND_CHECKING
34 #include <valgrind.h>
35 #else
36 /* Avoid #ifdef:s when we can help it.  */
37 #define VALGRIND_DISCARD(x)
38 #endif
39
40 #ifdef HAVE_MMAP_FILE
41 # include <sys/mman.h>
42 # ifndef MMAP_THRESHOLD
43 #  define MMAP_THRESHOLD 3 /* Minimum page count to mmap the file.  */
44 # endif
45 # if MMAP_THRESHOLD
46 #  define TEST_THRESHOLD(size, pagesize) \
47      (size / pagesize >= MMAP_THRESHOLD && (size % pagesize) != 0)
48    /* Use mmap if the file is big enough to be worth it (controlled
49       by MMAP_THRESHOLD) and if we can safely count on there being
50       at least one readable NUL byte after the end of the file's
51       contents.  This is true for all tested operating systems when
52       the file size is not an exact multiple of the page size.  */
53 #  ifndef __CYGWIN__
54 #   define SHOULD_MMAP(size, pagesize) TEST_THRESHOLD (size, pagesize)
55 #  else
56 #   define WIN32_LEAN_AND_MEAN
57 #   include <windows.h>
58     /* Cygwin can't correctly emulate mmap under Windows 9x style systems so
59        disallow use of mmap on those systems.  Windows 9x does not zero fill
60        memory at EOF and beyond, as required.  */
61 #   define SHOULD_MMAP(size, pagesize) ((GetVersion() & 0x80000000) \
62                                         ? 0 : TEST_THRESHOLD (size, pagesize))
63 #  endif
64 # endif
65
66 #else  /* No MMAP_FILE */
67 #  undef MMAP_THRESHOLD
68 #  define MMAP_THRESHOLD 0
69 #endif
70
71 #ifndef O_BINARY
72 # define O_BINARY 0
73 #endif
74
75 /* If errno is inspected immediately after a system call fails, it will be
76    nonzero, and no error number will ever be zero.  */
77 #ifndef ENOENT
78 # define ENOENT 0
79 #endif
80 #ifndef ENOTDIR
81 # define ENOTDIR 0
82 #endif
83
84 /* Suppress warning about function macros used w/o arguments in traditional
85    C.  It is unlikely that glibc's strcmp macro helps this file at all.  */
86 #undef strcmp
87
88 /* This structure is used for the table of all includes.  */
89 struct include_file {
90   const char *name;             /* actual path name of file */
91   const char *header_name;      /* the original header found */
92   const cpp_hashnode *cmacro;   /* macro, if any, preventing reinclusion.  */
93   const struct cpp_path *foundhere;
94                                 /* location in search path where file was
95                                    found, for #include_next and sysp.  */
96   const unsigned char *buffer;  /* pointer to cached file contents */
97   struct stat st;               /* copy of stat(2) data for file */
98   int fd;                       /* fd open on file (short term storage only) */
99   int err_no;                   /* errno obtained if opening a file failed */
100   unsigned short include_count; /* number of times file has been read */
101   unsigned short refcnt;        /* number of stacked buffers using this file */
102   unsigned char mapped;         /* file buffer is mmapped */
103   unsigned char pch;            /* 0: file not known to be a PCH.
104                                    1: file is a PCH 
105                                       (on return from find_include_file).
106                                    2: file is not and never will be a valid
107                                       precompiled header.
108                                    3: file is always a valid precompiled
109                                       header.  */
110 };
111
112 /* Variable length record files on VMS will have a stat size that includes
113    record control characters that won't be included in the read size.  */
114 #ifdef VMS
115 # define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
116 # define STAT_SIZE_TOO_BIG(ST) ((ST).st_fab_rfm == FAB_C_VAR)
117 #else
118 # define STAT_SIZE_TOO_BIG(ST) 0
119 #endif
120
121 /* The cmacro works like this: If it's NULL, the file is to be
122    included again.  If it's NEVER_REREAD, the file is never to be
123    included again.  Otherwise it is a macro hashnode, and the file is
124    to be included again if the macro is defined.  */
125 #define NEVER_REREAD ((const cpp_hashnode *) -1)
126 #define DO_NOT_REREAD(inc) \
127 ((inc)->cmacro && ((inc)->cmacro == NEVER_REREAD \
128                    || (inc)->cmacro->type == NT_MACRO))
129 #define NO_INCLUDE_PATH ((struct include_file *) -1)
130 #define INCLUDE_PCH_P(F) (((F)->pch & 1) != 0)
131
132 static struct file_name_map *read_name_map
133                                 PARAMS ((cpp_reader *, const char *));
134 static char *read_filename_string PARAMS ((int, FILE *));
135 static char *remap_filename     PARAMS ((cpp_reader *, char *,
136                                          struct cpp_path *));
137 static struct cpp_path *search_from PARAMS ((cpp_reader *,
138                                                 enum include_type));
139 static struct include_file *
140         find_include_file PARAMS ((cpp_reader *, const cpp_token *,
141                                    enum include_type));
142 static struct include_file *open_file PARAMS ((cpp_reader *, const char *));
143 static struct include_file *validate_pch PARAMS ((cpp_reader *,
144                                                   const char *,
145                                                   const char *));
146 static struct include_file *open_file_pch PARAMS ((cpp_reader *, 
147                                                    const char *));
148 static int read_include_file    PARAMS ((cpp_reader *, struct include_file *));
149 static bool stack_include_file  PARAMS ((cpp_reader *, struct include_file *));
150 static void purge_cache         PARAMS ((struct include_file *));
151 static void destroy_node        PARAMS ((splay_tree_value));
152 static int report_missing_guard         PARAMS ((splay_tree_node, void *));
153 static splay_tree_node find_or_create_entry PARAMS ((cpp_reader *,
154                                                      const char *));
155 static void handle_missing_header PARAMS ((cpp_reader *, const char *, int));
156
157 /* Set up the splay tree we use to store information about all the
158    file names seen in this compilation.  We also have entries for each
159    file we tried to open but failed; this saves system calls since we
160    don't try to open it again in future.
161
162    The key of each node is the file name, after processing by
163    simplify_path.  The path name may or may not be absolute.
164    The path string has been malloced, as is automatically freed by
165    registering free () as the splay tree key deletion function.
166
167    A node's value is a pointer to a struct include_file, and is never
168    NULL.  */
169 void
170 _cpp_init_includes (pfile)
171      cpp_reader *pfile;
172 {
173   pfile->all_include_files
174     = splay_tree_new ((splay_tree_compare_fn) strcmp,
175                       (splay_tree_delete_key_fn) free,
176                       destroy_node);
177 }
178
179 /* Tear down the splay tree.  */
180 void
181 _cpp_cleanup_includes (pfile)
182      cpp_reader *pfile;
183 {
184   splay_tree_delete (pfile->all_include_files);
185 }
186
187 /* Free a node.  The path string is automatically freed.  */
188 static void
189 destroy_node (v)
190      splay_tree_value v;
191 {
192   struct include_file *f = (struct include_file *) v;
193
194   if (f)
195     {
196       purge_cache (f);
197       free (f);
198     }
199 }
200
201 /* Mark a file to not be reread (e.g. #import, read failure).  */
202 void
203 _cpp_never_reread (file)
204      struct include_file *file;
205 {
206   file->cmacro = NEVER_REREAD;
207 }
208
209 /* Lookup a filename, which is simplified after making a copy, and
210    create an entry if none exists.  */
211 static splay_tree_node
212 find_or_create_entry (pfile, fname)
213      cpp_reader *pfile;
214      const char *fname;
215 {
216   splay_tree_node node;
217   struct include_file *file;
218   char *name = xstrdup (fname);
219   int saved_errno = 0;
220
221   if (pfile->cb.simplify_path)
222     {
223       errno = 0;
224       (pfile->cb.simplify_path) (name);
225       saved_errno = errno;
226     }
227
228   node = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) name);
229   if (node)
230     free (name);
231   else
232     {
233       file = xcnew (struct include_file);
234       file->name = name;
235       file->header_name = name;
236       file->err_no = saved_errno;
237       node = splay_tree_insert (pfile->all_include_files,
238                                 (splay_tree_key) file->name,
239                                 (splay_tree_value) file);
240     }
241
242   return node;
243 }
244
245 /* Enter a file name in the splay tree, for the sake of cpp_included.  */
246 void
247 _cpp_fake_include (pfile, fname)
248      cpp_reader *pfile;
249      const char *fname;
250 {
251   find_or_create_entry (pfile, fname);
252 }
253
254 /* Given a file name, look it up in the cache; if there is no entry,
255    create one with a non-NULL value (regardless of success in opening
256    the file).  If the file doesn't exist or is inaccessible, this
257    entry is flagged so we don't attempt to open it again in the
258    future.  If the file isn't open, open it.  The empty string is
259    interpreted as stdin.
260
261    Returns an include_file structure with an open file descriptor on
262    success, or NULL on failure.  */
263 static struct include_file *
264 open_file (pfile, filename)
265      cpp_reader *pfile;
266      const char *filename;
267 {
268   splay_tree_node nd = find_or_create_entry (pfile, filename);
269   struct include_file *file = (struct include_file *) nd->value;
270
271   if (file->err_no)
272     {
273       /* Ugh.  handle_missing_header () needs errno to be set.  */
274       errno = file->err_no;
275       return 0;
276     }
277
278   /* Don't reopen an idempotent file.  */
279   if (DO_NOT_REREAD (file))
280     return file;
281
282   /* Don't reopen one which is already loaded.  */
283   if (file->buffer != NULL)
284     return file;
285
286   /* We used to open files in nonblocking mode, but that caused more
287      problems than it solved.  Do take care not to acquire a
288      controlling terminal by mistake (this can't happen on sane
289      systems, but paranoia is a virtue).
290
291      Use the three-argument form of open even though we aren't
292      specifying O_CREAT, to defend against broken system headers.
293
294      O_BINARY tells some runtime libraries (notably DJGPP) not to do
295      newline translation; we can handle DOS line breaks just fine
296      ourselves.
297
298      Special case: the empty string is translated to stdin.  */
299
300   if (filename[0] == '\0')
301     {
302       file->fd = 0;
303 #ifdef __DJGPP__
304       /* For DJGPP redirected input is opened in text mode. Change it
305          to binary mode.  */
306       if (! isatty (file->fd))
307         setmode (file->fd, O_BINARY);
308 #endif
309     }
310   else
311     file->fd = open (file->name, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
312
313   if (file->fd != -1 && fstat (file->fd, &file->st) == 0)
314     {
315       if (!S_ISDIR (file->st.st_mode))
316         return file;
317
318       /* If it's a directory, we return null and continue the search
319          as the file we're looking for may appear elsewhere in the
320          search path.  */
321       errno = ENOENT;
322       close (file->fd);
323       file->fd = -1;
324     }
325
326   file->err_no = errno;
327   return 0;
328 }
329
330 static struct include_file *
331 validate_pch (pfile, filename, pchname)
332      cpp_reader *pfile;
333      const char *filename;
334      const char *pchname;
335 {
336   struct include_file * file;
337   
338   file = open_file (pfile, pchname);
339   if (file == NULL)
340     return NULL;
341   if ((file->pch & 2) == 0)
342     file->pch = pfile->cb.valid_pch (pfile, pchname, file->fd);
343   if (INCLUDE_PCH_P (file))
344     {
345       char *f = xstrdup (filename);
346       (pfile->cb.simplify_path) (f);
347       file->header_name = f;
348       return file;
349     }
350   close (file->fd);
351   file->fd = -1;
352   return NULL;
353 }
354
355
356 /* Like open_file, but also look for a precompiled header if (a) one exists
357    and (b) it is valid.  */
358 static struct include_file *
359 open_file_pch (pfile, filename)
360      cpp_reader *pfile;
361      const char *filename;
362 {
363   if (filename[0] != '\0'
364       && pfile->cb.valid_pch != NULL)
365     {
366       size_t namelen = strlen (filename);
367       char *pchname = alloca (namelen + 5);
368       struct include_file * file;
369       splay_tree_node nd;
370       
371       memcpy (pchname, filename, namelen);
372       memcpy (pchname + namelen, ".gch", 5);
373
374       nd = find_or_create_entry (pfile, pchname);
375       file = (struct include_file *) nd->value;
376
377       if (file != NULL)
378         {
379           if (stat (file->name, &file->st) == 0 && S_ISDIR (file->st.st_mode))
380             {
381               DIR * thedir;
382               struct dirent *d;
383               size_t subname_len = namelen + 64;
384               char *subname = xmalloc (subname_len);
385               
386               thedir = opendir (pchname);
387               if (thedir == NULL)
388                 return NULL;
389               memcpy (subname, pchname, namelen + 4);
390               subname[namelen+4] = '/';
391               while ((d = readdir (thedir)) != NULL)
392                 {
393                   if (strlen (d->d_name) + namelen + 7 > subname_len)
394                     {
395                       subname_len = strlen (d->d_name) + namelen + 64;
396                       subname = xrealloc (subname, subname_len);
397                     }
398                   strcpy (subname + namelen + 5, d->d_name);
399                   file = validate_pch (pfile, filename, subname);
400                   if (file)
401                     break;
402                 }
403               closedir (thedir);
404               free (subname);
405             }
406           else
407             file = validate_pch (pfile, filename, pchname);
408           if (file)
409             return file;
410         }
411     }
412   return open_file (pfile, filename);
413 }
414
415 /* Place the file referenced by INC into a new buffer on the buffer
416    stack, unless there are errors, or the file is not re-included
417    because of e.g. multiple-include guards.  Returns true if a buffer
418    is stacked.  */
419 static bool
420 stack_include_file (pfile, inc)
421      cpp_reader *pfile;
422      struct include_file *inc;
423 {
424   cpp_buffer *fp;
425   int sysp;
426   const char *filename;
427
428   if (DO_NOT_REREAD (inc))
429     return false;
430
431   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
432               (inc->foundhere ? inc->foundhere->sysp : 0));
433
434   /* Add the file to the dependencies on its first inclusion.  */
435   if (CPP_OPTION (pfile, deps.style) > !!sysp && !inc->include_count)
436     {
437       if (pfile->buffer || CPP_OPTION (pfile, deps.ignore_main_file) == 0)
438         deps_add_dep (pfile->deps, inc->name);
439     }
440
441   /* PCH files get dealt with immediately.  */
442   if (INCLUDE_PCH_P (inc))
443     {
444       pfile->cb.read_pch (pfile, inc->name, inc->fd, inc->header_name);
445       close (inc->fd);
446       inc->fd = -1;
447       return false;
448     }
449
450   /* Not in cache?  */
451   if (! inc->buffer)
452     {
453       if (read_include_file (pfile, inc))
454         {
455           /* If an error occurs, do not try to read this file again.  */
456           _cpp_never_reread (inc);
457           return false;
458         }
459       /* Mark a regular, zero-length file never-reread.  We read it,
460          NUL-terminate it, and stack it once, so preprocessing a main
461          file of zero length does not raise an error.  */
462       if (S_ISREG (inc->st.st_mode) && inc->st.st_size == 0)
463         _cpp_never_reread (inc);
464       close (inc->fd);
465       inc->fd = -1;
466     }
467
468   if (pfile->buffer)
469     /* We don't want MI guard advice for the main file.  */
470     inc->include_count++;
471
472   /* Push a buffer.  */
473   fp = cpp_push_buffer (pfile, inc->buffer, inc->st.st_size,
474                         /* from_stage3 */ CPP_OPTION (pfile, preprocessed), 0);
475   fp->inc = inc;
476   fp->inc->refcnt++;
477
478   /* Initialize controlling macro state.  */
479   pfile->mi_valid = true;
480   pfile->mi_cmacro = 0;
481
482   /* Generate the call back.  */
483   filename = inc->name;
484   if (*filename == '\0')
485     filename = "<stdin>";
486   _cpp_do_file_change (pfile, LC_ENTER, filename, 1, sysp);
487
488   return true;
489 }
490
491 /* Read the file referenced by INC into the file cache.
492
493    If fd points to a plain file, we might be able to mmap it; we can
494    definitely allocate the buffer all at once.  If fd is a pipe or
495    terminal, we can't do either.  If fd is something weird, like a
496    block device, we don't want to read it at all.
497
498    Unfortunately, different systems use different st.st_mode values
499    for pipes: some have S_ISFIFO, some S_ISSOCK, some are buggy and
500    zero the entire struct stat except a couple fields.  Hence we don't
501    even try to figure out what something is, except for plain files
502    and block devices.
503
504    FIXME: Flush file cache and try again if we run out of memory.  */
505 static int
506 read_include_file (pfile, inc)
507      cpp_reader *pfile;
508      struct include_file *inc;
509 {
510   ssize_t size, offset, count;
511   uchar *buf;
512 #if MMAP_THRESHOLD
513   static int pagesize = -1;
514 #endif
515
516   if (S_ISREG (inc->st.st_mode))
517     {
518       /* off_t might have a wider range than ssize_t - in other words,
519          the max size of a file might be bigger than the address
520          space.  We can't handle a file that large.  (Anyone with
521          a single source file bigger than 2GB needs to rethink
522          their coding style.)  Some systems (e.g. AIX 4.1) define
523          SSIZE_MAX to be much smaller than the actual range of the
524          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
525          does not bite us.  */
526       if (inc->st.st_size > INTTYPE_MAXIMUM (ssize_t))
527         {
528           cpp_error (pfile, DL_ERROR, "%s is too large", inc->name);
529           goto fail;
530         }
531       size = inc->st.st_size;
532
533       inc->mapped = 0;
534 #if MMAP_THRESHOLD
535       if (pagesize == -1)
536         pagesize = getpagesize ();
537
538       if (SHOULD_MMAP (size, pagesize))
539         {
540           buf = (uchar *) mmap (0, size, PROT_READ, MAP_PRIVATE, inc->fd, 0);
541           if (buf == (uchar *) -1)
542             goto perror_fail;
543
544           /* We must tell Valgrind that the byte at buf[size] is actually
545              readable.  Discard the handle to avoid handle leak.  */
546           VALGRIND_DISCARD (VALGRIND_MAKE_READABLE (buf + size, 1));
547
548           inc->mapped = 1;
549         }
550       else
551 #endif
552         {
553           buf = (uchar *) xmalloc (size + 1);
554           offset = 0;
555           while (offset < size)
556             {
557               count = read (inc->fd, buf + offset, size - offset);
558               if (count < 0)
559                 goto perror_fail;
560               if (count == 0)
561                 {
562                   if (!STAT_SIZE_TOO_BIG (inc->st))
563                     cpp_error (pfile, DL_WARNING,
564                                "%s is shorter than expected", inc->name);
565                   size = offset;
566                   buf = xrealloc (buf, size + 1);
567                   inc->st.st_size = size;
568                   break;
569                 }
570               offset += count;
571             }
572           /* The lexer requires that the buffer be NUL-terminated.  */
573           buf[size] = '\0';
574         }
575     }
576   else if (S_ISBLK (inc->st.st_mode))
577     {
578       cpp_error (pfile, DL_ERROR, "%s is a block device", inc->name);
579       goto fail;
580     }
581   else
582     {
583       /* 8 kilobytes is a sensible starting size.  It ought to be
584          bigger than the kernel pipe buffer, and it's definitely
585          bigger than the majority of C source files.  */
586       size = 8 * 1024;
587
588       buf = (uchar *) xmalloc (size + 1);
589       offset = 0;
590       while ((count = read (inc->fd, buf + offset, size - offset)) > 0)
591         {
592           offset += count;
593           if (offset == size)
594             {
595               size *= 2;
596               buf = xrealloc (buf, size + 1);
597             }
598         }
599       if (count < 0)
600         goto perror_fail;
601
602       if (offset + 1 < size)
603         buf = xrealloc (buf, offset + 1);
604
605       /* The lexer requires that the buffer be NUL-terminated.  */
606       buf[offset] = '\0';
607       inc->st.st_size = offset;
608     }
609
610   inc->buffer = buf;
611   return 0;
612
613  perror_fail:
614   cpp_errno (pfile, DL_ERROR, inc->name);
615  fail:
616   return 1;
617 }
618
619 /* Drop INC's buffer from memory, if we are unlikely to need it again.  */
620 static void
621 purge_cache (inc)
622      struct include_file *inc;
623 {
624   if (inc->buffer)
625     {
626 #if MMAP_THRESHOLD
627       if (inc->mapped)
628         {
629           /* Undo the previous annotation for the
630              known-zero-byte-after-mmap.  Discard the handle to avoid
631              handle leak.  */
632           VALGRIND_DISCARD (VALGRIND_MAKE_NOACCESS (inc->buffer
633                                                     + inc->st.st_size, 1));
634           munmap ((PTR) inc->buffer, inc->st.st_size);
635         }
636       else
637 #endif
638         free ((PTR) inc->buffer);
639       inc->buffer = NULL;
640     }
641 }
642
643 /* Return 1 if the file named by FNAME has been included before in
644    any context, 0 otherwise.  */
645 int
646 cpp_included (pfile, fname)
647      cpp_reader *pfile;
648      const char *fname;
649 {
650   struct cpp_path *path;
651   char *name, *n;
652   splay_tree_node nd;
653
654   if (IS_ABSOLUTE_PATHNAME (fname))
655     {
656       /* Just look it up.  */
657       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) fname);
658       return (nd && nd->value);
659     }
660
661   /* Search directory path for the file.  */
662   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
663   for (path = pfile->quote_include; path; path = path->next)
664     {
665       memcpy (name, path->name, path->len);
666       name[path->len] = '/';
667       strcpy (&name[path->len + 1], fname);
668       if (CPP_OPTION (pfile, remap))
669         n = remap_filename (pfile, name, path);
670       else
671         n = name;
672
673       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) n);
674       if (nd && nd->value)
675         return 1;
676     }
677   return 0;
678 }
679
680 /* Search for HEADER.  Return 0 if there is no such file (or it's
681    un-openable), in which case an error code will be in errno.  If
682    there is no include path to use it returns NO_INCLUDE_PATH,
683    otherwise an include_file structure.  If this request originates
684    from a directive of TYPE #include_next, set INCLUDE_NEXT to true.  */
685 static struct include_file *
686 find_include_file (pfile, header, type)
687      cpp_reader *pfile;
688      const cpp_token *header;
689      enum include_type type;
690 {
691   const char *fname = (const char *) header->val.str.text;
692   struct cpp_path *path;
693   struct include_file *file;
694   char *name, *n;
695
696   if (IS_ABSOLUTE_PATHNAME (fname))
697     return open_file_pch (pfile, fname);
698
699   /* For #include_next, skip in the search path past the dir in which
700      the current file was found, but if it was found via an absolute
701      path use the normal search logic.  */
702   if (type == IT_INCLUDE_NEXT && pfile->buffer->inc->foundhere)
703     path = pfile->buffer->inc->foundhere->next;
704   else if (header->type == CPP_HEADER_NAME)
705     path = pfile->bracket_include;
706   else
707     path = search_from (pfile, type);
708
709   if (path == NULL)
710     {
711       cpp_error (pfile, DL_ERROR, "no include path in which to find %s",
712                  fname);
713       return NO_INCLUDE_PATH;
714     }
715
716   /* Search directory path for the file.  */
717   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
718   for (; path; path = path->next)
719     {
720       int len = path->len;
721       memcpy (name, path->name, len);
722       /* Don't turn / into // or // into ///; // may be a namespace
723          escape.  */
724       if (name[len-1] == '/')
725         len--;
726       name[len] = '/';
727       strcpy (&name[len + 1], fname);
728       if (CPP_OPTION (pfile, remap))
729         n = remap_filename (pfile, name, path);
730       else
731         n = name;
732
733       file = open_file_pch (pfile, n);
734       if (file)
735         {
736           file->foundhere = path;
737           return file;
738         }
739     }
740
741   return 0;
742 }
743
744 /* Not everyone who wants to set system-header-ness on a buffer can
745    see the details of a buffer.  This is an exported interface because
746    fix-header needs it.  */
747 void
748 cpp_make_system_header (pfile, syshdr, externc)
749      cpp_reader *pfile;
750      int syshdr, externc;
751 {
752   int flags = 0;
753
754   /* 1 = system header, 2 = system header to be treated as C.  */
755   if (syshdr)
756     flags = 1 + (externc != 0);
757   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
758                        SOURCE_LINE (pfile->map, pfile->line), flags);
759 }
760
761 /* Report on all files that might benefit from a multiple include guard.
762    Triggered by -H.  */
763 void
764 _cpp_report_missing_guards (pfile)
765      cpp_reader *pfile;
766 {
767   int banner = 0;
768   splay_tree_foreach (pfile->all_include_files, report_missing_guard,
769                       (PTR) &banner);
770 }
771
772 /* Callback function for splay_tree_foreach().  */
773 static int
774 report_missing_guard (n, b)
775      splay_tree_node n;
776      void *b;
777 {
778   struct include_file *f = (struct include_file *) n->value;
779   int *bannerp = (int *) b;
780
781   if (f && f->cmacro == 0 && f->include_count == 1)
782     {
783       if (*bannerp == 0)
784         {
785           fputs (_("Multiple include guards may be useful for:\n"), stderr);
786           *bannerp = 1;
787         }
788       fputs (f->name, stderr);
789       putc ('\n', stderr);
790     }
791   return 0;
792 }
793
794 /* Create a dependency for file FNAME, or issue an error message as
795    appropriate.  ANGLE_BRACKETS is nonzero if the file was bracketed
796    like <..>.  */
797 static void
798 handle_missing_header (pfile, fname, angle_brackets)
799      cpp_reader *pfile;
800      const char *fname;
801      int angle_brackets;
802 {
803   bool print_dep
804     = CPP_OPTION (pfile, deps.style) > (angle_brackets || pfile->map->sysp);
805
806   if (CPP_OPTION (pfile, deps.missing_files) && print_dep)
807     deps_add_dep (pfile->deps, fname);
808   /* If -M was specified, then don't count this as an error, because
809      we can still produce correct output.  Otherwise, we can't produce
810      correct output, because there may be dependencies we need inside
811      the missing file, and we don't know what directory this missing
812      file exists in.  */
813   else
814     cpp_errno (pfile, CPP_OPTION (pfile, deps.style) && ! print_dep
815                ? DL_WARNING: DL_ERROR, fname);
816 }
817
818 /* Handles #include-family directives (distinguished by TYPE),
819    including HEADER, and the command line -imacros and -include.
820    Returns true if a buffer was stacked.  */
821 bool
822 _cpp_execute_include (pfile, header, type)
823      cpp_reader *pfile;
824      const cpp_token *header;
825      enum include_type type;
826 {
827   bool stacked = false;
828   struct include_file *inc = find_include_file (pfile, header, type);
829
830   if (inc == 0)
831     handle_missing_header (pfile, (const char *) header->val.str.text,
832                            header->type == CPP_HEADER_NAME);
833   else if (inc != NO_INCLUDE_PATH)
834     {
835       stacked = stack_include_file (pfile, inc);
836
837       if (type == IT_IMPORT)
838         _cpp_never_reread (inc);
839     }
840
841   return stacked;
842 }
843
844 /* Locate HEADER, and determine whether it is newer than the current
845    file.  If it cannot be located or dated, return -1, if it is newer
846    newer, return 1, otherwise 0.  */
847 int
848 _cpp_compare_file_date (pfile, header)
849      cpp_reader *pfile;
850      const cpp_token *header;
851 {
852   struct include_file *inc = find_include_file (pfile, header, 0);
853
854   if (inc == NULL || inc == NO_INCLUDE_PATH)
855     return -1;
856
857   if (inc->fd > 0)
858     {
859       close (inc->fd);
860       inc->fd = -1;
861     }
862
863   return inc->st.st_mtime > pfile->buffer->inc->st.st_mtime;
864 }
865
866
867 /* Push an input buffer and load it up with the contents of FNAME.  If
868    FNAME is "", read standard input.  Return true if a buffer was
869    stacked.  */
870 bool
871 _cpp_read_file (pfile, fname)
872      cpp_reader *pfile;
873      const char *fname;
874 {
875   /* This uses open_file, because we don't allow a PCH to be used as
876      the toplevel compilation (that would prevent re-compiling an
877      existing PCH without deleting it first).  */
878   struct include_file *f = open_file (pfile, fname);
879
880   if (f == NULL)
881     {
882       cpp_errno (pfile, DL_ERROR, fname);
883       return false;
884     }
885
886   return stack_include_file (pfile, f);
887 }
888
889 /* Do appropriate cleanup when a file INC's buffer is popped off the
890    input stack.  */
891 void
892 _cpp_pop_file_buffer (pfile, inc)
893      cpp_reader *pfile;
894      struct include_file *inc;
895 {
896   /* Record the inclusion-preventing macro, which could be NULL
897      meaning no controlling macro.  */
898   if (pfile->mi_valid && inc->cmacro == NULL)
899     inc->cmacro = pfile->mi_cmacro;
900
901   /* Invalidate control macros in the #including file.  */
902   pfile->mi_valid = false;
903
904   inc->refcnt--;
905   if (inc->refcnt == 0 && DO_NOT_REREAD (inc))
906     purge_cache (inc);
907 }
908
909 /* Returns the first place in the include chain to start searching for
910    "" includes.  This involves stripping away the basename of the
911    current file, unless -I- was specified.
912
913    If we're handling -include or -imacros, use the "" chain, but with
914    the preprocessor's cwd prepended.  */
915 static struct cpp_path *
916 search_from (pfile, type)
917      cpp_reader *pfile;
918      enum include_type type;
919 {
920   cpp_buffer *buffer = pfile->buffer;
921   unsigned int dlen;
922
923   /* Command line uses the cwd, and does not cache the result.  */
924   if (type == IT_CMDLINE)
925     goto use_cwd;
926
927   /* Ignore the current file's directory?  */
928   if (pfile->quote_ignores_source_dir)
929     return pfile->quote_include;
930
931   if (! buffer->search_cached)
932     {
933       buffer->search_cached = 1;
934
935       dlen = lbasename (buffer->inc->name) - buffer->inc->name;
936
937       if (dlen)
938         {
939           /* We don't guarantee NAME is null-terminated.  This saves
940              allocating and freeing memory.  Drop a trailing '/'.  */
941           buffer->dir.name = (char *) buffer->inc->name;
942           if (dlen > 1)
943             dlen--;
944         }
945       else
946         {
947         use_cwd:
948           buffer->dir.name = (char *) ".";
949           dlen = 1;
950         }
951
952       if (dlen > pfile->max_include_len)
953         pfile->max_include_len = dlen;
954
955       buffer->dir.len = dlen;
956       buffer->dir.next = pfile->quote_include;
957       buffer->dir.sysp = pfile->map->sysp;
958     }
959
960   return &buffer->dir;
961 }
962
963 /* The file_name_map structure holds a mapping of file names for a
964    particular directory.  This mapping is read from the file named
965    FILE_NAME_MAP_FILE in that directory.  Such a file can be used to
966    map filenames on a file system with severe filename restrictions,
967    such as DOS.  The format of the file name map file is just a series
968    of lines with two tokens on each line.  The first token is the name
969    to map, and the second token is the actual name to use.  */
970 struct file_name_map {
971   struct file_name_map *map_next;
972   char *map_from;
973   char *map_to;
974 };
975
976 #define FILE_NAME_MAP_FILE "header.gcc"
977
978 /* Read a space delimited string of unlimited length from a stdio
979    file F.  */
980 static char *
981 read_filename_string (ch, f)
982      int ch;
983      FILE *f;
984 {
985   char *alloc, *set;
986   int len;
987
988   len = 20;
989   set = alloc = xmalloc (len + 1);
990   if (! is_space (ch))
991     {
992       *set++ = ch;
993       while ((ch = getc (f)) != EOF && ! is_space (ch))
994         {
995           if (set - alloc == len)
996             {
997               len *= 2;
998               alloc = xrealloc (alloc, len + 1);
999               set = alloc + len / 2;
1000             }
1001           *set++ = ch;
1002         }
1003     }
1004   *set = '\0';
1005   ungetc (ch, f);
1006   return alloc;
1007 }
1008
1009 /* This structure holds a linked list of file name maps, one per directory.  */
1010 struct file_name_map_list {
1011   struct file_name_map_list *map_list_next;
1012   char *map_list_name;
1013   struct file_name_map *map_list_map;
1014 };
1015
1016 /* Read the file name map file for DIRNAME.  */
1017 static struct file_name_map *
1018 read_name_map (pfile, dirname)
1019      cpp_reader *pfile;
1020      const char *dirname;
1021 {
1022   struct file_name_map_list *map_list_ptr;
1023   char *name;
1024   FILE *f;
1025
1026   /* Check the cache of directories, and mappings in their remap file.  */
1027   for (map_list_ptr = CPP_OPTION (pfile, map_list); map_list_ptr;
1028        map_list_ptr = map_list_ptr->map_list_next)
1029     if (! strcmp (map_list_ptr->map_list_name, dirname))
1030       return map_list_ptr->map_list_map;
1031
1032   map_list_ptr = ((struct file_name_map_list *)
1033                   xmalloc (sizeof (struct file_name_map_list)));
1034   map_list_ptr->map_list_name = xstrdup (dirname);
1035
1036   /* The end of the list ends in NULL.  */
1037   map_list_ptr->map_list_map = NULL;
1038
1039   name = (char *) alloca (strlen (dirname) + strlen (FILE_NAME_MAP_FILE) + 2);
1040   strcpy (name, dirname);
1041   if (*dirname)
1042     strcat (name, "/");
1043   strcat (name, FILE_NAME_MAP_FILE);
1044   f = fopen (name, "r");
1045
1046   /* Silently return NULL if we cannot open.  */
1047   if (f)
1048     {
1049       int ch;
1050
1051       while ((ch = getc (f)) != EOF)
1052         {
1053           char *from, *to;
1054           struct file_name_map *ptr;
1055
1056           if (is_space (ch))
1057             continue;
1058           from = read_filename_string (ch, f);
1059           while ((ch = getc (f)) != EOF && is_hspace (ch))
1060             ;
1061           to = read_filename_string (ch, f);
1062
1063           ptr = ((struct file_name_map *)
1064                  xmalloc (sizeof (struct file_name_map)));
1065           ptr->map_from = from;
1066
1067           /* Make the real filename absolute.  */
1068           if (IS_ABSOLUTE_PATHNAME (to))
1069             ptr->map_to = to;
1070           else
1071             {
1072               ptr->map_to = concat (dirname, "/", to, NULL);
1073               free (to);
1074             }
1075
1076           ptr->map_next = map_list_ptr->map_list_map;
1077           map_list_ptr->map_list_map = ptr;
1078
1079           while ((ch = getc (f)) != '\n')
1080             if (ch == EOF)
1081               break;
1082         }
1083       fclose (f);
1084     }
1085
1086   /* Add this information to the cache.  */
1087   map_list_ptr->map_list_next = CPP_OPTION (pfile, map_list);
1088   CPP_OPTION (pfile, map_list) = map_list_ptr;
1089
1090   return map_list_ptr->map_list_map;
1091 }
1092
1093 /* Remap an unsimplified path NAME based on the file_name_map (if any)
1094    for LOC.  */
1095 static char *
1096 remap_filename (pfile, name, loc)
1097      cpp_reader *pfile;
1098      char *name;
1099      struct cpp_path *loc;
1100 {
1101   struct file_name_map *map;
1102   const char *from, *p;
1103   char *dir;
1104
1105   if (! loc->name_map)
1106     {
1107       /* Get a null-terminated path.  */
1108       char *dname = alloca (loc->len + 1);
1109       memcpy (dname, loc->name, loc->len);
1110       dname[loc->len] = '\0';
1111
1112       loc->name_map = read_name_map (pfile, dname);
1113       if (! loc->name_map)
1114         return name;
1115     }
1116
1117   /* This works since NAME has not been simplified yet.  */
1118   from = name + loc->len + 1;
1119
1120   for (map = loc->name_map; map; map = map->map_next)
1121     if (!strcmp (map->map_from, from))
1122       return map->map_to;
1123
1124   /* Try to find a mapping file for the particular directory we are
1125      looking in.  Thus #include <sys/types.h> will look up sys/types.h
1126      in /usr/include/header.gcc and look up types.h in
1127      /usr/include/sys/header.gcc.  */
1128   p = strrchr (name, '/');
1129   if (!p)
1130     return name;
1131
1132   /* We know p != name as absolute paths don't call remap_filename.  */
1133   if (p == name)
1134     cpp_error (pfile, DL_ICE, "absolute file name in remap_filename");
1135
1136   dir = (char *) alloca (p - name + 1);
1137   memcpy (dir, name, p - name);
1138   dir[p - name] = '\0';
1139   from = p + 1;
1140
1141   for (map = read_name_map (pfile, dir); map; map = map->map_next)
1142     if (! strcmp (map->map_from, from))
1143       return map->map_to;
1144
1145   return name;
1146 }
1147
1148 /* Set the include chain for "" to QUOTE, for <> to BRACKET.  If
1149    QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1150    directory of the including file.
1151
1152    If BRACKET does not lie in the QUOTE chain, it is set to QUOTE.  */
1153 void
1154 cpp_set_include_chains (pfile, quote, bracket, quote_ignores_source_dir)
1155      cpp_reader *pfile;
1156      cpp_path *quote, *bracket;
1157      int quote_ignores_source_dir;
1158 {
1159   pfile->quote_include = quote;
1160   pfile->bracket_include = quote;
1161   pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1162   pfile->max_include_len = 0;
1163
1164   for (; quote; quote = quote->next)
1165     {
1166       quote->name_map = NULL;
1167       quote->len = strlen (quote->name);
1168       if (quote->len > pfile->max_include_len)
1169         pfile->max_include_len = quote->len;
1170       if (quote == bracket)
1171         pfile->bracket_include = bracket;
1172     }
1173 }