2007-06-29 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2007 19:39:21 +0000 (19:39 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2007 19:39:21 +0000 (19:39 +0000)
PR libgfortran/32456
* io/unit.c (filename_from_unit): Don't use find_unit, instead search
for unit directly.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126119 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/unit.c

index fc8e1ed..0b5afde 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-29  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/32456
+       * io/unit.c (filename_from_unit): Don't use find_unit, instead search
+       for unit directly.
+
 2007-06-24  Adam Nemet  <anemet@caviumnetworks.com>
 
        PR libfortran/32495
index 9297af0..fac67bd 100644 (file)
@@ -690,11 +690,26 @@ update_position (gfc_unit *u)
    must free memory allocated for the filename string.  */
 
 char *
-filename_from_unit (int unit_number)
+filename_from_unit (int n)
 {
   char *filename;
-  gfc_unit *u = NULL;
-  u = find_unit (unit_number);
+  gfc_unit *u;
+  int c;
+
+  /* Find the unit.  */
+  u = unit_root;
+  while (u != NULL)
+    {
+      c = compare (n, u->unit_number);
+      if (c < 0)
+       u = u->left;
+      if (c > 0)
+       u = u->right;
+      if (c == 0)
+       break;
+    }
+
+  /* Get the filename.  */
   if (u != NULL)
     {
       filename = (char *) get_mem (u->file_len + 1);
@@ -703,4 +718,5 @@ filename_from_unit (int unit_number)
     }
   else
     return (char *) NULL;
-}
\ No newline at end of file
+}
+