OSDN Git Service

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