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