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