diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2008-05-20 15:22:31 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2008-05-20 15:22:31 +0000 |
commit | 498f1c824b2db85994e7cbd5f5b064061ef7e687 (patch) | |
tree | c1e6303f7d728470acc13d47ad5d88636c7a9d2b /gcc/c-incpath.c | |
parent | 95b42490a89f98ef0b41b9445f71fcefab4ed4a7 (diff) | |
download | gcc-498f1c824b2db85994e7cbd5f5b064061ef7e687.zip gcc-498f1c824b2db85994e7cbd5f5b064061ef7e687.tar.gz gcc-498f1c824b2db85994e7cbd5f5b064061ef7e687.tar.bz2 |
c-incpath.c (INO_T_EQ): Do not define on non-inode systems.
* 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.
From-SVN: r135661
Diffstat (limited to 'gcc/c-incpath.c')
-rw-r--r-- | gcc/c-incpath.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c index f8b524d..4d055542 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 |