OSDN Git Service

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