cppfiles.c (read_name_map): Return null if open () fails.
authorNeil Booth <neil@daikokuya.demon.co.uk>
Wed, 13 Dec 2000 19:20:14 +0000 (19:20 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Wed, 13 Dec 2000 19:20:14 +0000 (19:20 +0000)
        * cppfiles.c (read_name_map): Return null if open () fails.
        (remap_filename): Simplify logic.  Add ICE if it doesn't work
        as expected. Perform secondary lookup attempt on base filename
        only.

From-SVN: r38227

gcc/ChangeLog
gcc/cppfiles.c

index a53a1c0f7fa4507419c1693c7c8c5ccf793e8470..aa8d3ac4ceb1dbb1a8b8b1725b563b79de61a2e4 100644 (file)
@@ -1,3 +1,10 @@
+2000-12-13  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+        * cppfiles.c (read_name_map): Return null if open () fails.
+        (remap_filename): Simplify logic.  Add ICE if it doesn't work
+        as expected. Perform secondary lookup attempt on base filename
+        only.
+
 Wed Dec 13 19:48:04 MET 2000  Jan hubicka  <jh@suse.cz>
 
        * flow.c (notice_stack_pointer_modification_1): Notice midifications
index fccfab1f2f154746892551947042eced64793991..cc001dbc01581feb4a9fd4e41375ffa1b4f64a16 100644 (file)
@@ -859,6 +859,7 @@ read_name_map (pfile, dirname)
   char *name;
   FILE *f;
 
+  /* Check the cache of directories, and mappings in their remap file.  */
   for (map_list_ptr = CPP_OPTION (pfile, map_list); map_list_ptr;
        map_list_ptr = map_list_ptr->map_list_next)
     if (! strcmp (map_list_ptr->map_list_name, dirname))
@@ -867,6 +868,8 @@ read_name_map (pfile, dirname)
   map_list_ptr = ((struct file_name_map_list *)
                  xmalloc (sizeof (struct file_name_map_list)));
   map_list_ptr->map_list_name = xstrdup (dirname);
+
+  /* The end of the list ends in NULL.  */
   map_list_ptr->map_list_map = NULL;
 
   name = (char *) alloca (strlen (dirname) + strlen (FILE_NAME_MAP_FILE) + 2);
@@ -875,9 +878,9 @@ read_name_map (pfile, dirname)
     strcat (name, "/");
   strcat (name, FILE_NAME_MAP_FILE);
   f = fopen (name, "r");
-  if (!f)
-    map_list_ptr->map_list_map = (struct file_name_map *)-1;
-  else
+
+  /* Silently return NULL if we cannot open.  */
+  if (f)
     {
       int ch;
       int dirlen = strlen (dirname);
@@ -920,6 +923,7 @@ read_name_map (pfile, dirname)
       fclose (f);
     }
   
+  /* Add this information to the cache.  */
   map_list_ptr->map_list_next = CPP_OPTION (pfile, map_list);
   CPP_OPTION (pfile, map_list) = map_list_ptr;
 
@@ -935,15 +939,15 @@ remap_filename (pfile, name, loc)
      struct file_name_list *loc;
 {
   struct file_name_map *map;
-  const char *from, *p, *dir;
+  const char *from, *p;
+  char *dir;
 
   if (! loc->name_map)
-    loc->name_map = read_name_map (pfile,
-                                  loc->name
-                                  ? loc->name : ".");
-
-  if (loc->name_map == (struct file_name_map *)-1)
-    return name;
+    {
+      loc->name_map = read_name_map (pfile, loc->name ? loc->name : ".");
+      if (! loc->name_map)
+       return name;
+    }
   
   from = name + strlen (loc->name) + 1;
   
@@ -957,29 +961,19 @@ remap_filename (pfile, name, loc)
      /usr/include/sys/header.gcc.  */
   p = strrchr (name, '/');
   if (!p)
-    p = name;
-  if (loc && loc->name
-      && strlen (loc->name) == (size_t) (p - name)
-      && !strncmp (loc->name, name, p - name))
-    /* FILENAME is in SEARCHPTR, which we've already checked.  */
     return name;
 
+  /* We know p != name as absolute paths don't call remap_filename.  */
   if (p == name)
-    {
-      dir = ".";
-      from = name;
-    }
-  else
-    {
-      char * newdir = (char *) alloca (p - name + 1);
-      memcpy (newdir, name, p - name);
-      newdir[p - name] = '\0';
-      dir = newdir;
-      from = p + 1;
-    }
+    cpp_ice (pfile, "absolute file name in remap_filename");
+
+  dir = (char *) alloca (p - name + 1);
+  memcpy (dir, name, p - name);
+  dir[p - name] = '\0';
+  from = p + 1;
   
   for (map = read_name_map (pfile, dir); map; map = map->map_next)
-    if (! strcmp (map->map_from, name))
+    if (! strcmp (map->map_from, from))
       return map->map_to;
 
   return name;