diff src/dirfns.cc @ 9266:1d3b91166b9c

allow pathsep to be set
author John W. Eaton <jwe@octave.org>
date Tue, 26 May 2009 17:20:07 -0400
parents 7c02ec148a3c
children f9ac007bb926
line wrap: on
line diff
--- a/src/dirfns.cc
+++ b/src/dirfns.cc
@@ -671,19 +671,47 @@
   return retval;
 }
 
-DEFUN (pathsep, args, ,
+DEFUN (pathsep, args, nargout,
     "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {} pathsep ()\n\
-Return the system-dependent character used to separate directories in\n\
+@deftypefn {Built-in Function} {@var{val} =} pathsep ()\n\
+@deftypefn {Built-in Function} {@var{old_val} =} pathsep (@var{new_val})\n\
+Query or set the character used to separate directories in\n\
 a path.\n\
 @seealso{filesep, dir, ls}\n\
 @end deftypefn")
 {
   octave_value retval;
 
-  if (args.length () == 0)
+  int nargin = args.length ();
+
+  if (nargout > 0 || nargin == 0)
     retval = dir_path::path_sep_str ();
-  else
+
+  if (nargin == 1)
+    {
+      std::string sval = args(0).string_value ();
+
+      if (! error_state)
+	{
+	  switch (sval.length ())
+	    {
+	    case 1:
+	      dir_path::path_sep_char (sval[0]);
+	      break;
+
+	    case 0:
+	      dir_path::path_sep_char ('\0');
+	      break;
+
+	    default:
+	      error ("pathsep: argument must be a single character");
+	      break;
+	    }
+	}
+      else
+	error ("pathsep: argument must be a single character");
+    }
+  else if (nargin > 1)
     print_usage ();
 
   return retval;