OSDN Git Service

* cppfiles.c (stack_include_file): Don't handle -H here.
[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 bool 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 the buffer
279    stack, unless there are errors, or the file is not re-included
280    because of e.g. multiple-include guards.  Returns true if a buffer
281    is stacked.  */
282
283 static bool
284 stack_include_file (pfile, inc)
285      cpp_reader *pfile;
286      struct include_file *inc;
287 {
288   cpp_buffer *fp;
289   int sysp;
290   const char *filename;
291
292   if (DO_NOT_REREAD (inc))
293     return false;
294
295   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
296               (inc->foundhere ? inc->foundhere->sysp : 0));
297
298   /* For -M, add the file to the dependencies on its first inclusion.  */
299   if (CPP_OPTION (pfile, print_deps) > sysp && !inc->include_count)
300     deps_add_dep (pfile->deps, inc->name);
301
302   /* Not in cache?  */
303   if (! inc->buffer)
304     {
305       /* If an error occurs, do not try to read this file again.  */
306       if (read_include_file (pfile, inc))
307         {
308           _cpp_never_reread (inc);
309           return false;
310         }
311       close (inc->fd);
312       inc->fd = -1;
313     }
314
315   if (pfile->buffer)
316     /* We don't want MI guard advice for the main file.  */
317     inc->include_count++;
318
319   /* Push a buffer.  */
320   fp = cpp_push_buffer (pfile, inc->buffer, inc->st.st_size, BUF_FILE, 0);
321   fp->inc = inc;
322   fp->inc->refcnt++;
323
324   /* Initialise controlling macro state.  */
325   pfile->mi_valid = true;
326   pfile->mi_cmacro = 0;
327   pfile->include_depth++;
328
329   /* Generate the call back.  */
330   filename = inc->name;
331   if (*filename == '\0')
332     filename = _("<stdin>");
333   _cpp_do_file_change (pfile, LC_ENTER, filename, 1, sysp);
334
335   return true;
336 }
337
338 /* Read the file referenced by INC into the file cache.
339
340    If fd points to a plain file, we might be able to mmap it; we can
341    definitely allocate the buffer all at once.  If fd is a pipe or
342    terminal, we can't do either.  If fd is something weird, like a
343    block device, we don't want to read it at all.
344
345    Unfortunately, different systems use different st.st_mode values
346    for pipes: some have S_ISFIFO, some S_ISSOCK, some are buggy and
347    zero the entire struct stat except a couple fields.  Hence we don't
348    even try to figure out what something is, except for plain files
349    and block devices.
350
351    FIXME: Flush file cache and try again if we run out of memory.  */
352
353 static int
354 read_include_file (pfile, inc)
355      cpp_reader *pfile;
356      struct include_file *inc;
357 {
358   ssize_t size, offset, count;
359   U_CHAR *buf;
360 #if MMAP_THRESHOLD
361   static int pagesize = -1;
362 #endif
363
364   if (S_ISREG (inc->st.st_mode))
365     {
366       /* off_t might have a wider range than ssize_t - in other words,
367          the max size of a file might be bigger than the address
368          space.  We can't handle a file that large.  (Anyone with
369          a single source file bigger than 2GB needs to rethink
370          their coding style.)  Some systems (e.g. AIX 4.1) define
371          SSIZE_MAX to be much smaller than the actual range of the
372          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
373          does not bite us.  */
374       if (inc->st.st_size > INTTYPE_MAXIMUM (ssize_t))
375         {
376           cpp_error (pfile, "%s is too large", inc->name);
377           goto fail;
378         }
379       size = inc->st.st_size;
380
381       inc->mapped = 0;
382 #if MMAP_THRESHOLD
383       if (pagesize == -1)
384         pagesize = getpagesize ();
385
386       if (size / pagesize >= MMAP_THRESHOLD)
387         {
388           buf = (U_CHAR *) mmap (0, size, PROT_READ, MAP_PRIVATE, inc->fd, 0);
389           if (buf == (U_CHAR *)-1)
390             goto perror_fail;
391           inc->mapped = 1;
392         }
393       else
394 #endif
395         {
396           buf = (U_CHAR *) xmalloc (size);
397           offset = 0;
398           while (offset < size)
399             {
400               count = read (inc->fd, buf + offset, size - offset);
401               if (count < 0)
402                 goto perror_fail;
403               if (count == 0)
404                 {
405                   cpp_warning (pfile, "%s is shorter than expected", inc->name);
406                   break;
407                 }
408               offset += count;
409             }
410         }
411     }
412   else if (S_ISBLK (inc->st.st_mode))
413     {
414       cpp_error (pfile, "%s is a block device", inc->name);
415       goto fail;
416     }
417   else
418     {
419       /* 8 kilobytes is a sensible starting size.  It ought to be
420          bigger than the kernel pipe buffer, and it's definitely
421          bigger than the majority of C source files.  */
422       size = 8 * 1024;
423
424       buf = (U_CHAR *) xmalloc (size);
425       offset = 0;
426       while ((count = read (inc->fd, buf + offset, size - offset)) > 0)
427         {
428           offset += count;
429           if (offset == size)
430             buf = xrealloc (buf, (size *= 2));
431         }
432       if (count < 0)
433         goto perror_fail;
434
435       if (offset < size)
436         buf = xrealloc (buf, offset);
437       inc->st.st_size = offset;
438     }
439
440   inc->buffer = buf;
441   return 0;
442
443  perror_fail:
444   cpp_error_from_errno (pfile, inc->name);
445  fail:
446   return 1;
447 }
448
449 static void
450 purge_cache (inc)
451      struct include_file *inc;
452 {
453   if (inc->buffer)
454     {
455 #if MMAP_THRESHOLD
456       if (inc->mapped)
457         munmap ((PTR) inc->buffer, inc->st.st_size);
458       else
459 #endif
460         free ((PTR) inc->buffer);
461       inc->buffer = NULL;
462     }
463 }
464
465 /* Return 1 if the file named by FNAME has been included before in
466    any context, 0 otherwise.  */
467 int
468 cpp_included (pfile, fname)
469      cpp_reader *pfile;
470      const char *fname;
471 {
472   struct search_path *path;
473   char *name, *n;
474   splay_tree_node nd;
475
476   if (IS_ABSOLUTE_PATHNAME (fname))
477     {
478       /* Just look it up.  */
479       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) fname);
480       return (nd && nd->value);
481     }
482       
483   /* Search directory path for the file.  */
484   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
485   for (path = CPP_OPTION (pfile, quote_include); path; path = path->next)
486     {
487       memcpy (name, path->name, path->len);
488       name[path->len] = '/';
489       strcpy (&name[path->len + 1], fname);
490       if (CPP_OPTION (pfile, remap))
491         n = remap_filename (pfile, name, path);
492       else
493         n = name;
494
495       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) n);
496       if (nd && nd->value)
497         return 1;
498     }
499   return 0;
500 }
501
502 /* Search for HEADER.  Return 0 if there is no such file (or it's
503    un-openable), in which case an error code will be in errno.  If
504    there is no include path to use it returns NO_INCLUDE_PATH,
505    otherwise an include_file structure.  If this request originates
506    from a #include_next directive, set INCLUDE_NEXT to true.  */
507
508 static struct include_file *
509 find_include_file (pfile, header, type)
510      cpp_reader *pfile;
511      const cpp_token *header;
512      enum include_type type;
513 {
514   const char *fname = (const char *) header->val.str.text;
515   struct search_path *path;
516   struct include_file *file;
517   char *name, *n;
518
519   if (IS_ABSOLUTE_PATHNAME (fname))
520     return open_file (pfile, fname);
521
522   /* For #include_next, skip in the search path past the dir in which
523      the current file was found, but if it was found via an absolute
524      path use the normal search logic.  */
525   if (type == IT_INCLUDE_NEXT && pfile->buffer->inc->foundhere)
526     path = pfile->buffer->inc->foundhere->next;
527   else if (header->type == CPP_HEADER_NAME)
528     path = CPP_OPTION (pfile, bracket_include);
529   else
530     path = search_from (pfile, type);
531
532   if (path == NULL)
533     {
534       cpp_error (pfile, "No include path in which to find %s", fname);
535       return NO_INCLUDE_PATH;
536     }
537
538   /* Search directory path for the file.  */
539   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
540   for (; path; path = path->next)
541     {
542       memcpy (name, path->name, path->len);
543       name[path->len] = '/';
544       strcpy (&name[path->len + 1], fname);
545       if (CPP_OPTION (pfile, remap))
546         n = remap_filename (pfile, name, path);
547       else
548         n = name;
549
550       file = open_file (pfile, n);
551       if (file)
552         {
553           file->foundhere = path;
554           return file;
555         }
556     }
557
558   return 0;
559 }
560
561 /* Not everyone who wants to set system-header-ness on a buffer can
562    see the details of a buffer.  This is an exported interface because
563    fix-header needs it.  */
564 void
565 cpp_make_system_header (pfile, syshdr, externc)
566      cpp_reader *pfile;
567      int syshdr, externc;
568 {
569   int flags = 0;
570
571   /* 1 = system header, 2 = system header to be treated as C.  */
572   if (syshdr)
573     flags = 1 + (externc != 0);
574   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
575                        SOURCE_LINE (pfile->map, pfile->line), flags);
576 }
577
578 /* Report on all files that might benefit from a multiple include guard.
579    Triggered by -H.  */
580 void
581 _cpp_report_missing_guards (pfile)
582      cpp_reader *pfile;
583 {
584   int banner = 0;
585   splay_tree_foreach (pfile->all_include_files, report_missing_guard,
586                       (PTR) &banner);
587 }
588
589 static int
590 report_missing_guard (n, b)
591      splay_tree_node n;
592      void *b;
593 {
594   struct include_file *f = (struct include_file *) n->value;
595   int *bannerp = (int *)b;
596
597   if (f && f->cmacro == 0 && f->include_count == 1)
598     {
599       if (*bannerp == 0)
600         {
601           fputs (_("Multiple include guards may be useful for:\n"), stderr);
602           *bannerp = 1;
603         }
604       fputs (f->name, stderr);
605       putc ('\n', stderr);
606     }
607   return 0;
608 }
609
610 /* Create a dependency, or issue an error message as appropriate.   */
611 static void
612 handle_missing_header (pfile, fname, angle_brackets)
613      cpp_reader *pfile;
614      const char *fname;
615      int angle_brackets;
616 {
617   /* We will try making the RHS pfile->buffer->sysp after 3.0.  */
618   int print_dep = CPP_PRINT_DEPS(pfile) > (angle_brackets
619                                            || pfile->system_include_depth);
620
621   if (CPP_OPTION (pfile, print_deps_missing_files) && print_dep)
622     {
623       if (!angle_brackets || IS_ABSOLUTE_PATHNAME (fname))
624         deps_add_dep (pfile->deps, fname);
625       else
626         {
627           /* If requested as a system header, assume it belongs in
628              the first system header directory.  */
629           struct search_path *ptr = CPP_OPTION (pfile, bracket_include);
630           char *p;
631           int len = 0, fname_len = strlen (fname);
632
633           if (ptr)
634             len = ptr->len;
635
636           p = (char *) alloca (len + fname_len + 2);
637           if (len)
638             {
639               memcpy (p, ptr->name, len);
640               p[len++] = '/';
641             }
642           memcpy (p + len, fname, fname_len + 1);
643           deps_add_dep (pfile->deps, p);
644         }
645     }
646   /* If -M was specified, then don't count this as an error, because
647      we can still produce correct output.  Otherwise, we can't produce
648      correct output, because there may be dependencies we need inside
649      the missing file, and we don't know what directory this missing
650      file exists in.  FIXME: Use a future cpp_diagnotic_with_errno ()
651      for both of these cases.  */
652   else if (CPP_PRINT_DEPS (pfile) && ! print_dep)
653     cpp_warning (pfile, "%s: %s", fname, xstrerror (errno));
654   else
655     cpp_error_from_errno (pfile, fname);
656 }
657
658 /* Handles #include-family directives, and the command line -imacros
659    and -include.  Returns true if a buffer was stacked.  */
660 bool
661 _cpp_execute_include (pfile, header, type)
662      cpp_reader *pfile;
663      const cpp_token *header;
664      enum include_type type;
665 {
666   bool stacked = false;
667   struct include_file *inc = find_include_file (pfile, header, type);
668
669   if (inc == 0)
670     handle_missing_header (pfile, (const char *) header->val.str.text,
671                            header->type == CPP_HEADER_NAME);
672   else if (inc != NO_INCLUDE_PATH)
673     {
674       if (header->type == CPP_HEADER_NAME)
675         pfile->system_include_depth++;
676
677       stacked = stack_include_file (pfile, inc);
678
679       if (type == IT_IMPORT)
680         _cpp_never_reread (inc);
681     }
682
683   return stacked;
684 }
685
686 /* Locate HEADER, and determine whether it is newer than the current
687    file.  If it cannot be located or dated, return -1, if it is newer
688    newer, return 1, otherwise 0.  */
689 int
690 _cpp_compare_file_date (pfile, header)
691      cpp_reader *pfile;
692      const cpp_token *header;
693 {
694   struct include_file *inc = find_include_file (pfile, header, 0);
695   
696   if (inc == NULL || inc == NO_INCLUDE_PATH)
697     return -1;
698
699   if (inc->fd > 0)
700     {
701       close (inc->fd);
702       inc->fd = -1;
703     }
704     
705   return inc->st.st_mtime > pfile->buffer->inc->st.st_mtime;
706 }
707
708
709 /* Push an input buffer and load it up with the contents of FNAME.  If
710    FNAME is "", read standard input.  Return true if a buffer was
711    stacked.  */
712 bool
713 _cpp_read_file (pfile, fname)
714      cpp_reader *pfile;
715      const char *fname;
716 {
717   struct include_file *f = open_file (pfile, fname);
718   bool stacked = false;
719
720   if (f == NULL)
721     cpp_error_from_errno (pfile, fname);
722   else
723     stacked = stack_include_file (pfile, f);
724
725   return stacked;
726 }
727
728 /* Do appropriate cleanup when a file buffer is popped off the input
729    stack.  */
730 void
731 _cpp_pop_file_buffer (pfile, buf)
732      cpp_reader *pfile;
733      cpp_buffer *buf;
734 {
735   struct include_file *inc = buf->inc;
736
737   if (pfile->system_include_depth)
738     pfile->system_include_depth--;
739   if (pfile->include_depth)
740     pfile->include_depth--;
741
742   /* Record the inclusion-preventing macro, which could be NULL
743      meaning no controlling macro.  */
744   if (pfile->mi_valid && inc->cmacro == NULL)
745     inc->cmacro = pfile->mi_cmacro;
746
747   /* Invalidate control macros in the #including file.  */
748   pfile->mi_valid = false;
749
750   inc->refcnt--;
751   if (inc->refcnt == 0 && DO_NOT_REREAD (inc))
752     purge_cache (inc);
753 }
754
755 /* Returns the first place in the include chain to start searching for
756    "" includes.  This involves stripping away the basename of the
757    current file, unless -I- was specified.
758
759    If we're handling -include or -imacros, use the "" chain, but with
760    the preprocessor's cwd prepended.  */
761 static struct search_path *
762 search_from (pfile, type)
763      cpp_reader *pfile;
764      enum include_type type;
765 {
766   cpp_buffer *buffer = pfile->buffer;
767   unsigned int dlen;
768
769   /* Command line uses the cwd, and does not cache the result.  */
770   if (type == IT_CMDLINE)
771     goto use_cwd;
772
773   /* Ignore the current file's directory if -I- was given.  */
774   if (CPP_OPTION (pfile, ignore_srcdir))
775     return CPP_OPTION (pfile, quote_include);
776
777   if (! buffer->search_cached)
778     {
779       buffer->search_cached = 1;
780
781       dlen = lbasename (buffer->inc->name) - buffer->inc->name;
782
783       if (dlen)
784         {
785           /* We don't guarantee NAME is null-terminated.  This saves
786              allocating and freeing memory, and duplicating it when faking
787              buffers in cpp_push_buffer.  Drop a trailing '/'.  */
788           buffer->dir.name = buffer->inc->name;
789           if (dlen > 1)
790             dlen--;
791         }
792       else
793         {
794         use_cwd:
795           buffer->dir.name = ".";
796           dlen = 1;
797         }
798
799       if (dlen > pfile->max_include_len)
800         pfile->max_include_len = dlen;
801
802       buffer->dir.len = dlen;
803       buffer->dir.next = CPP_OPTION (pfile, quote_include);
804       buffer->dir.sysp = pfile->map->sysp;
805     }
806
807   return &buffer->dir;
808 }
809
810 /* The file_name_map structure holds a mapping of file names for a
811    particular directory.  This mapping is read from the file named
812    FILE_NAME_MAP_FILE in that directory.  Such a file can be used to
813    map filenames on a file system with severe filename restrictions,
814    such as DOS.  The format of the file name map file is just a series
815    of lines with two tokens on each line.  The first token is the name
816    to map, and the second token is the actual name to use.  */
817
818 struct file_name_map
819 {
820   struct file_name_map *map_next;
821   char *map_from;
822   char *map_to;
823 };
824
825 #define FILE_NAME_MAP_FILE "header.gcc"
826
827 /* Read a space delimited string of unlimited length from a stdio
828    file.  */
829
830 static char *
831 read_filename_string (ch, f)
832      int ch;
833      FILE *f;
834 {
835   char *alloc, *set;
836   int len;
837
838   len = 20;
839   set = alloc = xmalloc (len + 1);
840   if (! is_space(ch))
841     {
842       *set++ = ch;
843       while ((ch = getc (f)) != EOF && ! is_space(ch))
844         {
845           if (set - alloc == len)
846             {
847               len *= 2;
848               alloc = xrealloc (alloc, len + 1);
849               set = alloc + len / 2;
850             }
851           *set++ = ch;
852         }
853     }
854   *set = '\0';
855   ungetc (ch, f);
856   return alloc;
857 }
858
859 /* This structure holds a linked list of file name maps, one per directory.  */
860
861 struct file_name_map_list
862 {
863   struct file_name_map_list *map_list_next;
864   char *map_list_name;
865   struct file_name_map *map_list_map;
866 };
867
868 /* Read the file name map file for DIRNAME.  */
869
870 static struct file_name_map *
871 read_name_map (pfile, dirname)
872      cpp_reader *pfile;
873      const char *dirname;
874 {
875   register struct file_name_map_list *map_list_ptr;
876   char *name;
877   FILE *f;
878
879   /* Check the cache of directories, and mappings in their remap file.  */
880   for (map_list_ptr = CPP_OPTION (pfile, map_list); map_list_ptr;
881        map_list_ptr = map_list_ptr->map_list_next)
882     if (! strcmp (map_list_ptr->map_list_name, dirname))
883       return map_list_ptr->map_list_map;
884
885   map_list_ptr = ((struct file_name_map_list *)
886                   xmalloc (sizeof (struct file_name_map_list)));
887   map_list_ptr->map_list_name = xstrdup (dirname);
888
889   /* The end of the list ends in NULL.  */
890   map_list_ptr->map_list_map = NULL;
891
892   name = (char *) alloca (strlen (dirname) + strlen (FILE_NAME_MAP_FILE) + 2);
893   strcpy (name, dirname);
894   if (*dirname)
895     strcat (name, "/");
896   strcat (name, FILE_NAME_MAP_FILE);
897   f = fopen (name, "r");
898
899   /* Silently return NULL if we cannot open.  */
900   if (f)
901     {
902       int ch;
903       int dirlen = strlen (dirname);
904
905       while ((ch = getc (f)) != EOF)
906         {
907           char *from, *to;
908           struct file_name_map *ptr;
909
910           if (is_space(ch))
911             continue;
912           from = read_filename_string (ch, f);
913           while ((ch = getc (f)) != EOF && is_hspace(ch))
914             ;
915           to = read_filename_string (ch, f);
916
917           ptr = ((struct file_name_map *)
918                  xmalloc (sizeof (struct file_name_map)));
919           ptr->map_from = from;
920
921           /* Make the real filename absolute.  */
922           if (IS_ABSOLUTE_PATHNAME (to))
923             ptr->map_to = to;
924           else
925             {
926               ptr->map_to = xmalloc (dirlen + strlen (to) + 2);
927               strcpy (ptr->map_to, dirname);
928               ptr->map_to[dirlen] = '/';
929               strcpy (ptr->map_to + dirlen + 1, to);
930               free (to);
931             }         
932
933           ptr->map_next = map_list_ptr->map_list_map;
934           map_list_ptr->map_list_map = ptr;
935
936           while ((ch = getc (f)) != '\n')
937             if (ch == EOF)
938               break;
939         }
940       fclose (f);
941     }
942   
943   /* Add this information to the cache.  */
944   map_list_ptr->map_list_next = CPP_OPTION (pfile, map_list);
945   CPP_OPTION (pfile, map_list) = map_list_ptr;
946
947   return map_list_ptr->map_list_map;
948 }  
949
950 /* Remap an unsimplified path NAME based on the file_name_map (if any)
951    for LOC.  */
952 static char *
953 remap_filename (pfile, name, loc)
954      cpp_reader *pfile;
955      char *name;
956      struct search_path *loc;
957 {
958   struct file_name_map *map;
959   const char *from, *p;
960   char *dir;
961
962   if (! loc->name_map)
963     {
964       /* Get a null-terminated path.  */
965       char *dname = alloca (loc->len + 1);
966       memcpy (dname, loc->name, loc->len);
967       dname[loc->len] = '\0';
968
969       loc->name_map = read_name_map (pfile, dname);
970       if (! loc->name_map)
971         return name;
972     }
973   
974   /* This works since NAME has not been simplified yet.  */
975   from = name + loc->len + 1;
976   
977   for (map = loc->name_map; map; map = map->map_next)
978     if (!strcmp (map->map_from, from))
979       return map->map_to;
980
981   /* Try to find a mapping file for the particular directory we are
982      looking in.  Thus #include <sys/types.h> will look up sys/types.h
983      in /usr/include/header.gcc and look up types.h in
984      /usr/include/sys/header.gcc.  */
985   p = strrchr (name, '/');
986   if (!p)
987     return name;
988
989   /* We know p != name as absolute paths don't call remap_filename.  */
990   if (p == name)
991     cpp_ice (pfile, "absolute file name in remap_filename");
992
993   dir = (char *) alloca (p - name + 1);
994   memcpy (dir, name, p - name);
995   dir[p - name] = '\0';
996   from = p + 1;
997   
998   for (map = read_name_map (pfile, dir); map; map = map->map_next)
999     if (! strcmp (map->map_from, from))
1000       return map->map_to;
1001
1002   return name;
1003 }
1004
1005 /* Returns true if it is safe to remove the final component of path,
1006    when it is followed by a ".." component.  We use lstat to avoid
1007    symlinks if we have it.  If not, we can still catch errors with
1008    stat ().  */
1009 static int
1010 remove_component_p (path)
1011      const char *path;
1012 {
1013   struct stat s;
1014   int result;
1015
1016 #ifdef HAVE_LSTAT
1017   result = lstat (path, &s);
1018 #else
1019   result = stat (path, &s);
1020 #endif
1021
1022   /* There's no guarantee that errno will be unchanged, even on
1023      success.  Cygwin's lstat(), for example, will often set errno to
1024      ENOSYS.  In case of success, reset errno to zero.  */
1025   if (result == 0)
1026     errno = 0;
1027
1028   return result == 0 && S_ISDIR (s.st_mode);
1029 }
1030
1031 /* Simplify a path name in place, deleting redundant components.  This
1032    reduces OS overhead and guarantees that equivalent paths compare
1033    the same (modulo symlinks).
1034
1035    Transforms made:
1036    foo/bar/../quux      foo/quux
1037    foo/./bar            foo/bar
1038    foo//bar             foo/bar
1039    /../quux             /quux
1040    //quux               //quux  (POSIX allows leading // as a namespace escape)
1041
1042    Guarantees no trailing slashes.  All transforms reduce the length
1043    of the string.  Returns PATH.  errno is 0 if no error occurred;
1044    nonzero if an error occurred when using stat () or lstat ().  */
1045
1046 char *
1047 _cpp_simplify_pathname (path)
1048     char *path;
1049 {
1050 #ifndef VMS
1051   char *from, *to;
1052   char *base, *orig_base;
1053   int absolute = 0;
1054
1055   errno = 0;
1056   /* Don't overflow the empty path by putting a '.' in it below.  */
1057   if (*path == '\0')
1058     return path;
1059
1060 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
1061   /* Convert all backslashes to slashes.  */
1062   for (from = path; *from; from++)
1063     if (*from == '\\') *from = '/';
1064     
1065   /* Skip over leading drive letter if present.  */
1066   if (ISALPHA (path[0]) && path[1] == ':')
1067     from = to = &path[2];
1068   else
1069     from = to = path;
1070 #else
1071   from = to = path;
1072 #endif
1073     
1074   /* Remove redundant leading /s.  */
1075   if (*from == '/')
1076     {
1077       absolute = 1;
1078       to++;
1079       from++;
1080       if (*from == '/')
1081         {
1082           if (*++from == '/')
1083             /* 3 or more initial /s are equivalent to 1 /.  */
1084             while (*++from == '/');
1085           else
1086             /* On some hosts // differs from /; Posix allows this.  */
1087             to++;
1088         }
1089     }
1090
1091   base = orig_base = to;
1092   for (;;)
1093     {
1094       int move_base = 0;
1095
1096       while (*from == '/')
1097         from++;
1098
1099       if (*from == '\0')
1100         break;
1101
1102       if (*from == '.')
1103         {
1104           if (from[1] == '\0')
1105             break;
1106           if (from[1] == '/')
1107             {
1108               from += 2;
1109               continue;
1110             }
1111           else if (from[1] == '.' && (from[2] == '/' || from[2] == '\0'))
1112             {
1113               /* Don't simplify if there was no previous component.  */
1114               if (absolute && orig_base == to)
1115                 {
1116                   from += 2;
1117                   continue;
1118                 }
1119               /* Don't simplify if the previous component was "../",
1120                  or if an error has already occurred with (l)stat.  */
1121               if (base != to && errno == 0)
1122                 {
1123                   /* We don't back up if it's a symlink.  */
1124                   *to = '\0';
1125                   if (remove_component_p (path))
1126                     {
1127                       while (to > base && *to != '/')
1128                         to--;
1129                       from += 2;
1130                       continue;
1131                     }
1132                 }
1133               move_base = 1;
1134             }
1135         }
1136
1137       /* Add the component separator.  */
1138       if (to > orig_base)
1139         *to++ = '/';
1140
1141       /* Copy this component until the trailing null or '/'.  */
1142       while (*from != '\0' && *from != '/')
1143         *to++ = *from++;
1144
1145       if (move_base)
1146         base = to;
1147     }
1148     
1149   /* Change the empty string to "." so that it is not treated as stdin.
1150      Null terminate.  */
1151   if (to == path)
1152     *to++ = '.';
1153   *to = '\0';
1154
1155   return path;
1156 #else /* VMS  */
1157   errno = 0;
1158   return path;
1159 #endif /* !VMS  */
1160 }