OSDN Git Service

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