OSDN Git Service

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