diff src/syscalls.cc @ 2937:9d26524e2869

[project @ 1997-05-06 05:49:53 by jwe]
author jwe
date Tue, 06 May 1997 05:55:13 +0000
parents 66ef74ee5d9f
children 38de16594cb4
line wrap: on
line diff
--- a/src/syscalls.cc	Tue May 06 05:46:00 1997 +0000
+++ b/src/syscalls.cc	Tue May 06 05:55:13 1997 +0000
@@ -46,6 +46,7 @@
 
 #include "file-ops.h"
 #include "file-stat.h"
+#include "oct-syscalls.h"
 
 #include "defun.h"
 #include "error.h"
@@ -106,7 +107,6 @@
 
   if (nargin == 2)
     {
-#if defined (HAVE_DUP2)
       double d_old = args(0).double_value ();
       double d_new = args(1).double_value ();
 
@@ -120,12 +120,12 @@
 	      // XXX FIXME XXX -- are these checks sufficient?
 	      if (i_old >= 0 && i_new >= 0)
 		{
-		  int status = dup2 (i_old, i_new);
+		  string msg;
+
+		  int status = octave_syscalls::dup2 (i_old, i_new, msg);
 
 		  retval(0) = static_cast<double> (status);
-
-		  if (status < 0)
-		    retval(1) = strerror (errno);
+		  retval(1) = msg;
 		}
 	      else
 		error ("dup2: invalid file id");
@@ -133,9 +133,6 @@
 	  else
 	    error ("dup2: arguments must be integer values");
 	}
-#else
-      gripe_not_supported ("dup2");
-#endif
     }
   else
     print_usage ("dup2");
@@ -160,65 +157,49 @@
 
   if (nargin == 1 || nargin == 2)
     {
-#if defined (HAVE_EXECVP)
       string exec_file = args(0).string_value ();
 
       if (! error_state)
 	{
-	  char **exec_args = 0;
+	  string_vector exec_args;
 
 	  if (nargin == 2)
 	    {
-	      charMatrix chm = args(1).all_strings ();
+	      string_vector tmp = args(1).all_strings ();
 
 	      if (! error_state)
 		{
-		  int nr = chm.rows ();
-		  int nc = chm.cols ();
-
-		  exec_args = new char * [nr+2];
+		  int len = tmp.length ();
 
-		  // XXX FIXME XXX -- potential leak?
-
-		  exec_args[0] = strsave (exec_file.c_str ());
-		  exec_args[nr+1] = 0;
+		  exec_args.resize (len + 1);
 
-		  for (int i = 0; i < nr; i++)
-		    {
-		      exec_args[i+1] = new char [nc+1];
+		  exec_args[0] = exec_file;
 
-		      for (int j = 0; j < nc; j++)
-			exec_args[i+1][j] = chm (i, j);
-
-		      exec_args[i+1][nc] = '\0';
-		    }
+		  for (int i = 0; i < len; i++)
+		    exec_args[i+1] = tmp[i];
 		}
 	      else
 		error ("exec: arguments must be strings");
 	    }
 	  else
 	    {
-	      exec_args = new char * [2];
+	      exec_args.resize (1);
 
-	      exec_args[0] = strsave (exec_file.c_str ());
-	      exec_args[1] = 0;
+	      exec_args[0] = exec_file;
 	    }
 
 	  if (! error_state)
 	    {
-	      int status = execvp (exec_file.c_str (), exec_args);
+	      string msg;
+
+	      int status = octave_syscalls::execvp (exec_file, exec_args, msg);
 
 	      retval(0) = static_cast<double> (status);
-
-	      if (status < 0)
-		retval(1) = strerror (errno);
+	      retval(1) = msg;
 	    }
 	}
       else
 	error ("exec: first argument must be a string");
-#else
-      gripe_not_supported ("exec");
-#endif
     }
   else
     print_usage ("exec");
@@ -243,7 +224,6 @@
 
   if (nargin == 3)
     {
-#if defined (HAVE_FCNTL)
       double d_fid = args(0).double_value ();
       double d_req = args(1).double_value ();
       double d_arg = args(2).double_value ();
@@ -262,19 +242,16 @@
 	    error ("fcntl: invalid file id");
 	  else
 	    {
-	      int status = fcntl (fid, req, arg);
+	      string msg;
+
+	      int status = octave_syscalls::fcntl (fid, req, arg, msg);
 
 	      retval(0) = static_cast<double> (status);
-
-	      if (status < 0)
-		retval(1) = strerror (errno);
+	      retval(1) = msg;
 	    }
 	}
       else
 	error ("fcntl: file id must be an integer");
-#else
-      gripe_not_supported ("fcntl");
-#endif
     }
   else
     print_usage ("fcntl");
