summaryrefslogtreecommitdiffstats
path: root/gcc/c-incpath.c
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-20 15:22:31 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-20 15:22:31 +0000
commit4a01a43503180e3037ca8ac7d726d052e8de2dd8 (patch)
treec1e6303f7d728470acc13d47ad5d88636c7a9d2b /gcc/c-incpath.c
parent9ea8a14883e5138b4024667608336f30c2da5af8 (diff)
downloadppe42-gcc-4a01a43503180e3037ca8ac7d726d052e8de2dd8.tar.gz
ppe42-gcc-4a01a43503180e3037ca8ac7d726d052e8de2dd8.zip
* c-incpath.c (INO_T_EQ): Do not define on non-inode systems.
(DIRS_EQ): New. (remove_duplicates): Do not set inode on non-inode systems. Use DIRS_EQ. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@135661 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-incpath.c')
-rw-r--r--gcc/c-incpath.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index f8b524d6e11..4d055542820 100644
--- a/gcc/c-incpath.c
+++ b/gcc/c-incpath.c
@@ -37,15 +37,18 @@
#ifdef VMS
# define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A)))
# define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC))
-#else
-# if (defined _WIN32 && !defined (_UWIN)) || defined __MSDOS__
-# define INO_T_EQ(A, B) 0
-# else
-# define INO_T_EQ(A, B) ((A) == (B))
-# endif
+#elif !((defined _WIN32 && !defined (_UWIN)) || defined __MSDOS__)
+# define INO_T_EQ(A, B) ((A) == (B))
# define INO_T_COPY(DEST, SRC) (DEST) = (SRC)
#endif
+#if defined INO_T_EQ
+#define DIRS_EQ(A, B) ((A)->dev == (B)->dev \
+ && INO_T_EQ((A)->ino, (B)->ino))
+#else
+#define DIRS_EQ(A, B) (!strcasecmp ((A)->name, (B)->name))
+#endif
+
static const char dir_separator_str[] = { DIR_SEPARATOR, 0 };
static void add_env_var_paths (const char *, int);
@@ -241,14 +244,15 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
"%s: not a directory", cur->name);
else
{
+#if defined (INO_T_COPY)
INO_T_COPY (cur->ino, st.st_ino);
cur->dev = st.st_dev;
+#endif
/* Remove this one if it is in the system chain. */
reason = REASON_DUP_SYS;
for (tmp = system; tmp; tmp = tmp->next)
- if (INO_T_EQ (tmp->ino, cur->ino) && tmp->dev == cur->dev
- && cur->construct == tmp->construct)
+ if (DIRS_EQ (tmp, cur) && cur->construct == tmp->construct)
break;
if (!tmp)
@@ -256,16 +260,14 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
/* Duplicate of something earlier in the same chain? */
reason = REASON_DUP;
for (tmp = head; tmp != cur; tmp = tmp->next)
- if (INO_T_EQ (cur->ino, tmp->ino) && cur->dev == tmp->dev
- && cur->construct == tmp->construct)
+ if (DIRS_EQ (cur, tmp) && cur->construct == tmp->construct)
break;
if (tmp == cur
/* Last in the chain and duplicate of JOIN? */
&& !(cur->next == NULL && join
- && INO_T_EQ (cur->ino, join->ino)
- && cur->dev == join->dev
- && cur->construct == join->construct))
+ && DIRS_EQ (cur, join)
+ && cur->construct == join->construct))
{
/* Unique, so keep this directory. */
pcur = &cur->next;
@@ -297,8 +299,8 @@ add_sysroot_to_chain (const char *sysroot, int chain)
}
/* Merge the four include chains together in the order quote, bracket,
- system, after. Remove duplicate dirs (as determined by
- INO_T_EQ()).
+ system, after. Remove duplicate dirs (determined in
+ system-specific manner).
We can't just merge the lists and then uniquify them because then
we may lose directories from the <> search path that should be
OpenPOWER on IntegriCloud