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