OSDN Git Service

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