OSDN Git Service

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