OSDN Git Service

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