Commit c100de59 by Danny Smith Committed by Danny Smith

cpplib.h (struct cpp_dir): Add new field, canonical_name.

libcpp/ChangeLog
	* include/cpplib.h (struct cpp_dir): Add new field, canonical_name.

gcc/ChangeLog

	* incpath.c: Use HOST_LACKS_INODE_NUMBERS conditional
	rather than OS names to choose INO_T_EQ definition.
	(DIRS_EQ) [!INO_T_EQ]: Don't worry about case in comparison.
	(add_path) [!INO_T_EQ]: Use lrealpath to fill canonical_name field.

From-SVN: r136196
parent 6551374a
2008-05-30 Danny Smith <dannysmith@users.sourceforge.net>
* incpath.c: Use HOST_LACKS_INODE_NUMBERS conditional
rather than OS names to choose INO_T_EQ definition.
(DIRS_EQ) [!INO_T_EQ]: Don't worry about case in comparison.
(add_path) [!INO_T_EQ]: Use lrealpath to fill canonical_name
field.
2008-05-29 Daniel Franke <franke.daniel@gmail.com> 2008-05-29 Daniel Franke <franke.daniel@gmail.com>
PR target/36348 PR target/36348
......
...@@ -31,13 +31,12 @@ ...@@ -31,13 +31,12 @@
#include "incpath.h" #include "incpath.h"
#include "cppdefault.h" #include "cppdefault.h"
/* Windows does not natively support inodes, and neither does MSDOS. /* Microsoft Windows does not natively support inodes.
Cygwin's emulation can generate non-unique inodes, so don't use it.
VMS has non-numeric inodes. */ VMS has non-numeric inodes. */
#ifdef VMS #ifdef VMS
# define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A))) # define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A)))
# define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC)) # define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC))
#elif !((defined _WIN32 && !defined (_UWIN)) || defined __MSDOS__) #elif !defined (HOST_LACKS_INODE_NUMBERS)
# define INO_T_EQ(A, B) ((A) == (B)) # define INO_T_EQ(A, B) ((A) == (B))
# define INO_T_COPY(DEST, SRC) (DEST) = (SRC) # define INO_T_COPY(DEST, SRC) (DEST) = (SRC)
#endif #endif
...@@ -46,7 +45,7 @@ ...@@ -46,7 +45,7 @@
#define DIRS_EQ(A, B) ((A)->dev == (B)->dev \ #define DIRS_EQ(A, B) ((A)->dev == (B)->dev \
&& INO_T_EQ((A)->ino, (B)->ino)) && INO_T_EQ((A)->ino, (B)->ino))
#else #else
#define DIRS_EQ(A, B) (!strcasecmp ((A)->name, (B)->name)) #define DIRS_EQ(A, B) (!strcmp ((A)->canonical_name, (B)->canonical_name))
#endif #endif
static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
...@@ -408,6 +407,9 @@ add_path (char *path, int chain, int cxx_aware, bool user_supplied_p) ...@@ -408,6 +407,9 @@ add_path (char *path, int chain, int cxx_aware, bool user_supplied_p)
p = XNEW (cpp_dir); p = XNEW (cpp_dir);
p->next = NULL; p->next = NULL;
p->name = path; p->name = path;
#ifndef INO_T_EQ
p->canonical_name = lrealpath (path);
#endif
if (chain == SYSTEM || chain == AFTER) if (chain == SYSTEM || chain == AFTER)
p->sysp = 1 + !cxx_aware; p->sysp = 1 + !cxx_aware;
else else
......
2008-05-30 Danny Smith <dannysmith@users.sourceforge.net>
* include/cpplib.h (struct cpp_dir): Add new field, canonical_name.
2008-05-21 Tom Tromey <tromey@redhat.com> 2008-05-21 Tom Tromey <tromey@redhat.com>
PR preprocessor/27777: PR preprocessor/27777:
......
...@@ -508,6 +508,10 @@ struct cpp_dir ...@@ -508,6 +508,10 @@ struct cpp_dir
char *name; char *name;
unsigned int len; unsigned int len;
/* The canonicalized NAME as determined by lrealpath. This field
is only used by hosts that lack reliable inode numbers. */
char *canonical_name;
/* One if a system header, two if a system header that has extern /* One if a system header, two if a system header that has extern
"C" guards for C++. */ "C" guards for C++. */
unsigned char sysp; unsigned char sysp;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment