OSDN Git Service

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