OSDN Git Service

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