diff src/dirfns.cc @ 1781:e090f89bf2f5

[project @ 1996-01-24 08:04:14 by jwe]
author jwe
date Wed, 24 Jan 1996 08:09:03 +0000
parents 5215571ea783
children 6109184b054f
line wrap: on
line diff
--- a/src/dirfns.cc	Wed Jan 24 07:55:06 1996 +0000
+++ b/src/dirfns.cc	Wed Jan 24 08:09:03 1996 +0000
@@ -51,6 +51,7 @@
 #include "str-vec.h"
 
 #include "defun.h"
+#include "dir-ops.h"
 #include "dirfns.h"
 #include "error.h"
 #include "file-ops.h"
@@ -62,7 +63,6 @@
 #include "procstream.h"
 #include "pt-plot.h"
 #include "sysdep.h"
-#include "sysdir.h"
 #include "toplev.h"
 #include "unwind-prot.h"
 #include "utils.h"
@@ -446,80 +446,32 @@
 is printed.")
 {
   Octave_object retval;
-  charMatrix dirlist;
-  int status = 0;
 
   if (args.length () == 1)
     {
       string dirname = args(0).string_value ();
 
       if (error_state)
-	{
-	  status = -1;
-	  gripe_wrong_type_arg ("readdir", args(0));
-	}
+	gripe_wrong_type_arg ("readdir", args(0));
       else
 	{
-	  string tmp = oct_tilde_expand (dirname);
-
-	  DIR *dir = opendir (tmp.c_str ());
+	  dir_entry dir (oct_tilde_expand (dirname));
 
 	  if (dir)
 	    {
-	      int count = 0;
-	      int max_len = 0;
-
-	      struct dirent *dir_entry;
-
-	      while ((dir_entry = readdir (dir)))
-		{
-		  count++;
-		  int len = strlen (dir_entry->d_name);
-		  if (len > max_len)
-		    max_len = len;
-		}
-
-	      rewinddir (dir);
-
-	      dirlist.resize (count, max_len, 0);
-
-	      while ((dir_entry = readdir (dir)))
-		{
-		  if (--count < 0)
-		    break;
-
-		  dirlist.insert (dir_entry->d_name, count, 0);
-		}
-
-#if defined (CLOSEDIR_VOID)
-	      closedir (dir);
-#else
-	      if (closedir (dir) < 0)
-		{
-		  status = -1;
-		  error ("%s", strerror (errno));
-		}
-#endif
-
-	      if (count != 0)
-		{
-		  status = -1;
-		  error ("readdir: failed reading directory");
-		}
+	      string_vector dirlist = dir.read ();
+	      retval(0) = dirlist.qsort ();
 	    }
 	  else
 	    {
-	      status = -1;
-	      error ("%s", strerror (errno));
+	      string msg = dir.error ();
+	      error ("%s", msg.c_str ());
 	    }
 	}
     }
   else
     print_usage ("readdir");
 
-  if (status == 0)
-    retval(0) = tree_constant (dirlist, 1);
-
   return retval;
 }