OSDN Git Service

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