c-incpath.c (INO_T_EQ): Do not define on non-inode systems.
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 20 May 2008 15:22:31 +0000 (15:22 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 20 May 2008 15:22:31 +0000 (15:22 +0000)
* 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

gcc/ChangeLog
gcc/c-incpath.c

index 234854ffa4c92aeeddbdbc1acb265cc52387f935..94677e69b4a85c7ef7aaca4501bd6defb6e6de94 100644 (file)
@@ -1,3 +1,10 @@
+2008-05-20  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * 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.
+
 2008-05-20  Sandra Loosemore  <sandra@codesourcery.com>
 
        * config.gcc (tm_file): Update comments about relative pathnames.
index f8b524d6e1176a5a0e7ded5d83050bc377375f23..4d05554282026a778a5da538537df39eca079d10 100644 (file)
 #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