OSDN Git Service

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