OSDN Git Service

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