OSDN Git Service

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