OSDN Git Service

* cppfiles.c (STAT_SIZE_TOO_BIG): Define.
[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 /* Variable length record files on VMS will have a stat size that includes
77    record control characters that won't be included in the read size. */
78 #ifdef VMS
79 # define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
80 # define STAT_SIZE_TOO_BIG(ST) ((ST).st_fab_rfm == FAB_C_VAR)
81 #else
82 # define STAT_SIZE_TOO_BIG(ST) 0
83 #endif
84
85 /* The cmacro works like this: If it's NULL, the file is to be
86    included again.  If it's NEVER_REREAD, the file is never to be
87    included again.  Otherwise it is a macro hashnode, and the file is
88    to be included again if the macro is defined.  */
89 #define NEVER_REREAD ((const cpp_hashnode *)-1)
90 #define DO_NOT_REREAD(inc) \
91 ((inc)->cmacro && ((inc)->cmacro == NEVER_REREAD \
92                    || (inc)->cmacro->type == NT_MACRO))
93 #define NO_INCLUDE_PATH ((struct include_file *) -1)
94
95 static struct file_name_map *read_name_map
96                                 PARAMS ((cpp_reader *, const char *));
97 static char *read_filename_string PARAMS ((int, FILE *));
98 static char *remap_filename     PARAMS ((cpp_reader *, char *,
99                                          struct search_path *));
100 static struct search_path *search_from PARAMS ((cpp_reader *,
101                                                 enum include_type));
102 static struct include_file *
103         find_include_file PARAMS ((cpp_reader *, const cpp_token *,
104                                    enum include_type));
105 static struct include_file *open_file PARAMS ((cpp_reader *, const char *));
106 static int read_include_file    PARAMS ((cpp_reader *, struct include_file *));
107 static bool stack_include_file  PARAMS ((cpp_reader *, struct include_file *));
108 static void purge_cache         PARAMS ((struct include_file *));
109 static void destroy_node        PARAMS ((splay_tree_value));
110 static int report_missing_guard         PARAMS ((splay_tree_node, void *));
111 static splay_tree_node find_or_create_entry PARAMS ((cpp_reader *,
112                                                      const char *));
113 static void handle_missing_header PARAMS ((cpp_reader *, const char *, int));
114 static int remove_component_p   PARAMS ((const char *));
115
116 /* Set up the splay tree we use to store information about all the
117    file names seen in this compilation.  We also have entries for each
118    file we tried to open but failed; this saves system calls since we
119    don't try to open it again in future.
120
121    The key of each node is the file name, after processing by
122    _cpp_simplify_pathname.  The path name may or may not be absolute.
123    The path string has been malloced, as is automatically freed by
124    registering free () as the splay tree key deletion function.
125
126    A node's value is a pointer to a struct include_file, and is never
127    NULL.  */
128 void
129 _cpp_init_includes (pfile)
130      cpp_reader *pfile;
131 {
132   pfile->all_include_files
133     = splay_tree_new ((splay_tree_compare_fn) strcmp,
134                       (splay_tree_delete_key_fn) free,
135                       destroy_node);
136 }
137
138 /* Tear down the splay tree.  */
139 void
140 _cpp_cleanup_includes (pfile)
141      cpp_reader *pfile;
142 {
143   splay_tree_delete (pfile->all_include_files);
144 }
145
146 /* Free a node.  The path string is automatically freed.  */
147 static void
148 destroy_node (v)
149      splay_tree_value v;
150 {
151   struct include_file *f = (struct include_file *)v;
152
153   if (f)
154     {
155       purge_cache (f);
156       free (f);
157     }
158 }
159
160 /* Mark a file to not be reread (e.g. #import, read failure).  */
161 void
162 _cpp_never_reread (file)
163      struct include_file *file;
164 {
165   file->cmacro = NEVER_REREAD;
166 }
167
168 /* Lookup a filename, which is simplified after making a copy, and
169    create an entry if none exists.  errno is nonzero iff a (reported)
170    stat() error occurred during simplification.  */
171 static splay_tree_node
172 find_or_create_entry (pfile, fname)
173      cpp_reader *pfile;
174      const char *fname;
175 {
176   splay_tree_node node;
177   struct include_file *file;
178   char *name = xstrdup (fname);
179
180   _cpp_simplify_pathname (name);
181   node = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) name);
182   if (node)
183     free (name);
184   else
185     {
186       file = xcnew (struct include_file);
187       file->name = name;
188       file->err_no = errno;
189       node = splay_tree_insert (pfile->all_include_files,
190                                 (splay_tree_key) file->name,
191                                 (splay_tree_value) file);
192     }
193
194   return node;
195 }
196
197 /* Enter a file name in the splay tree, for the sake of cpp_included.  */
198 void
199 _cpp_fake_include (pfile, fname)
200      cpp_reader *pfile;
201      const char *fname;
202 {
203   find_or_create_entry (pfile, fname);
204 }
205
206 /* Given a file name, look it up in the cache; if there is no entry,
207    create one with a non-NULL value (regardless of success in opening
208    the file).  If the file doesn't exist or is inaccessible, this
209    entry is flagged so we don't attempt to open it again in the
210    future.  If the file isn't open, open it.  The empty string is
211    interpreted as stdin.
212
213    Returns an include_file structure with an open file descriptor on
214    success, or NULL on failure.  */
215
216 static struct include_file *
217 open_file (pfile, filename)
218      cpp_reader *pfile;
219      const char *filename;
220 {
221   splay_tree_node nd = find_or_create_entry (pfile, filename);
222   struct include_file *file = (struct include_file *) nd->value;
223
224   if (file->err_no)
225     {
226       /* Ugh.  handle_missing_header () needs errno to be set.  */
227       errno = file->err_no;
228       return 0;
229     }
230
231   /* Don't reopen an idempotent file.  */
232   if (DO_NOT_REREAD (file))
233     return file;
234       
235   /* Don't reopen one which is already loaded.  */
236   if (file->buffer != NULL)
237     return file;
238
239   /* We used to open files in nonblocking mode, but that caused more
240      problems than it solved.  Do take care not to acquire a
241      controlling terminal by mistake (this can't happen on sane
242      systems, but paranoia is a virtue).
243
244      Use the three-argument form of open even though we aren't
245      specifying O_CREAT, to defend against broken system headers.
246
247      O_BINARY tells some runtime libraries (notably DJGPP) not to do
248      newline translation; we can handle DOS line breaks just fine
249      ourselves.
250
251      Special case: the empty string is translated to stdin.  */
252
253   if (filename[0] == '\0')
254     file->fd = 0;
255   else
256     file->fd = open (file->name, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
257
258   if (file->fd != -1 && fstat (file->fd, &file->st) == 0)
259     {
260       if (!S_ISDIR (file->st.st_mode))
261         return file;
262       /* If it's a directory, we return null and continue the search
263          as the file we're looking for may appear elsewhere in the
264          search path.  */
265       errno = ENOENT;
266     }
267
268   file->err_no = errno;
269   return 0;
270 }
271
272 /* Place the file referenced by INC into a new buffer on the buffer
273    stack, unless there are errors, or the file is not re-included
274    because of e.g. multiple-include guards.  Returns true if a buffer
275    is stacked.  */
276
277 static bool
278 stack_include_file (pfile, inc)
279      cpp_reader *pfile;
280      struct include_file *inc;
281 {
282   cpp_buffer *fp;
283   int sysp;
284   const char *filename;
285
286   if (DO_NOT_REREAD (inc))
287     return false;
288
289   sysp = MAX ((pfile->map ? pfile->map->sysp : 0),
290               (inc->foundhere ? inc->foundhere->sysp : 0));
291
292   /* For -M, add the file to the dependencies on its first inclusion.  */
293   if (CPP_OPTION (pfile, print_deps) > sysp && !inc->include_count)
294     deps_add_dep (pfile->deps, inc->name);
295
296   /* Not in cache?  */
297   if (! inc->buffer)
298     {
299       /* Mark a regular, zero-length file never-reread.  Zero-length
300          files are stacked the first time, so preprocessing a main
301          file of zero length does not raise an error.  */
302       if (S_ISREG (inc->st.st_mode) && inc->st.st_size == 0)
303         _cpp_never_reread (inc);
304       else if (read_include_file (pfile, inc))
305         {
306           /* If an error occurs, do not try to read this file again.  */
307           _cpp_never_reread (inc);
308           return false;
309         }
310       close (inc->fd);
311       inc->fd = -1;
312     }
313
314   if (pfile->buffer)
315     /* We don't want MI guard advice for the main file.  */
316     inc->include_count++;
317
318   /* Push a buffer.  */
319   fp = cpp_push_buffer (pfile, inc->buffer, inc->st.st_size,
320                         /* from_stage3 */ CPP_OPTION (pfile, preprocessed), 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
328   /* Generate the call back.  */
329   filename = inc->name;
330   if (*filename == '\0')
331     filename = _("<stdin>");
332   _cpp_do_file_change (pfile, LC_ENTER, filename, 1, sysp);
333
334   return true;
335 }
336
337 /* Read the file referenced by INC into the file cache.
338
339    If fd points to a plain file, we might be able to mmap it; we can
340    definitely allocate the buffer all at once.  If fd is a pipe or
341    terminal, we can't do either.  If fd is something weird, like a
342    block device, we don't want to read it at all.
343
344    Unfortunately, different systems use different st.st_mode values
345    for pipes: some have S_ISFIFO, some S_ISSOCK, some are buggy and
346    zero the entire struct stat except a couple fields.  Hence we don't
347    even try to figure out what something is, except for plain files
348    and block devices.
349
350    FIXME: Flush file cache and try again if we run out of memory.  */
351
352 static int
353 read_include_file (pfile, inc)
354      cpp_reader *pfile;
355      struct include_file *inc;
356 {
357   ssize_t size, offset, count;
358   U_CHAR *buf;
359 #if MMAP_THRESHOLD
360   static int pagesize = -1;
361 #endif
362
363   if (S_ISREG (inc->st.st_mode))
364     {
365       /* off_t might have a wider range than ssize_t - in other words,
366          the max size of a file might be bigger than the address
367          space.  We can't handle a file that large.  (Anyone with
368          a single source file bigger than 2GB needs to rethink
369          their coding style.)  Some systems (e.g. AIX 4.1) define
370          SSIZE_MAX to be much smaller than the actual range of the
371          type.  Use INTTYPE_MAXIMUM unconditionally to ensure this
372          does not bite us.  */
373       if (inc->st.st_size > INTTYPE_MAXIMUM (ssize_t))
374         {
375           cpp_error (pfile, "%s is too large", inc->name);
376           goto fail;
377         }
378       size = inc->st.st_size;
379
380       inc->mapped = 0;
381 #if MMAP_THRESHOLD
382       if (pagesize == -1)
383         pagesize = getpagesize ();
384
385       if (size / pagesize >= MMAP_THRESHOLD)
386         {
387           buf = (U_CHAR *) mmap (0, size, PROT_READ, MAP_PRIVATE, inc->fd, 0);
388           if (buf == (U_CHAR *)-1)
389             goto perror_fail;
390           inc->mapped = 1;
391         }
392       else
393 #endif
394         {
395           buf = (U_CHAR *) xmalloc (size);
396           offset = 0;
397           while (offset < size)
398             {
399               count = read (inc->fd, buf + offset, size - offset);
400               if (count < 0)
401                 goto perror_fail;
402               if (count == 0)
403                 {
404                   if (!STAT_SIZE_TOO_BIG (inc->st))
405                     cpp_warning
406                       (pfile, "%s is shorter than expected", inc->name);
407                   buf = xrealloc (buf, offset);
408                   inc->st.st_size = offset;
409                   break;
410                 }
411               offset += count;
412             }
413         }
414     }
415   else if (S_ISBLK (inc->st.st_mode))
416     {
417       cpp_error (pfile, "%s is a block device", inc->name);
418       goto fail;
419     }
420   else
421     {
422       /* 8 kilobytes is a sensible starting size.  It ought to be
423          bigger than the kernel pipe buffer, and it's definitely
424          bigger than the majority of C source files.  */
425       size = 8 * 1024;
426
427       buf = (U_CHAR *) xmalloc (size);
428       offset = 0;
429       while ((count = read (inc->fd, buf + offset, size - offset)) > 0)
430         {
431           offset += count;
432           if (offset == size)
433             buf = xrealloc (buf, (size *= 2));
434         }
435       if (count < 0)
436         goto perror_fail;
437
438       if (offset < size)
439         buf = xrealloc (buf, offset);
440       inc->st.st_size = offset;
441     }
442
443   inc->buffer = buf;
444   return 0;
445
446  perror_fail:
447   cpp_error_from_errno (pfile, inc->name);
448  fail:
449   return 1;
450 }
451
452 static void
453 purge_cache (inc)
454      struct include_file *inc;
455 {
456   if (inc->buffer)
457     {
458 #if MMAP_THRESHOLD
459       if (inc->mapped)
460         munmap ((PTR) inc->buffer, inc->st.st_size);
461       else
462 #endif
463         free ((PTR) inc->buffer);
464       inc->buffer = NULL;
465     }
466 }
467
468 /* Return 1 if the file named by FNAME has been included before in
469    any context, 0 otherwise.  */
470 int
471 cpp_included (pfile, fname)
472      cpp_reader *pfile;
473      const char *fname;
474 {
475   struct search_path *path;
476   char *name, *n;
477   splay_tree_node nd;
478
479   if (IS_ABSOLUTE_PATHNAME (fname))
480     {
481       /* Just look it up.  */
482       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) fname);
483       return (nd && nd->value);
484     }
485       
486   /* Search directory path for the file.  */
487   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
488   for (path = CPP_OPTION (pfile, quote_include); path; path = path->next)
489     {
490       memcpy (name, path->name, path->len);
491       name[path->len] = '/';
492       strcpy (&name[path->len + 1], fname);
493       if (CPP_OPTION (pfile, remap))
494         n = remap_filename (pfile, name, path);
495       else
496         n = name;
497
498       nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) n);
499       if (nd && nd->value)
500         return 1;
501     }
502   return 0;
503 }
504
505 /* Search for HEADER.  Return 0 if there is no such file (or it's
506    un-openable), in which case an error code will be in errno.  If
507    there is no include path to use it returns NO_INCLUDE_PATH,
508    otherwise an include_file structure.  If this request originates
509    from a #include_next directive, set INCLUDE_NEXT to true.  */
510
511 static struct include_file *
512 find_include_file (pfile, header, type)
513      cpp_reader *pfile;
514      const cpp_token *header;
515      enum include_type type;
516 {
517   const char *fname = (const char *) header->val.str.text;
518   struct search_path *path;
519   struct include_file *file;
520   char *name, *n;
521
522   if (IS_ABSOLUTE_PATHNAME (fname))
523     return open_file (pfile, fname);
524
525   /* For #include_next, skip in the search path past the dir in which
526      the current file was found, but if it was found via an absolute
527      path use the normal search logic.  */
528   if (type == IT_INCLUDE_NEXT && pfile->buffer->inc->foundhere)
529     path = pfile->buffer->inc->foundhere->next;
530   else if (header->type == CPP_HEADER_NAME)
531     path = CPP_OPTION (pfile, bracket_include);
532   else
533     path = search_from (pfile, type);
534
535   if (path == NULL)
536     {
537       cpp_error (pfile, "No include path in which to find %s", fname);
538       return NO_INCLUDE_PATH;
539     }
540
541   /* Search directory path for the file.  */
542   name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2);
543   for (; path; path = path->next)
544     {
545       memcpy (name, path->name, path->len);
546       name[path->len] = '/';
547       strcpy (&name[path->len + 1], fname);
548       if (CPP_OPTION (pfile, remap))
549         n = remap_filename (pfile, name, path);
550       else
551         n = name;
552
553       file = open_file (pfile, n);
554       if (file)
555         {
556           file->foundhere = path;
557           return file;
558         }
559     }
560
561   return 0;
562 }
563
564 /* Not everyone who wants to set system-header-ness on a buffer can
565    see the details of a buffer.  This is an exported interface because
566    fix-header needs it.  */
567 void
568 cpp_make_system_header (pfile, syshdr, externc)
569      cpp_reader *pfile;
570      int syshdr, externc;
571 {
572   int flags = 0;
573
574   /* 1 = system header, 2 = system header to be treated as C.  */
575   if (syshdr)
576     flags = 1 + (externc != 0);
577   _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file,
578                        SOURCE_LINE (pfile->map, pfile->line), flags);
579 }
580
581 /* Report on all files that might benefit from a multiple include guard.
582    Triggered by -H.  */
583 void
584 _cpp_report_missing_guards (pfile)
585      cpp_reader *pfile;
586 {
587   int banner = 0;
588   splay_tree_foreach (pfile->all_include_files, report_missing_guard,
589                       (PTR) &banner);
590 }
591
592 static int
593 report_missing_guard (n, b)
594      splay_tree_node n;
595      void *b;
596 {
597   struct include_file *f = (struct include_file *) n->value;
598   int *bannerp = (int *)b;
599
600   if (f && f->cmacro == 0 && f->include_count == 1)
601     {
602       if (*bannerp == 0)
603         {
604           fputs (_("Multiple include guards may be useful for:\n"), stderr);
605           *bannerp = 1;
606         }
607       fputs (f->name, stderr);
608       putc ('\n', stderr);
609     }
610   return 0;
611 }
612
613 /* Create a dependency, or issue an error message as appropriate.  */
614 static void
615 handle_missing_header (pfile, fname, angle_brackets)
616      cpp_reader *pfile;
617      const char *fname;
618      int angle_brackets;
619 {
620   int print_dep = CPP_PRINT_DEPS(pfile) > (angle_brackets || pfile->map->sysp);
621
622   if (CPP_OPTION (pfile, print_deps_missing_files) && print_dep)
623     {
624       if (!angle_brackets || IS_ABSOLUTE_PATHNAME (fname))
625         deps_add_dep (pfile->deps, fname);
626       else
627         {
628           /* If requested as a system header, assume it belongs in
629              the first system header directory.  */
630           struct search_path *ptr = CPP_OPTION (pfile, bracket_include);
631           char *p;
632           int len = 0, fname_len = strlen (fname);
633
634           if (ptr)
635             len = ptr->len;
636
637           p = (char *) alloca (len + fname_len + 2);
638           if (len)
639             {
640               memcpy (p, ptr->name, len);
641               p[len++] = '/';
642             }
643           memcpy (p + len, fname, fname_len + 1);
644           deps_add_dep (pfile->deps, p);
645         }
646     }
647   /* If -M was specified, then don't count this as an error, because
648      we can still produce correct output.  Otherwise, we can't produce
649      correct output, because there may be dependencies we need inside
650      the missing file, and we don't know what directory this missing
651      file exists in.  FIXME: Use a future cpp_diagnotic_with_errno ()
652      for both of these cases.  */
653   else if (CPP_PRINT_DEPS (pfile) && ! print_dep)
654     cpp_warning (pfile, "%s: %s", fname, xstrerror (errno));
655   else
656     cpp_error_from_errno (pfile, fname);
657 }
658
659 /* Handles #include-family directives, and the command line -imacros
660    and -include.  Returns true if a buffer was stacked.  */
661 bool
662 _cpp_execute_include (pfile, header, type)
663      cpp_reader *pfile;
664      const cpp_token *header;
665      enum include_type type;
666 {
667   bool stacked = false;
668   struct include_file *inc = find_include_file (pfile, header, type);
669
670   if (inc == 0)
671     handle_missing_header (pfile, (const char *) header->val.str.text,
672                            header->type == CPP_HEADER_NAME);
673   else if (inc != NO_INCLUDE_PATH)
674     {
675       stacked = stack_include_file (pfile, inc);
676
677       if (type == IT_IMPORT)
678         _cpp_never_reread (inc);
679     }
680
681   return stacked;
682 }
683
684 /* Locate HEADER, and determine whether it is newer than the current
685    file.  If it cannot be located or dated, return -1, if it is newer
686    newer, return 1, otherwise 0.  */
687 int
688 _cpp_compare_file_date (pfile, header)
689      cpp_reader *pfile;
690      const cpp_token *header;
691 {
692   struct include_file *inc = find_include_file (pfile, header, 0);
693   
694   if (inc == NULL || inc == NO_INCLUDE_PATH)
695     return -1;
696
697   if (inc->fd > 0)
698     {
699       close (inc->fd);
700       inc->fd = -1;
701     }
702     
703   return inc->st.st_mtime > pfile->buffer->inc->st.st_mtime;
704 }
705
706
707 /* Push an input buffer and load it up with the contents of FNAME.  If
708    FNAME is "", read standard input.  Return true if a buffer was
709    stacked.  */
710 bool
711 _cpp_read_file (pfile, fname)
712      cpp_reader *pfile;
713      const char *fname;
714 {
715   struct include_file *f = open_file (pfile, fname);
716
717   if (f == NULL)
718     {
719       cpp_error_from_errno (pfile, fname);
720       return false;
721     }
722
723   return stack_include_file (pfile, f);
724 }
725
726 /* Do appropriate cleanup when a file buffer is popped off the input
727    stack.  Push the next -include file, if any remain.  */
728 void
729 _cpp_pop_file_buffer (pfile, inc)
730      cpp_reader *pfile;
731      struct include_file *inc;
732 {
733   /* Record the inclusion-preventing macro, which could be NULL
734      meaning no controlling macro.  */
735   if (pfile->mi_valid && inc->cmacro == NULL)
736     inc->cmacro = pfile->mi_cmacro;
737
738   /* Invalidate control macros in the #including file.  */
739   pfile->mi_valid = false;
740
741   inc->refcnt--;
742   if (inc->refcnt == 0 && DO_NOT_REREAD (inc))
743     purge_cache (inc);
744
745   /* Don't generate a callback for popping the main file.  */
746   if (pfile->buffer)
747     {
748       _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
749
750       /* Finally, push the next -included file, if any.  */
751       if (!pfile->buffer->prev)
752         _cpp_push_next_buffer (pfile);
753     }
754 }
755
756 /* Returns the first place in the include chain to start searching for
757    "" includes.  This involves stripping away the basename of the
758    current file, unless -I- was specified.
759
760    If we're handling -include or -imacros, use the "" chain, but with
761    the preprocessor's cwd prepended.  */
762 static struct search_path *
763 search_from (pfile, type)
764      cpp_reader *pfile;
765      enum include_type type;
766 {
767   cpp_buffer *buffer = pfile->buffer;
768   unsigned int dlen;
769
770   /* Command line uses the cwd, and does not cache the result.  */
771   if (type == IT_CMDLINE)
772     goto use_cwd;
773
774   /* Ignore the current file's directory if -I- was given.  */
775   if (CPP_OPTION (pfile, ignore_srcdir))
776     return CPP_OPTION (pfile, quote_include);
777
778   if (! buffer->search_cached)
779     {
780       buffer->search_cached = 1;
781
782       dlen = lbasename (buffer->inc->name) - buffer->inc->name;
783
784       if (dlen)
785         {
786           /* We don't guarantee NAME is null-terminated.  This saves
787              allocating and freeing memory.  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   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 }