OSDN Git Service

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