OSDN Git Service

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