diff src/load-path.cc @ 6838:5e3350bdd91d

[project @ 2007-08-28 02:59:58 by jwe]
author jwe
date Tue, 28 Aug 2007 02:59:59 +0000
parents 59e22e30aff8
children 9398f6a81bdf
line wrap: on
line diff
--- a/src/load-path.cc	Mon Aug 27 20:20:55 2007 +0000
+++ b/src/load-path.cc	Tue Aug 28 02:59:59 2007 +0000
@@ -743,39 +743,48 @@
 {
   std::string retval;
 
-  if (octave_env::absolute_pathname (file))
+  if (file.find ('/') != NPOS)
     {
-      file_stat fs (file);
-
-      if (fs.exists ())
-	return file;
-    }
-
-  std::string dir_name;
+      if (octave_env::absolute_pathname (file)
+	  || octave_env::rooted_relative_pathname (file))
+	{
+	  file_stat fs (file);
 
-  for (const_dir_info_list_iterator p = dir_info_list.begin ();
-       p != dir_info_list.end ();
-       p++)
-    {
-      string_vector all_files = p->all_files;
-
-      octave_idx_type len = all_files.length ();
+	  if (fs.exists ())
+	    return file;
+	}
+      else
+	{
+	  for (const_dir_info_list_iterator p = dir_info_list.begin ();
+	       p != dir_info_list.end ();
+	       p++)
+	    {
+	      std::string tfile = p->dir_name + file_ops::dir_sep_str + file;
 
-      for (octave_idx_type i = 0; i < len; i++)
-	{
-	  if (all_files[i] == file)
-	    {
-	      dir_name = p->dir_name;
+	      file_stat fs (tfile);
 
-	      goto done;
+	      if (fs.exists ())
+		return tfile;
 	    }
 	}
     }
-
- done:
+  else
+    {
+      for (const_dir_info_list_iterator p = dir_info_list.begin ();
+	   p != dir_info_list.end ();
+	   p++)
+	{
+	  string_vector all_files = p->all_files;
 
-  if (! dir_name.empty ())
-    retval = dir_name + file_ops::dir_sep_str + file;
+	  octave_idx_type len = all_files.length ();
+
+	  for (octave_idx_type i = 0; i < len; i++)
+	    {
+	      if (all_files[i] == file)
+		return p->dir_name + file_ops::dir_sep_str + file;
+	    }
+	}
+    }
 
   return retval;
 }