changeset 10975:2d14817353a6

allow exist to work correctly for special files; recognize directories when searching for files
author John W. Eaton <jwe@octave.org>
date Tue, 14 Sep 2010 13:51:23 -0400
parents c6dc5f666695
children 80653e42a551
files src/ChangeLog src/variables.cc
diffstat 2 files changed, 25 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-14  John W. Eaton  <jwe@octave.org>
+
+	* variables.cc (symbol_exist): If looking for any type of file
+	or "file", return 7 for directories and 2 for all other types of
+	files.
+
 2010-09-14  John W. Eaton  <jwe@octave.org>
 
 	* graphics.h.in (base_graphics_backend::initialize): Rename
--- a/src/variables.cc
+++ b/src/variables.cc
@@ -493,16 +493,10 @@
 
           if (fs)
             {
-              if ((type == "any" || type == "file")
-                  && fs.is_reg ())
-                {
-                  retval = 2;
-                }
-              else if ((type == "any" || type == "dir")
-                       && fs.is_dir ())
-                {
-                  retval = 7;
-                }
+              if (type == "any" || type == "file")
+                retval = fs.is_dir () ? 7 : 2;
+              else if (type == "dir" && fs.is_dir ())
+                retval = 7;
             }
         }
     }
@@ -597,6 +591,21 @@
   return retval;
 }
 
+/*
+%!test
+%!  if (isunix ())
+%!    assert (exist ("/tmp") == 7);
+%!    assert (exist ("/tmp", "file") == 7);
+%!    assert (exist ("/tmp", "dir") == 7);
+%!    assert (exist ("/bin/sh") == 2);
+%!    assert (exist ("/bin/sh", "file") == 2);
+%!    assert (exist ("/bin/sh", "dir") == 0);
+%!    assert (exist ("/dev/null") == 2);
+%!    assert (exist ("/dev/null", "file") == 2);
+%!    assert (exist ("/dev/null", "dir") == 0);
+%!  endif
+*/
+
 octave_value
 lookup_function_handle (const std::string& nm)
 {