2011-04-12 Diego Novillo <dnovillo@google.com>
[official-gcc.git] / libcpp / files.c
blob84b36bf049ee171a3668e3fe5f9c3ef0bf20f896
1 /* Part of CPP library. File handling.
2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5 Written by Per Bothner, 1994.
6 Based on CCCP program by Paul Rubin, June 1986
7 Adapted to ANSI C, Richard Stallman, Jan 1987
8 Split out of cpplib.c, Zack Weinberg, Oct 1998
9 Reimplemented, Neil Booth, Jul 2003
11 This program is free software; you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by the
13 Free Software Foundation; either version 3, or (at your option) any
14 later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; see the file COPYING3. If not see
23 <http://www.gnu.org/licenses/>. */
25 #include "config.h"
26 #include "system.h"
27 #include "cpplib.h"
28 #include "internal.h"
29 #include "mkdeps.h"
30 #include "obstack.h"
31 #include "hashtab.h"
32 #include "md5.h"
33 #include <dirent.h>
35 const cpp_offset cpp_buffer_start = {0, 0, 0};
36 const cpp_offset cpp_buffer_end = {-1, -1, -1};
38 /* Variable length record files on VMS will have a stat size that includes
39 record control characters that won't be included in the read size. */
40 #ifdef VMS
41 # define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */
42 # define STAT_SIZE_RELIABLE(ST) ((ST).st_fab_rfm != FAB_C_VAR)
43 #else
44 # define STAT_SIZE_RELIABLE(ST) true
45 #endif
47 #ifdef __DJGPP__
48 #include <io.h>
49 /* For DJGPP redirected input is opened in text mode. */
50 # define set_stdin_to_binary_mode() \
51 if (! isatty (0)) setmode (0, O_BINARY)
52 #else
53 # define set_stdin_to_binary_mode() /* Nothing */
54 #endif
56 /* This structure represents a file searched for by CPP, whether it
57 exists or not. An instance may be pointed to by more than one
58 file_hash_entry; at present no reference count is kept. */
59 struct _cpp_file
61 /* Filename as given to #include or command line switch. */
62 const char *name;
64 /* The full path used to find the file. */
65 const char *path;
67 /* The full path of the pch file. */
68 const char *pchname;
70 /* The file's path with the basename stripped. NULL if it hasn't
71 been calculated yet. */
72 const char *dir_name;
74 /* Chain through all files. */
75 struct _cpp_file *next_file;
77 /* The contents of NAME after calling read_file(). */
78 const uchar *buffer;
80 /* Pointer to the real start of BUFFER. read_file() might increment
81 BUFFER; when freeing, this this pointer must be used instead. */
82 const uchar *buffer_start;
84 /* The macro, if any, preventing re-inclusion. */
85 const cpp_hashnode *cmacro;
87 /* The directory in the search path where FILE was found. Used for
88 #include_next and determining whether a header is a system
89 header. */
90 cpp_dir *dir;
92 /* As filled in by stat(2) for the file. */
93 struct stat st;
95 /* File descriptor. Invalid if -1, otherwise open. */
96 int fd;
98 /* Zero if this file was successfully opened and stat()-ed,
99 otherwise errno obtained from failure. */
100 int err_no;
102 /* Number of times the file has been stacked for preprocessing. */
103 unsigned short stack_count;
105 /* If opened with #import or contains #pragma once. */
106 bool once_only;
108 /* If read() failed before. */
109 bool dont_read;
111 /* If this file is the main file. */
112 bool main_file;
114 /* If BUFFER above contains the true contents of the file. */
115 bool buffer_valid;
118 /* A singly-linked list for all searches for a given file name, with
119 its head pointed to by a slot in FILE_HASH. The file name is what
120 appeared between the quotes in a #include directive; it can be
121 determined implicitly from the hash table location or explicitly
122 from FILE->name.
124 FILE is a structure containing details about the file that was
125 found with that search, or details of how the search failed.
127 START_DIR is the starting location of the search in the include
128 chain. The current directories for "" includes are also hashed in
129 the hash table and therefore unique. Files that are looked up
130 without using a search path, such as absolute filenames and file
131 names from the command line share a special starting directory so
132 they don't cause cache hits with normal include-chain lookups.
134 If START_DIR is NULL then the entry is for a directory, not a file,
135 and the directory is in DIR. Since the starting point in a file
136 lookup chain is never NULL, this means that simple pointer
137 comparisons against START_DIR can be made to determine cache hits
138 in file lookups.
140 If a cache lookup fails because of e.g. an extra "./" in the path,
141 then nothing will break. It is just less efficient as CPP will
142 have to do more work re-preprocessing the file, and/or comparing
143 its contents against earlier once-only files.
145 struct file_hash_entry
147 struct file_hash_entry *next;
148 cpp_dir *start_dir;
149 source_location location;
150 union
152 _cpp_file *file;
153 cpp_dir *dir;
154 } u;
157 /* Number of entries to put in a file_hash_entry pool. */
158 #define FILE_HASH_POOL_SIZE 127
160 /* A file hash entry pool. We allocate file_hash_entry object from
161 one of these. */
162 struct file_hash_entry_pool
164 /* Number of entries used from this pool. */
165 unsigned int file_hash_entries_used;
166 /* Next pool in the chain; used when freeing. */
167 struct file_hash_entry_pool *next;
168 /* The memory pool. */
169 struct file_hash_entry pool[FILE_HASH_POOL_SIZE];
172 static bool open_file (_cpp_file *file);
173 static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
174 bool *invalid_pch);
175 static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
176 bool *invalid_pch);
177 static bool read_file_guts (cpp_reader *pfile, _cpp_file *file);
178 static bool read_file (cpp_reader *pfile, _cpp_file *file);
179 static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import);
180 static struct cpp_dir *search_path_head (cpp_reader *, const char *dname,
181 const char *fname, int angle_brackets,
182 enum include_type);
183 static const char *dir_name_of_file (_cpp_file *file);
184 static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int);
185 static struct file_hash_entry *search_cache (struct file_hash_entry *head,
186 const cpp_dir *start_dir);
187 static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
188 static void destroy_cpp_file (_cpp_file *);
189 static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
190 static void allocate_file_hash_entries (cpp_reader *pfile);
191 static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
192 static int report_missing_guard (void **slot, void *b);
193 static hashval_t file_hash_hash (const void *p);
194 static int file_hash_eq (const void *p, const void *q);
195 static char *read_filename_string (int ch, FILE *f);
196 static void read_name_map (cpp_dir *dir);
197 static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
198 static char *append_file_to_dir (const char *fname, cpp_dir *dir);
199 static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname);
200 static int pchf_save_compare (const void *e1, const void *e2);
201 static int pchf_compare (const void *d_p, const void *e_p);
202 static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
204 /* Given a filename in FILE->PATH, with the empty string interpreted
205 as <stdin>, open it.
207 On success FILE contains an open file descriptor and stat
208 information for the file. On failure the file descriptor is -1 and
209 the appropriate errno is also stored in FILE. Returns TRUE iff
210 successful.
212 We used to open files in nonblocking mode, but that caused more
213 problems than it solved. Do take care not to acquire a controlling
214 terminal by mistake (this can't happen on sane systems, but
215 paranoia is a virtue).
217 Use the three-argument form of open even though we aren't
218 specifying O_CREAT, to defend against broken system headers.
220 O_BINARY tells some runtime libraries (notably DJGPP) not to do
221 newline translation; we can handle DOS line breaks just fine
222 ourselves. */
223 static bool
224 open_file (_cpp_file *file)
226 if (file->path[0] == '\0')
228 file->fd = 0;
229 set_stdin_to_binary_mode ();
231 else
232 file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
234 if (file->fd != -1)
236 if (fstat (file->fd, &file->st) == 0)
238 if (!S_ISDIR (file->st.st_mode))
240 file->err_no = 0;
241 return true;
244 /* Ignore a directory and continue the search. The file we're
245 looking for may be elsewhere in the search path. */
246 errno = ENOENT;
249 close (file->fd);
250 file->fd = -1;
252 #if defined(_WIN32) && !defined(__CYGWIN__)
253 else if (errno == EACCES)
255 /* On most UNIX systems, open succeeds on a directory. Above,
256 we check if we have opened a directory and if so, set errno
257 to ENOENT. However, on Windows, opening a directory
258 fails with EACCES. We want to return ENOENT in that
259 case too. */
260 if (stat (file->path, &file->st) == 0
261 && S_ISDIR (file->st.st_mode))
262 errno = ENOENT;
263 else
264 /* The call to stat may have reset errno. */
265 errno = EACCES;
267 #endif
268 else if (errno == ENOTDIR)
269 errno = ENOENT;
271 file->err_no = errno;
273 return false;
276 /* Temporary PCH intercept of opening a file. Try to find a PCH file
277 based on FILE->name and FILE->dir, and test those found for
278 validity using PFILE->cb.valid_pch. Return true iff a valid file is
279 found. Set *INVALID_PCH if a PCH file is found but wasn't valid. */
281 static bool
282 pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
284 static const char extension[] = ".gch";
285 const char *path = file->path;
286 size_t len, flen;
287 char *pchname;
288 struct stat st;
289 bool valid = false;
291 /* No PCH on <stdin> or if not requested. */
292 if (file->name[0] == '\0' || !pfile->cb.valid_pch)
293 return false;
295 /* If the file is not included as first include from either the toplevel
296 file or the command-line it is not a valid use of PCH. */
297 if (pfile->all_files
298 && pfile->all_files->next_file)
299 return false;
301 flen = strlen (path);
302 len = flen + sizeof (extension);
303 pchname = XNEWVEC (char, len);
304 memcpy (pchname, path, flen);
305 memcpy (pchname + flen, extension, sizeof (extension));
307 if (stat (pchname, &st) == 0)
309 DIR *pchdir;
310 struct dirent *d;
311 size_t dlen, plen = len;
313 if (!S_ISDIR (st.st_mode))
314 valid = validate_pch (pfile, file, pchname);
315 else if ((pchdir = opendir (pchname)) != NULL)
317 pchname[plen - 1] = '/';
318 while ((d = readdir (pchdir)) != NULL)
320 dlen = strlen (d->d_name) + 1;
321 if ((strcmp (d->d_name, ".") == 0)
322 || (strcmp (d->d_name, "..") == 0))
323 continue;
324 if (dlen + plen > len)
326 len += dlen + 64;
327 pchname = XRESIZEVEC (char, pchname, len);
329 memcpy (pchname + plen, d->d_name, dlen);
330 valid = validate_pch (pfile, file, pchname);
331 if (valid)
332 break;
334 closedir (pchdir);
336 if (!valid)
337 *invalid_pch = true;
340 if (valid)
341 file->pchname = pchname;
342 else
343 free (pchname);
345 return valid;
348 /* Try to open the path FILE->name appended to FILE->dir. This is
349 where remap and PCH intercept the file lookup process. Return true
350 if the file was found, whether or not the open was successful.
351 Set *INVALID_PCH to true if a PCH file is found but wasn't valid. */
353 static bool
354 find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
356 char *path;
358 if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file)))
360 else
361 if (file->dir->construct)
362 path = file->dir->construct (file->name, file->dir);
363 else
364 path = append_file_to_dir (file->name, file->dir);
366 if (path)
368 hashval_t hv = htab_hash_string (path);
369 char *copy;
370 void **pp;
372 if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL)
374 file->err_no = ENOENT;
375 return false;
378 file->path = path;
379 if (pch_open_file (pfile, file, invalid_pch))
380 return true;
382 if (open_file (file))
383 return true;
385 if (file->err_no != ENOENT)
387 open_file_failed (pfile, file, 0);
388 return true;
391 /* We copy the path name onto an obstack partly so that we don't
392 leak the memory, but mostly so that we don't fragment the
393 heap. */
394 copy = (char *) obstack_copy0 (&pfile->nonexistent_file_ob, path,
395 strlen (path));
396 free (path);
397 pp = htab_find_slot_with_hash (pfile->nonexistent_file_hash,
398 copy, hv, INSERT);
399 *pp = copy;
401 file->path = file->name;
403 else
405 file->err_no = ENOENT;
406 file->path = NULL;
409 return false;
412 /* Return tue iff the missing_header callback found the given HEADER. */
413 static bool
414 search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file)
416 missing_header_cb func = pfile->cb.missing_header;
418 /* When the regular search path doesn't work, try context dependent
419 headers search paths. */
420 if (func
421 && file->dir == NULL)
423 if ((file->path = func (pfile, header, &file->dir)) != NULL)
425 if (open_file (file))
426 return true;
427 free ((void *)file->path);
429 file->path = file->name;
432 return false;
435 bool
436 _cpp_find_failed (_cpp_file *file)
438 return file->err_no != 0;
441 /* Given a filename FNAME search for such a file in the include path
442 starting from START_DIR. If FNAME is the empty string it is
443 interpreted as STDIN if START_DIR is PFILE->no_search_path.
445 If the file is not found in the file cache fall back to the O/S and
446 add the result to our cache.
448 If the file was not found in the filesystem, or there was an error
449 opening it, then ERR_NO is nonzero and FD is -1. If the file was
450 found, then ERR_NO is zero and FD could be -1 or an open file
451 descriptor. FD can be -1 if the file was found in the cache and
452 had previously been closed. To open it again pass the return value
453 to open_file().
455 _cpp_file *
456 _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake, int angle_brackets)
458 struct file_hash_entry *entry, **hash_slot;
459 _cpp_file *file;
460 bool invalid_pch = false;
461 bool saw_bracket_include = false;
462 bool saw_quote_include = false;
463 struct cpp_dir *found_in_cache = NULL;
465 /* Ensure we get no confusion between cached files and directories. */
466 if (start_dir == NULL)
467 cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
469 hash_slot = (struct file_hash_entry **)
470 htab_find_slot_with_hash (pfile->file_hash, fname,
471 htab_hash_string (fname),
472 INSERT);
474 /* First check the cache before we resort to memory allocation. */
475 entry = search_cache (*hash_slot, start_dir);
476 if (entry)
477 return entry->u.file;
479 file = make_cpp_file (pfile, start_dir, fname);
481 /* Try each path in the include chain. */
482 for (; !fake ;)
484 if (find_file_in_dir (pfile, file, &invalid_pch))
485 break;
487 file->dir = file->dir->next;
488 if (file->dir == NULL)
490 if (search_path_exhausted (pfile, fname, file))
492 /* Although this file must not go in the cache, because
493 the file found might depend on things (like the current file)
494 that aren't represented in the cache, it still has to go in
495 the list of all files so that #import works. */
496 file->next_file = pfile->all_files;
497 pfile->all_files = file;
498 return file;
501 if (invalid_pch)
503 cpp_error (pfile, CPP_DL_ERROR,
504 "one or more PCH files were found, but they were invalid");
505 if (!cpp_get_options (pfile)->warn_invalid_pch)
506 cpp_error (pfile, CPP_DL_ERROR,
507 "use -Winvalid-pch for more information");
509 open_file_failed (pfile, file, angle_brackets);
510 break;
513 /* Only check the cache for the starting location (done above)
514 and the quote and bracket chain heads because there are no
515 other possible starting points for searches. */
516 if (file->dir == pfile->bracket_include)
517 saw_bracket_include = true;
518 else if (file->dir == pfile->quote_include)
519 saw_quote_include = true;
520 else
521 continue;
523 entry = search_cache (*hash_slot, file->dir);
524 if (entry)
526 found_in_cache = file->dir;
527 break;
531 if (entry)
533 /* Cache for START_DIR too, sharing the _cpp_file structure. */
534 free ((char *) file->name);
535 free (file);
536 file = entry->u.file;
538 else
540 /* This is a new file; put it in the list. */
541 file->next_file = pfile->all_files;
542 pfile->all_files = file;
545 /* Store this new result in the hash table. */
546 entry = new_file_hash_entry (pfile);
547 entry->next = *hash_slot;
548 entry->start_dir = start_dir;
549 entry->location = pfile->line_table->highest_location;
550 entry->u.file = file;
551 *hash_slot = entry;
553 /* If we passed the quote or bracket chain heads, cache them also.
554 This speeds up processing if there are lots of -I options. */
555 if (saw_bracket_include
556 && pfile->bracket_include != start_dir
557 && found_in_cache != pfile->bracket_include)
559 entry = new_file_hash_entry (pfile);
560 entry->next = *hash_slot;
561 entry->start_dir = pfile->bracket_include;
562 entry->location = pfile->line_table->highest_location;
563 entry->u.file = file;
564 *hash_slot = entry;
566 if (saw_quote_include
567 && pfile->quote_include != start_dir
568 && found_in_cache != pfile->quote_include)
570 entry = new_file_hash_entry (pfile);
571 entry->next = *hash_slot;
572 entry->start_dir = pfile->quote_include;
573 entry->location = pfile->line_table->highest_location;
574 entry->u.file = file;
575 *hash_slot = entry;
578 return file;
581 /* Read a file into FILE->buffer, returning true on success.
583 If FILE->fd is something weird, like a block device, we don't want
584 to read it at all. Don't even try to figure out what something is,
585 except for plain files and block devices, since there is no
586 reliable portable way of doing this.
588 FIXME: Flush file cache and try again if we run out of memory. */
589 static bool
590 read_file_guts (cpp_reader *pfile, _cpp_file *file)
592 ssize_t size, total, count;
593 uchar *buf;
594 bool regular;
596 if (S_ISBLK (file->st.st_mode))
598 cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path);
599 return false;
602 regular = S_ISREG (file->st.st_mode);
603 if (regular)
605 /* off_t might have a wider range than ssize_t - in other words,
606 the max size of a file might be bigger than the address
607 space. We can't handle a file that large. (Anyone with
608 a single source file bigger than 2GB needs to rethink
609 their coding style.) Some systems (e.g. AIX 4.1) define
610 SSIZE_MAX to be much smaller than the actual range of the
611 type. Use INTTYPE_MAXIMUM unconditionally to ensure this
612 does not bite us. */
613 if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t))
615 cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path);
616 return false;
619 size = file->st.st_size;
621 else
622 /* 8 kilobytes is a sensible starting size. It ought to be bigger
623 than the kernel pipe buffer, and it's definitely bigger than
624 the majority of C source files. */
625 size = 8 * 1024;
627 buf = XNEWVEC (uchar, size + 1);
628 total = 0;
629 while ((count = read (file->fd, buf + total, size - total)) > 0)
631 total += count;
633 if (total == size)
635 if (regular)
636 break;
637 size *= 2;
638 buf = XRESIZEVEC (uchar, buf, size + 1);
642 if (count < 0)
644 cpp_errno (pfile, CPP_DL_ERROR, file->path);
645 return false;
648 if (regular && total != size && STAT_SIZE_RELIABLE (file->st))
649 cpp_error (pfile, CPP_DL_WARNING,
650 "%s is shorter than expected", file->path);
652 file->buffer = _cpp_convert_input (pfile,
653 CPP_OPTION (pfile, input_charset),
654 buf, size, total,
655 &file->buffer_start,
656 &file->st.st_size);
657 file->buffer_valid = true;
659 return true;
662 /* Convenience wrapper around read_file_guts that opens the file if
663 necessary and closes the file descriptor after reading. FILE must
664 have been passed through find_file() at some stage. */
665 static bool
666 read_file (cpp_reader *pfile, _cpp_file *file)
668 /* If we already have its contents in memory, succeed immediately. */
669 if (file->buffer_valid)
670 return true;
672 /* If an earlier read failed for some reason don't try again. */
673 if (file->dont_read || file->err_no)
674 return false;
676 if (file->fd == -1 && !open_file (file))
678 open_file_failed (pfile, file, 0);
679 return false;
682 file->dont_read = !read_file_guts (pfile, file);
683 close (file->fd);
684 file->fd = -1;
686 return !file->dont_read;
689 /* Returns TRUE if FILE's contents have been successfully placed in
690 FILE->buffer and the file should be stacked, otherwise false. */
691 static bool
692 should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
694 _cpp_file *f;
696 /* Skip once-only files. */
697 if (file->once_only)
698 return false;
700 /* We must mark the file once-only if #import now, before header
701 guard checks. Otherwise, undefining the header guard might
702 cause the file to be re-stacked. */
703 if (import)
705 _cpp_mark_file_once_only (pfile, file);
707 /* Don't stack files that have been stacked before. */
708 if (file->stack_count)
709 return false;
712 /* Skip if the file had a header guard and the macro is defined.
713 PCH relies on this appearing before the PCH handler below. */
714 if (file->cmacro && file->cmacro->type == NT_MACRO)
715 return false;
717 /* Handle PCH files immediately; don't stack them. */
718 if (file->pchname)
720 pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
721 file->fd = -1;
722 free ((void *) file->pchname);
723 file->pchname = NULL;
724 return false;
727 if (!read_file (pfile, file))
728 return false;
730 /* Check the file against the PCH file. This is done before
731 checking against files we've already seen, since it may save on
732 I/O. */
733 if (check_file_against_entries (pfile, file, import))
735 /* If this isn't a #import, but yet we can't include the file,
736 that means that it was #import-ed in the PCH file,
737 so we can never include it again. */
738 if (! import)
739 _cpp_mark_file_once_only (pfile, file);
740 return false;
743 /* Now we've read the file's contents, we can stack it if there
744 are no once-only files. */
745 if (!pfile->seen_once_only)
746 return true;
748 /* We may have read the file under a different name. Look
749 for likely candidates and compare file contents to be sure. */
750 for (f = pfile->all_files; f; f = f->next_file)
752 if (f == file)
753 continue;
755 if ((import || f->once_only)
756 && f->err_no == 0
757 && f->st.st_mtime == file->st.st_mtime
758 && f->st.st_size == file->st.st_size)
760 _cpp_file *ref_file;
761 bool same_file_p = false;
763 if (f->buffer && !f->buffer_valid)
765 /* We already have a buffer but it is not valid, because
766 the file is still stacked. Make a new one. */
767 ref_file = make_cpp_file (pfile, f->dir, f->name);
768 ref_file->path = f->path;
770 else
771 /* The file is not stacked anymore. We can reuse it. */
772 ref_file = f;
774 same_file_p = read_file (pfile, ref_file)
775 /* Size might have changed in read_file(). */
776 && ref_file->st.st_size == file->st.st_size
777 && !memcmp (ref_file->buffer,
778 file->buffer,
779 file->st.st_size);
781 if (f->buffer && !f->buffer_valid)
783 ref_file->path = 0;
784 destroy_cpp_file (ref_file);
787 if (same_file_p)
788 break;
792 return f == NULL;
795 /* Place the file referenced by FILE into a new buffer on the buffer
796 stack if possible. IMPORT is true if this stacking attempt is
797 because of a #import directive. Returns true if a buffer is
798 stacked. */
799 bool
800 _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import)
802 cpp_buffer *buffer;
803 int sysp;
805 if (!should_stack_file (pfile, file, import))
806 return false;
808 if (pfile->buffer == NULL || file->dir == NULL)
809 sysp = 0;
810 else
811 sysp = MAX (pfile->buffer->sysp, file->dir->sysp);
813 /* Add the file to the dependencies on its first inclusion. */
814 if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
816 if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file))
817 deps_add_dep (pfile->deps, file->path);
820 /* Clear buffer_valid since _cpp_clean_line messes it up. */
821 file->buffer_valid = false;
822 file->stack_count++;
824 /* Stack the buffer. */
825 buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
826 CPP_OPTION (pfile, preprocessed)
827 && !CPP_OPTION (pfile, directives_only));
828 buffer->file = file;
829 buffer->sysp = sysp;
831 /* Initialize controlling macro state. */
832 pfile->mi_valid = true;
833 pfile->mi_cmacro = 0;
835 /* Generate the call back. */
836 _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp);
838 return true;
841 /* Mark FILE to be included once only. */
842 void
843 _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file)
845 pfile->seen_once_only = true;
846 file->once_only = true;
849 /* Return the directory from which searching for FNAME should start,
850 considering the directive TYPE and ANGLE_BRACKETS. If ANGLE_BRACKETS
851 is 0, TYPE is IT_INCLUDE and DNAME is given, it returns a directory
852 entry for DNAME. If there is nothing left in the path, returns NULL. */
853 static struct cpp_dir *
854 search_path_head (cpp_reader *pfile, const char *dname, const char *fname,
855 int angle_brackets, enum include_type type)
857 cpp_dir *dir;
858 _cpp_file *file;
860 if (IS_ABSOLUTE_PATH (fname))
861 return &pfile->no_search_path;
863 /* pfile->buffer is NULL when processing an -include command-line flag. */
864 file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file;
866 /* For #include_next, skip in the search path past the dir in which
867 the current file was found, but if it was found via an absolute
868 path use the normal search logic. */
869 if (type == IT_INCLUDE_NEXT && file->dir
870 && file->dir != &pfile->no_search_path)
871 dir = file->dir->next;
872 else if (angle_brackets)
873 dir = pfile->bracket_include;
874 else if (type == IT_CMDLINE)
875 /* -include and -imacros use the #include "" chain with the
876 preprocessor's cwd prepended. */
877 return make_cpp_dir (pfile, "./", false);
878 else if (pfile->quote_ignores_source_dir)
879 dir = pfile->quote_include;
880 else
881 return make_cpp_dir (pfile, (dname) ? dname : dir_name_of_file (file),
882 pfile->buffer ? pfile->buffer->sysp : 0);
884 if (dir == NULL)
885 cpp_error (pfile, CPP_DL_ERROR,
886 "no include path in which to search for %s", fname);
888 return dir;
891 /* Strip the basename from the file's path. It ends with a slash if
892 of nonzero length. Note that this procedure also works for
893 <stdin>, which is represented by the empty string. */
894 static const char *
895 dir_name_of_file (_cpp_file *file)
897 if (!file->dir_name)
899 size_t len = lbasename (file->path) - file->path;
900 char *dir_name = XNEWVEC (char, len + 1);
902 memcpy (dir_name, file->path, len);
903 dir_name[len] = '\0';
904 file->dir_name = dir_name;
907 return file->dir_name;
910 /* Handles #include-family directives (distinguished by TYPE),
911 including HEADER, and the command line -imacros and -include.
912 Returns true if a buffer was stacked. */
913 bool
914 _cpp_stack_include (cpp_reader *pfile, const char *dname, const char *fname,
915 int angle_brackets, enum include_type type)
917 struct cpp_dir *dir;
918 _cpp_file *file;
920 dir = search_path_head (pfile, dname, fname, angle_brackets, type);
921 if (!dir)
922 return false;
924 file = _cpp_find_file (pfile, fname, dir, false, angle_brackets);
926 /* Compensate for the increment in linemap_add that occurs in
927 _cpp_stack_file. In the case of a normal #include, we're
928 currently at the start of the line *following* the #include. A
929 separate source_location for this location makes no sense (until
930 we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
931 This does not apply if we found a PCH file (in which case
932 linemap_add is not called) or we were included from the
933 command-line. */
934 if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE)
935 pfile->line_table->highest_location--;
937 return _cpp_stack_file (pfile, file, type == IT_IMPORT);
940 /* Could not open FILE. The complication is dependency output. */
941 static void
942 open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets)
944 int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0;
945 bool print_dep = CPP_OPTION (pfile, deps.style) > (angle_brackets || !!sysp);
947 errno = file->err_no;
948 if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
950 deps_add_dep (pfile->deps, file->name);
951 /* If the preprocessor output (other than dependency information) is
952 being used, we must also flag an error. */
953 if (CPP_OPTION (pfile, deps.need_preprocessor_output))
954 cpp_errno (pfile, CPP_DL_FATAL, file->path);
956 else
958 /* If we are not outputting dependencies, or if we are and dependencies
959 were requested for this file, or if preprocessor output is needed
960 in addition to dependency information, this is an error.
962 Otherwise (outputting dependencies but not for this file, and not
963 using the preprocessor output), we can still produce correct output
964 so it's only a warning. */
965 if (CPP_OPTION (pfile, deps.style) == DEPS_NONE
966 || print_dep
967 || CPP_OPTION (pfile, deps.need_preprocessor_output))
968 cpp_errno (pfile, CPP_DL_FATAL, file->path);
969 else
970 cpp_errno (pfile, CPP_DL_WARNING, file->path);
974 /* Search in the chain beginning at HEAD for a file whose search path
975 started at START_DIR != NULL. */
976 static struct file_hash_entry *
977 search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
979 while (head && head->start_dir != start_dir)
980 head = head->next;
982 return head;
985 /* Allocate a new _cpp_file structure. */
986 static _cpp_file *
987 make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname)
989 _cpp_file *file;
991 file = XCNEW (_cpp_file);
992 file->main_file = !pfile->buffer;
993 file->fd = -1;
994 file->dir = dir;
995 file->name = xstrdup (fname);
997 return file;
1000 /* Release a _cpp_file structure. */
1001 static void
1002 destroy_cpp_file (_cpp_file *file)
1004 if (file->buffer_start)
1005 free ((void *) file->buffer_start);
1006 free ((void *) file->name);
1007 free (file);
1010 /* Release all the files allocated by this reader. */
1011 static void
1012 destroy_all_cpp_files (cpp_reader *pfile)
1014 _cpp_file *iter = pfile->all_files;
1015 while (iter)
1017 _cpp_file *next = iter->next_file;
1018 destroy_cpp_file (iter);
1019 iter = next;
1023 /* A hash of directory names. The directory names are the path names
1024 of files which contain a #include "", the included file name is
1025 appended to this directories.
1027 To avoid duplicate entries we follow the convention that all
1028 non-empty directory names should end in a '/'. DIR_NAME must be
1029 stored in permanently allocated memory. */
1030 static cpp_dir *
1031 make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
1033 struct file_hash_entry *entry, **hash_slot;
1034 cpp_dir *dir;
1036 hash_slot = (struct file_hash_entry **)
1037 htab_find_slot_with_hash (pfile->dir_hash, dir_name,
1038 htab_hash_string (dir_name),
1039 INSERT);
1041 /* Have we already hashed this directory? */
1042 for (entry = *hash_slot; entry; entry = entry->next)
1043 if (entry->start_dir == NULL)
1044 return entry->u.dir;
1046 dir = XCNEW (cpp_dir);
1047 dir->next = pfile->quote_include;
1048 dir->name = (char *) dir_name;
1049 dir->len = strlen (dir_name);
1050 dir->sysp = sysp;
1051 dir->construct = 0;
1053 /* Store this new result in the hash table. */
1054 entry = new_file_hash_entry (pfile);
1055 entry->next = *hash_slot;
1056 entry->start_dir = NULL;
1057 entry->location = pfile->line_table->highest_location;
1058 entry->u.dir = dir;
1059 *hash_slot = entry;
1061 return dir;
1064 /* Create a new block of memory for file hash entries. */
1065 static void
1066 allocate_file_hash_entries (cpp_reader *pfile)
1068 struct file_hash_entry_pool *pool = XNEW (struct file_hash_entry_pool);
1069 pool->file_hash_entries_used = 0;
1070 pool->next = pfile->file_hash_entries;
1071 pfile->file_hash_entries = pool;
1074 /* Return a new file hash entry. */
1075 static struct file_hash_entry *
1076 new_file_hash_entry (cpp_reader *pfile)
1078 unsigned int idx;
1079 if (pfile->file_hash_entries->file_hash_entries_used == FILE_HASH_POOL_SIZE)
1080 allocate_file_hash_entries (pfile);
1082 idx = pfile->file_hash_entries->file_hash_entries_used++;
1083 return &pfile->file_hash_entries->pool[idx];
1086 /* Free the file hash entry pools. */
1087 static void
1088 free_file_hash_entries (cpp_reader *pfile)
1090 struct file_hash_entry_pool *iter = pfile->file_hash_entries;
1091 while (iter)
1093 struct file_hash_entry_pool *next = iter->next;
1094 free (iter);
1095 iter = next;
1099 /* Returns TRUE if a file FNAME has ever been successfully opened.
1100 This routine is not intended to correctly handle filenames aliased
1101 by links or redundant . or .. traversals etc. */
1102 bool
1103 cpp_included (cpp_reader *pfile, const char *fname)
1105 struct file_hash_entry *entry;
1107 entry = (struct file_hash_entry *)
1108 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
1110 while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
1111 entry = entry->next;
1113 return entry != NULL;
1116 /* Returns TRUE if a file FNAME has ever been successfully opened
1117 before LOCATION. This routine is not intended to correctly handle
1118 filenames aliased by links or redundant . or .. traversals etc. */
1119 bool
1120 cpp_included_before (cpp_reader *pfile, const char *fname,
1121 source_location location)
1123 struct file_hash_entry *entry;
1125 entry = (struct file_hash_entry *)
1126 htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname));
1128 while (entry && (entry->start_dir == NULL || entry->u.file->err_no
1129 || entry->location > location))
1130 entry = entry->next;
1132 return entry != NULL;
1135 /* Calculate the hash value of a file hash entry P. */
1137 static hashval_t
1138 file_hash_hash (const void *p)
1140 struct file_hash_entry *entry = (struct file_hash_entry *) p;
1141 const char *hname;
1142 if (entry->start_dir)
1143 hname = entry->u.file->name;
1144 else
1145 hname = entry->u.dir->name;
1147 return htab_hash_string (hname);
1150 /* Compare a string Q against a file hash entry P. */
1151 static int
1152 file_hash_eq (const void *p, const void *q)
1154 struct file_hash_entry *entry = (struct file_hash_entry *) p;
1155 const char *fname = (const char *) q;
1156 const char *hname;
1158 if (entry->start_dir)
1159 hname = entry->u.file->name;
1160 else
1161 hname = entry->u.dir->name;
1163 return strcmp (hname, fname) == 0;
1166 /* Compare entries in the nonexistent file hash table. These are just
1167 strings. */
1168 static int
1169 nonexistent_file_hash_eq (const void *p, const void *q)
1171 return strcmp ((const char *) p, (const char *) q) == 0;
1174 /* Initialize everything in this source file. */
1175 void
1176 _cpp_init_files (cpp_reader *pfile)
1178 pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1179 NULL, xcalloc, free);
1180 pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
1181 NULL, xcalloc, free);
1182 allocate_file_hash_entries (pfile);
1183 pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string,
1184 nonexistent_file_hash_eq,
1185 NULL, xcalloc, free);
1186 _obstack_begin (&pfile->nonexistent_file_ob, 0, 0,
1187 (void *(*) (long)) xmalloc,
1188 (void (*) (void *)) free);
1191 /* Finalize everything in this source file. */
1192 void
1193 _cpp_cleanup_files (cpp_reader *pfile)
1195 htab_delete (pfile->file_hash);
1196 htab_delete (pfile->dir_hash);
1197 htab_delete (pfile->nonexistent_file_hash);
1198 obstack_free (&pfile->nonexistent_file_ob, 0);
1199 free_file_hash_entries (pfile);
1200 destroy_all_cpp_files (pfile);
1203 /* Make the parser forget about files it has seen. This can be useful
1204 for resetting the parser to start another run. */
1205 void
1206 cpp_clear_file_cache (cpp_reader *pfile)
1208 _cpp_cleanup_files (pfile);
1209 pfile->file_hash_entries = NULL;
1210 pfile->all_files = NULL;
1211 _cpp_init_files (pfile);
1214 /* Enter a file name in the hash for the sake of cpp_included. */
1215 void
1216 _cpp_fake_include (cpp_reader *pfile, const char *fname)
1218 _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true, 0);
1221 /* Not everyone who wants to set system-header-ness on a buffer can
1222 see the details of a buffer. This is an exported interface because
1223 fix-header needs it. */
1224 void
1225 cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc)
1227 int flags = 0;
1228 const struct line_maps *line_table = pfile->line_table;
1229 const struct line_map *map = &line_table->maps[line_table->used-1];
1231 /* 1 = system header, 2 = system header to be treated as C. */
1232 if (syshdr)
1233 flags = 1 + (externc != 0);
1234 pfile->buffer->sysp = flags;
1235 _cpp_do_file_change (pfile, LC_RENAME, map->to_file,
1236 SOURCE_LINE (map, pfile->line_table->highest_line), flags);
1239 /* Allow the client to change the current file. Used by the front end
1240 to achieve pseudo-file names like <built-in>.
1241 If REASON is LC_LEAVE, then NEW_NAME must be NULL. */
1242 void
1243 cpp_change_file (cpp_reader *pfile, enum lc_reason reason,
1244 const char *new_name)
1246 _cpp_do_file_change (pfile, reason, new_name, 1, 0);
1249 struct report_missing_guard_data
1251 const char **paths;
1252 size_t count;
1255 /* Callback function for htab_traverse. */
1256 static int
1257 report_missing_guard (void **slot, void *d)
1259 struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
1260 struct report_missing_guard_data *data
1261 = (struct report_missing_guard_data *) d;
1263 /* Skip directories. */
1264 if (entry->start_dir != NULL)
1266 _cpp_file *file = entry->u.file;
1268 /* We don't want MI guard advice for the main file. */
1269 if (!file->once_only && file->cmacro == NULL
1270 && file->stack_count == 1 && !file->main_file)
1272 if (data->paths == NULL)
1274 data->paths = XCNEWVEC (const char *, data->count);
1275 data->count = 0;
1278 data->paths[data->count++] = file->path;
1282 /* Keep traversing the hash table. */
1283 return 1;
1286 /* Comparison function for qsort. */
1287 static int
1288 report_missing_guard_cmp (const void *p1, const void *p2)
1290 return strcmp (*(const char *const *) p1, *(const char *const *) p2);
1293 /* Report on all files that might benefit from a multiple include guard.
1294 Triggered by -H. */
1295 void
1296 _cpp_report_missing_guards (cpp_reader *pfile)
1298 struct report_missing_guard_data data;
1300 data.paths = NULL;
1301 data.count = htab_elements (pfile->file_hash);
1302 htab_traverse (pfile->file_hash, report_missing_guard, &data);
1304 if (data.paths != NULL)
1306 size_t i;
1308 /* Sort the paths to avoid outputting them in hash table
1309 order. */
1310 qsort (data.paths, data.count, sizeof (const char *),
1311 report_missing_guard_cmp);
1312 fputs (_("Multiple include guards may be useful for:\n"),
1313 stderr);
1314 for (i = 0; i < data.count; i++)
1316 fputs (data.paths[i], stderr);
1317 putc ('\n', stderr);
1319 free (data.paths);
1324 /* Callback function for cpp_main_missing_guard with htab_traverse. */
1325 static int
1326 main_missing_guard (void **slot, void *d)
1328 struct file_hash_entry *entry = (struct file_hash_entry *) *slot;
1329 const char **dropbox = (const char **) d;
1331 /* Skip directories. */
1332 if (entry->start_dir != NULL)
1334 _cpp_file *file = entry->u.file;
1336 /* FIXME pph: It's not clear what effect once_only should have. */
1337 if ( !file->once_only && file->cmacro == NULL
1338 && file->stack_count == 1 && file->main_file)
1340 *dropbox = file->path;
1341 return 0; /* Stop traversing the hash table. */
1345 /* Keep traversing the hash table. */
1346 return 1;
1349 /* Return the path name of the main file iff it does not have a
1350 multiple include guard. */
1351 const char *
1352 cpp_main_missing_guard (cpp_reader *pfile)
1354 const char *offending_file = false;
1355 htab_traverse (pfile->file_hash, main_missing_guard, &offending_file);
1356 return offending_file;
1360 /* Locate HEADER, and determine whether it is newer than the current
1361 file. If it cannot be located or dated, return -1, if it is
1362 newer, return 1, otherwise 0. */
1364 _cpp_compare_file_date (cpp_reader *pfile, const char *fname,
1365 int angle_brackets)
1367 _cpp_file *file;
1368 struct cpp_dir *dir;
1370 dir = search_path_head (pfile, NULL, fname, angle_brackets, IT_INCLUDE);
1371 if (!dir)
1372 return -1;
1374 file = _cpp_find_file (pfile, fname, dir, false, angle_brackets);
1375 if (file->err_no)
1376 return -1;
1378 if (file->fd != -1)
1380 close (file->fd);
1381 file->fd = -1;
1384 return file->st.st_mtime > pfile->buffer->file->st.st_mtime;
1387 /* Pushes the given file onto the buffer stack. Returns nonzero if
1388 successful. */
1389 bool
1390 cpp_push_include (cpp_reader *pfile, const char *fname)
1392 return _cpp_stack_include (pfile, NULL, fname, false, IT_CMDLINE);
1395 /* Pushes the given file onto the buffer stack. Returns true if
1396 successful. This is similar to cpp_push_include but it also
1397 allows to specify whether a #include, #include_next or #import
1398 should be used. If ANGLE_BRACKETS is true, it searches
1399 the file in the system include path. */
1400 bool
1401 cpp_push_include_type (cpp_reader *pfile, const char *dname,
1402 const char *fname, bool angle_brackets,
1403 enum include_type itype)
1405 return _cpp_stack_include (pfile, dname, fname, angle_brackets, itype);
1408 /* Do appropriate cleanup when a file INC's buffer is popped off the
1409 input stack. */
1410 void
1411 _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
1413 /* Record the inclusion-preventing macro, which could be NULL
1414 meaning no controlling macro. */
1415 if (pfile->mi_valid && file->cmacro == NULL)
1416 file->cmacro = pfile->mi_cmacro;
1418 /* Invalidate control macros in the #including file. */
1419 pfile->mi_valid = false;
1421 if (file->buffer_start)
1423 free ((void *) file->buffer_start);
1424 file->buffer_start = NULL;
1425 file->buffer = NULL;
1426 file->buffer_valid = false;
1430 /* Inteface to file statistics record in _cpp_file structure. */
1431 struct stat *
1432 _cpp_get_file_stat (_cpp_file *file)
1434 return &file->st;
1437 /* Set the include chain for "" to QUOTE, for <> to BRACKET. If
1438 QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the
1439 directory of the including file.
1441 If BRACKET does not lie in the QUOTE chain, it is set to QUOTE. */
1442 void
1443 cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket,
1444 int quote_ignores_source_dir)
1446 pfile->quote_include = quote;
1447 pfile->bracket_include = quote;
1448 pfile->quote_ignores_source_dir = quote_ignores_source_dir;
1450 for (; quote; quote = quote->next)
1452 quote->name_map = NULL;
1453 quote->len = strlen (quote->name);
1454 if (quote == bracket)
1455 pfile->bracket_include = bracket;
1459 /* Append the file name to the directory to create the path, but don't
1460 turn / into // or // into ///; // may be a namespace escape. */
1461 static char *
1462 append_file_to_dir (const char *fname, cpp_dir *dir)
1464 size_t dlen, flen;
1465 char *path;
1467 dlen = dir->len;
1468 flen = strlen (fname);
1469 path = XNEWVEC (char, dlen + 1 + flen + 1);
1470 memcpy (path, dir->name, dlen);
1471 if (dlen && path[dlen - 1] != '/')
1472 path[dlen++] = '/';
1473 memcpy (&path[dlen], fname, flen + 1);
1475 return path;
1478 /* Read a space delimited string of unlimited length from a stdio
1479 file F. */
1480 static char *
1481 read_filename_string (int ch, FILE *f)
1483 char *alloc, *set;
1484 int len;
1486 len = 20;
1487 set = alloc = XNEWVEC (char, len + 1);
1488 if (! is_space (ch))
1490 *set++ = ch;
1491 while ((ch = getc (f)) != EOF && ! is_space (ch))
1493 if (set - alloc == len)
1495 len *= 2;
1496 alloc = XRESIZEVEC (char, alloc, len + 1);
1497 set = alloc + len / 2;
1499 *set++ = ch;
1502 *set = '\0';
1503 ungetc (ch, f);
1504 return alloc;
1507 /* Read the file name map file for DIR. */
1508 static void
1509 read_name_map (cpp_dir *dir)
1511 static const char FILE_NAME_MAP_FILE[] = "header.gcc";
1512 char *name;
1513 FILE *f;
1514 size_t len, count = 0, room = 9;
1516 len = dir->len;
1517 name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1);
1518 memcpy (name, dir->name, len);
1519 if (len && name[len - 1] != '/')
1520 name[len++] = '/';
1521 strcpy (name + len, FILE_NAME_MAP_FILE);
1522 f = fopen (name, "r");
1524 dir->name_map = XNEWVEC (const char *, room);
1526 /* Silently return NULL if we cannot open. */
1527 if (f)
1529 int ch;
1531 while ((ch = getc (f)) != EOF)
1533 char *to;
1535 if (is_space (ch))
1536 continue;
1538 if (count + 2 > room)
1540 room += 8;
1541 dir->name_map = XRESIZEVEC (const char *, dir->name_map, room);
1544 dir->name_map[count] = read_filename_string (ch, f);
1545 while ((ch = getc (f)) != EOF && is_hspace (ch))
1548 to = read_filename_string (ch, f);
1549 if (IS_ABSOLUTE_PATH (to))
1550 dir->name_map[count + 1] = to;
1551 else
1553 dir->name_map[count + 1] = append_file_to_dir (to, dir);
1554 free (to);
1557 count += 2;
1558 while ((ch = getc (f)) != '\n')
1559 if (ch == EOF)
1560 break;
1563 fclose (f);
1566 /* Terminate the list of maps. */
1567 dir->name_map[count] = NULL;
1570 /* Remap a FILE's name based on the file_name_map, if any, for
1571 FILE->dir. If the file name has any directory separators,
1572 recursively check those directories too. */
1573 static char *
1574 remap_filename (cpp_reader *pfile, _cpp_file *file)
1576 const char *fname, *p;
1577 char *new_dir;
1578 cpp_dir *dir;
1579 size_t index, len;
1581 dir = file->dir;
1582 fname = file->name;
1584 for (;;)
1586 if (!dir->name_map)
1587 read_name_map (dir);
1589 for (index = 0; dir->name_map[index]; index += 2)
1590 if (!strcmp (dir->name_map[index], fname))
1591 return xstrdup (dir->name_map[index + 1]);
1593 p = strchr (fname, '/');
1594 if (!p || p == fname)
1595 return NULL;
1597 len = dir->len + (p - fname + 1);
1598 new_dir = XNEWVEC (char, len + 1);
1599 memcpy (new_dir, dir->name, dir->len);
1600 memcpy (new_dir + dir->len, fname, p - fname + 1);
1601 new_dir[len] = '\0';
1603 dir = make_cpp_dir (pfile, new_dir, dir->sysp);
1604 fname = p + 1;
1608 /* Returns true if PCHNAME is a valid PCH file for FILE. */
1609 static bool
1610 validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
1612 const char *saved_path = file->path;
1613 bool valid = false;
1615 file->path = pchname;
1616 if (open_file (file))
1618 valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd);
1620 if (!valid)
1622 close (file->fd);
1623 file->fd = -1;
1626 if (CPP_OPTION (pfile, print_include_names))
1628 unsigned int i;
1629 for (i = 1; i < pfile->line_table->depth; i++)
1630 putc ('.', stderr);
1631 fprintf (stderr, "%c %s\n",
1632 valid ? '!' : 'x', pchname);
1636 file->path = saved_path;
1637 return valid;
1640 /* Get the path associated with the _cpp_file F. The path includes
1641 the base name from the include directive and the directory it was
1642 found in via the search path. */
1644 const char *
1645 cpp_get_path (struct _cpp_file *f)
1647 return f->path;
1650 /* Get the directory associated with the _cpp_file F. */
1652 cpp_dir *
1653 cpp_get_dir (struct _cpp_file *f)
1655 return f->dir;
1658 /* Get the cpp_buffer currently associated with the cpp_reader
1659 PFILE. */
1661 cpp_buffer *
1662 cpp_get_buffer (cpp_reader *pfile)
1664 return pfile->buffer;
1667 /* Get the _cpp_file associated with the cpp_buffer B. */
1669 _cpp_file *
1670 cpp_get_file (cpp_buffer *b)
1672 return b->file;
1675 /* Get the previous cpp_buffer given a cpp_buffer B. The previous
1676 buffer is the buffer that included the given buffer. */
1678 cpp_buffer *
1679 cpp_get_prev (cpp_buffer *b)
1681 return b->prev;
1684 /* This data structure holds the list of header files that were seen
1685 while the PCH was being built. The 'entries' field is kept sorted
1686 in memcmp() order; yes, this means that on little-endian systems,
1687 it's sorted initially by the least-significant byte of 'size', but
1688 that's OK. The code does rely on having entries with the same size
1689 next to each other. */
1691 struct pchf_entry {
1692 /* The size of this file. This is used to save running a MD5 checksum
1693 if the sizes don't match. */
1694 off_t size;
1695 /* The MD5 checksum of this file. */
1696 unsigned char sum[16];
1697 /* Is this file to be included only once? */
1698 bool once_only;
1701 struct pchf_data {
1702 /* Number of pchf_entry structures. */
1703 size_t count;
1705 /* Are there any values with once_only set?
1706 This is used as an optimisation, it means we don't have to search
1707 the structure if we're processing a regular #include. */
1708 bool have_once_only;
1710 struct pchf_entry entries[1];
1713 static struct pchf_data *pchf;
1715 /* A qsort ordering function for pchf_entry structures. */
1717 static int
1718 pchf_save_compare (const void *e1, const void *e2)
1720 return memcmp (e1, e2, sizeof (struct pchf_entry));
1723 /* Create and write to F a pchf_data structure. */
1725 bool
1726 _cpp_save_file_entries (cpp_reader *pfile, FILE *fp)
1728 size_t count = 0;
1729 struct pchf_data *result;
1730 size_t result_size;
1731 _cpp_file *f;
1733 for (f = pfile->all_files; f; f = f->next_file)
1734 ++count;
1736 result_size = (sizeof (struct pchf_data)
1737 + sizeof (struct pchf_entry) * (count - 1));
1738 result = XCNEWVAR (struct pchf_data, result_size);
1740 result->count = 0;
1741 result->have_once_only = false;
1743 for (f = pfile->all_files; f; f = f->next_file)
1745 size_t count;
1747 /* This should probably never happen, since if a read error occurred
1748 the PCH file shouldn't be written... */
1749 if (f->dont_read || f->err_no)
1750 continue;
1752 if (f->stack_count == 0)
1753 continue;
1755 count = result->count++;
1757 result->entries[count].once_only = f->once_only;
1758 /* |= is avoided in the next line because of an HP C compiler bug */
1759 result->have_once_only = result->have_once_only | f->once_only;
1760 if (f->buffer_valid)
1761 md5_buffer ((const char *)f->buffer,
1762 f->st.st_size, result->entries[count].sum);
1763 else
1765 FILE *ff;
1766 int oldfd = f->fd;
1768 if (!open_file (f))
1770 open_file_failed (pfile, f, 0);
1771 return false;
1773 ff = fdopen (f->fd, "rb");
1774 md5_stream (ff, result->entries[count].sum);
1775 fclose (ff);
1776 f->fd = oldfd;
1778 result->entries[count].size = f->st.st_size;
1781 result_size = (sizeof (struct pchf_data)
1782 + sizeof (struct pchf_entry) * (result->count - 1));
1784 qsort (result->entries, result->count, sizeof (struct pchf_entry),
1785 pchf_save_compare);
1787 return fwrite (result, result_size, 1, fp) == 1;
1790 /* Read the pchf_data structure from F. */
1792 bool
1793 _cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f)
1795 struct pchf_data d;
1797 if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f)
1798 != 1)
1799 return false;
1801 pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data)
1802 + sizeof (struct pchf_entry) * (d.count - 1));
1803 memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry));
1804 if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f)
1805 != d.count)
1806 return false;
1807 return true;
1810 /* The parameters for pchf_compare. */
1812 struct pchf_compare_data
1814 /* The size of the file we're looking for. */
1815 off_t size;
1817 /* The MD5 checksum of the file, if it's been computed. */
1818 unsigned char sum[16];
1820 /* Is SUM valid? */
1821 bool sum_computed;
1823 /* Do we need to worry about entries that don't have ONCE_ONLY set? */
1824 bool check_included;
1826 /* The file that we're searching for. */
1827 _cpp_file *f;
1830 /* bsearch comparison function; look for D_P in E_P. */
1832 static int
1833 pchf_compare (const void *d_p, const void *e_p)
1835 const struct pchf_entry *e = (const struct pchf_entry *)e_p;
1836 struct pchf_compare_data *d = (struct pchf_compare_data *)d_p;
1837 int result;
1839 result = memcmp (&d->size, &e->size, sizeof (off_t));
1840 if (result != 0)
1841 return result;
1843 if (! d->sum_computed)
1845 _cpp_file *const f = d->f;
1847 md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum);
1848 d->sum_computed = true;
1851 result = memcmp (d->sum, e->sum, 16);
1852 if (result != 0)
1853 return result;
1855 if (d->check_included || e->once_only)
1856 return 0;
1857 else
1858 return 1;
1861 /* Check that F is not in a list read from a PCH file (if any).
1862 Assumes that f->buffer_valid is true. Return TRUE if the file
1863 should not be read. */
1865 static bool
1866 check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED,
1867 _cpp_file *f,
1868 bool check_included)
1870 struct pchf_compare_data d;
1872 if (pchf == NULL
1873 || (! check_included && ! pchf->have_once_only))
1874 return false;
1876 d.size = f->st.st_size;
1877 d.sum_computed = false;
1878 d.f = f;
1879 d.check_included = check_included;
1880 return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry),
1881 pchf_compare) != NULL;
1885 /* Return the current position (in bytes) into BUFFER where the next
1886 token will be read from. */
1888 cpp_offset
1889 cpp_get_pos (cpp_buffer *buffer)
1891 cpp_offset pos;
1893 pos.cur = (buffer->cur) ? buffer->cur - buffer->buf : 0;
1894 pos.line_base = (buffer->line_base) ? buffer->line_base - buffer->buf : 0;
1895 pos.next_line = (buffer->next_line) ? buffer->next_line - buffer->buf : 0;
1897 return pos;
1901 /* Set the current position (in bytes) into BUFFER where the next
1902 token should be read from. */
1904 void
1905 cpp_set_pos (cpp_buffer *buffer, cpp_offset pos)
1907 if (pos.cur == cpp_buffer_end.cur)
1908 buffer->cur = buffer->line_base = buffer->next_line = buffer->rlimit;
1909 else if (pos.cur == cpp_buffer_start.cur)
1911 buffer->cur = buffer->line_base = NULL;
1912 buffer->next_line = buffer->buf;
1914 else
1916 buffer->cur = buffer->buf + pos.cur;
1917 buffer->line_base = buffer->buf + pos.line_base;
1918 buffer->next_line = buffer->buf + pos.next_line;
1923 /* Set the return-at-eof marker for BUFFER to VAL. If VAL is true, a
1924 CPP_EOF token will be returned when the reader find the end of
1925 file. Otherwise, the reader will transparently continue reading the
1926 including file. */
1928 void
1929 cpp_return_at_eof (cpp_buffer *buffer, bool val)
1931 buffer->return_at_eof = val;