@@ -300,16 +277,12 @@
 
   if (nargin == 0)
     {
-#if defined (HAVE_FORK)
-      pid_t pid = fork ();
+      string msg;
+
+      pid_t pid = octave_syscalls::fork (msg);
 
       retval(0) = static_cast<double> (pid);
-
-      if (pid < 0)
-	retval(1) = strerror (errno);
-#else
-      gripe_not_supported ("fork");
-#endif
+      retval(1) = msg;
     }
   else
     print_usage ("fork");
@@ -320,17 +293,19 @@
 DEFUN (getpgrp, args, ,
   "pgid = getpgrp (): return the process group id of the current process")
 {
-  double retval = -1.0;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = -1.0;
 
   int nargin = args.length ();
 
   if (nargin == 0)
     {
-#if defined (HAVE_GETPGRP)
-      retval = getpgrp ();
-#else
-      gripe_not_supported ("getpgrp");
-#endif
+      string msg;
+
+      retval(0) = static_cast<double> (octave_syscalls::getpgrp (msg));
+      retval(1) = msg;
     }
   else
     print_usage ("getpgrp");
@@ -346,13 +321,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETPID)
-      retval = getpid ();
-#else
-      gripe_not_supported ("getpid");
-#endif
-    }
+    retval = octave_syscalls::getpid ();
   else
     print_usage ("getpid");
 
@@ -367,13 +336,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETPPID)
-      retval = getppid ();
-#else
-      gripe_not_supported ("getppid");
-#endif
-    }
+    retval = octave_syscalls::getppid ();
   else
     print_usage ("getppid");
 
@@ -388,13 +351,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETEGID)
-      retval = getegid ();
-#else
-      gripe_not_supported ("getegid");
-#endif
-    }
+    retval = octave_syscalls::getegid ();
   else
     print_usage ("getegid");
 
@@ -409,13 +366,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETGID)
-      retval = getgid ();
-#else
-      gripe_not_supported ("getgid");
-#endif
-    }
+    retval = octave_syscalls::getgid ();
   else
     print_usage ("getgid");
 
@@ -430,13 +381,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETEUID)
-      retval = geteuid ();
-#else
-      gripe_not_supported ("geteuid");
-#endif
-    }
+    retval = octave_syscalls::geteuid ();
   else
     print_usage ("geteuid");
 
@@ -451,13 +396,7 @@
   int nargin = args.length ();
 
   if (nargin == 0)
-    {
-#if defined (HAVE_GETUID)
-      retval = getuid ();
-#else
-      gripe_not_supported ("getuid");
-#endif
-    }
+    retval = octave_syscalls::getuid ();
   else
     print_usage ("getuid");
 
@@ -540,7 +479,6 @@
 	}
       else
 	error ("mkfifo: file name must be a string");
-
     }
   else
     print_usage ("mkfifo");
@@ -567,15 +505,14 @@
 
   if (nargin == 0)
     {
-#if defined (HAVE_PIPE)
       int fid[2];
 
-      int status = pipe (fid);
+      string msg;
+
+      int status = octave_syscalls::pipe (fid, msg);
 
       if (status < 0)
-	{
-	  retval(2) = strerror (errno);
-	}
+	retval(2) = msg;
       else
 	{
 	  FILE *in_file = fdopen (fid[0], "r");
@@ -595,9 +532,6 @@
 	  retval(1) = static_cast<double> (status);
           retval(0) = octave_value (file_ids);
 	}
-#else
-      gripe_not_supported ("pipe");
-#endif
     }
   else
     print_usage ("pipe");
@@ -687,9 +621,7 @@
 	  int status = file_ops::unlink (name, msg);
 
 	  retval(0) = static_cast<double> (status);
-
-	  if (status < 0)
-	    retval(1) = msg;	    
+	  retval(1) = msg;	    
 	}
       else
 	error ("unlink: file name must be a string");
@@ -736,7 +668,6 @@
 
   if (nargin == 1 || nargin == 2)
     {
-#if defined (HAVE_WAITPID)
       double pid_num = args(0).double_value ();
   
       if (! error_state)
@@ -768,18 +699,16 @@
 
 	      if (! error_state)
 		{
-		  pid_t status = waitpid (pid, 0, options);
+		  string msg;
+
+		  pid_t status
+		    = octave_syscalls::waitpid (pid, options, msg);
 
 		  retval(0) = static_cast<double> (status);
-
-		  if (status < 0)
-		    retval(1) = strerror (errno);
+		  retval(1) = msg;
 		}
 	    }
 	}
-#else
-      gripe_not_supported ("waitpid");
-#endif
     }
   else
     print_usage ("waitpid");