changeset 21609:46f059de4dce

use namespace instead of struct with static members for system call wrappers * oct-syscalls.h, oct-syscalls.cc: Use octave::syscalls namespace instead of struct with static members. Change all uses.
author John W. Eaton <jwe@octave.org>
date Mon, 11 Apr 2016 14:39:02 -0400
parents 80258bb3a14b
children eff26982a19b
files libinterp/corefcn/oct-procbuf.cc libinterp/corefcn/sighandlers.cc libinterp/corefcn/syscalls.cc liboctave/system/oct-env.cc liboctave/system/oct-syscalls.cc liboctave/system/oct-syscalls.h
diffstat 6 files changed, 321 insertions(+), 297 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/oct-procbuf.cc	Mon Apr 11 13:53:17 2016 -0400
+++ b/libinterp/corefcn/oct-procbuf.cc	Mon Apr 11 14:39:02 2016 -0400
@@ -90,7 +90,7 @@
   if (is_open ())
     return 0;
 
-  if (pipe (pipe_fds) < 0)
+  if (octave::syscalls::pipe (pipe_fds) < 0)
     return 0;
 
   if (mode & std::ios::in)
@@ -202,7 +202,7 @@
 
           do
             {
-              wait_pid = octave_syscalls::waitpid (proc_pid, &wstatus, 0);
+              wait_pid = octave::syscalls::waitpid (proc_pid, &wstatus, 0);
             }
           while (wait_pid == -1 && errno == EINTR);
         }
--- a/libinterp/corefcn/sighandlers.cc	Mon Apr 11 13:53:17 2016 -0400
+++ b/libinterp/corefcn/sighandlers.cc	Mon Apr 11 14:39:02 2016 -0400
@@ -1021,7 +1021,7 @@
         {
           int status;
 
-          if (octave_syscalls::waitpid (pid, &status, WNOHANG) > 0)
+          if (octave::syscalls::waitpid (pid, &status, WNOHANG) > 0)
             {
               oc.have_status = 1;
 
--- a/libinterp/corefcn/syscalls.cc	Mon Apr 11 13:53:17 2016 -0400
+++ b/libinterp/corefcn/syscalls.cc	Mon Apr 11 14:39:02 2016 -0400
@@ -122,7 +122,7 @@
     {
       std::string msg;
 
-      int status = octave_syscalls::dup2 (i_old, i_new, msg);
+      int status = octave::syscalls::dup2 (i_old, i_new, msg);
 
       return ovl (status, msg);
     }
@@ -187,7 +187,7 @@
 
   std::string msg;
 
-  int status = octave_syscalls::execvp (exec_file, exec_args, msg);
+  int status = octave::syscalls::execvp (exec_file, exec_args, msg);
 
   return ovl (status, msg);
 }
@@ -274,7 +274,7 @@
   std::string msg;
   pid_t pid;
 
-  pid = octave_syscalls::popen2 (exec_file, arg_list, sync_mode,
+  pid = octave::syscalls::popen2 (exec_file, arg_list, sync_mode,
                                  filedesc, msg, interactive);
   if (pid < 0)
     error (msg.c_str ());
@@ -440,7 +440,7 @@
 
   std::string msg;
 
-  int status = octave_fcntl (fid, req, arg, msg);
+  int status = octave::syscalls::fcntl (fid, req, arg, msg);
 
   return ovl (status, msg);
 }
@@ -476,7 +476,7 @@
 
   std::string msg;
 
-  pid_t pid = octave_syscalls::fork (msg);
+  pid_t pid = octave::syscalls::fork (msg);
 
   return ovl (pid, msg);
 }
@@ -492,7 +492,7 @@
 
   std::string msg;
 
-  pid_t pid = octave_syscalls::getpgrp (msg);
+  pid_t pid = octave::syscalls::getpgrp (msg);
 
   return ovl (pid, msg);
 }
@@ -507,7 +507,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::getpid ());
+  return ovl (octave::syscalls::getpid ());
 }
 
 DEFUNX ("getppid", Fgetppid, args, ,
@@ -520,7 +520,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::getppid ());
+  return ovl (octave::syscalls::getppid ());
 }
 
 DEFUNX ("getegid", Fgetegid, args, ,
@@ -533,7 +533,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::getegid ());
+  return ovl (octave::syscalls::getegid ());
 }
 
 DEFUNX ("getgid", Fgetgid, args, ,
@@ -546,7 +546,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::getgid ());
+  return ovl (octave::syscalls::getgid ());
 }
 
 DEFUNX ("geteuid", Fgeteuid, args, ,
@@ -559,7 +559,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::geteuid ());
+  return ovl (octave::syscalls::geteuid ());
 }
 
 DEFUNX ("getuid", Fgetuid, args, ,
@@ -572,7 +572,7 @@
   if (args.length () != 0)
     print_usage ();
 
-  return ovl (octave_syscalls::getuid ());
+  return ovl (octave::syscalls::getuid ());
 }
 
 DEFUNX ("kill", Fkill, args, ,
@@ -606,7 +606,7 @@
 
   std::string msg;
 
-  int status = octave_syscalls::kill (pid, sig, msg);
+  int status = octave::syscalls::kill (pid, sig, msg);
 
   return ovl (status, msg);
 }
@@ -725,7 +725,7 @@
   int fid[2];
   std::string msg;
 
-  int status = octave_syscalls::pipe (fid, msg);
+  int status = octave::syscalls::pipe (fid, msg);
 
   if (status < 0)
     return ovl (-1, -1, -1, msg);
@@ -1132,7 +1132,7 @@
   std::string msg;
   int status;
 
-  pid_t result = octave_syscalls::waitpid (pid, &status, options, msg);
+  pid_t result = octave::syscalls::waitpid (pid, &status, options, msg);
 
   return ovl (result, status, msg);
 }
--- a/liboctave/system/oct-env.cc	Mon Apr 11 13:53:17 2016 -0400
+++ b/liboctave/system/oct-env.cc	Mon Apr 11 14:39:02 2016 -0400
@@ -466,7 +466,7 @@
 
   if (hd.empty ())
     {
-      octave_passwd pw = octave_passwd::getpwuid (octave_syscalls::getuid ());
+      octave_passwd pw = octave_passwd::getpwuid (octave::syscalls::getuid ());
 
       hd = pw ? pw.dir () : std::string (file_ops::dir_sep_str ());
     }
@@ -479,7 +479,7 @@
 {
   if (user_name.empty ())
     {
-      octave_passwd pw = octave_passwd::getpwuid (octave_syscalls::getuid ());
+      octave_passwd pw = octave_passwd::getpwuid (octave::syscalls::getuid ());
 
       user_name = pw ? pw.name () : std::string ("unknown");
     }
--- a/liboctave/system/oct-syscalls.cc	Mon Apr 11 13:53:17 2016 -0400
+++ b/liboctave/system/oct-syscalls.cc	Mon Apr 11 14:39:02 2016 -0400
@@ -47,368 +47,378 @@
 #define NOT_SUPPORTED(nm) \
   nm ": not supported on this system"
 
-int
-octave_syscalls::dup2 (int old_fd, int new_fd)
+namespace octave
 {
-  std::string msg;
-  return dup2 (old_fd, new_fd, msg);
-}
+  namespace
+  syscalls
+  {
+    int
+    dup2 (int old_fd, int new_fd)
+    {
+      std::string msg;
+      return octave::syscalls::dup2 (old_fd, new_fd, msg);
+    }
 
-int
-octave_syscalls::dup2 (int old_fd, int new_fd, std::string& msg)
-{
-  msg = "";
+    int
+    dup2 (int old_fd, int new_fd, std::string& msg)
+    {
+      msg = "";
 
-  int status = -1;
+      int status = -1;
 
 #if defined (HAVE_DUP2)
-  status = gnulib::dup2 (old_fd, new_fd);
+      status = gnulib::dup2 (old_fd, new_fd);
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("dup2");
+      msg = NOT_SUPPORTED ("dup2");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-int
-octave_syscalls::execvp (const std::string& file, const string_vector& argv)
-{
-  std::string msg;
-  return execvp (file, argv, msg);
-}
+    int
+    execvp (const std::string& file, const string_vector& argv)
+    {
+      std::string msg;
+      return octave::syscalls::execvp (file, argv, msg);
+    }
 
-int
-octave_syscalls::execvp (const std::string& file, const string_vector& args,
-                         std::string& msg)
-{
-  msg = "";
+    int
+    execvp (const std::string& file, const string_vector& args,
+            std::string& msg)
+    {
+      msg = "";
 
-  int status = -1;
+      int status = -1;
 
 #if defined (HAVE_EXECVP)
-  char **argv = args.c_str_vec ();
+      char **argv = args.c_str_vec ();
 
-  status = ::execvp (file.c_str (), argv);
+      status = ::execvp (file.c_str (), argv);
 
-  string_vector::delete_c_str_vec (argv);
+      string_vector::delete_c_str_vec (argv);
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("execvp");
+      msg = NOT_SUPPORTED ("execvp");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::fork (std::string& msg)
-{
-  pid_t status = -1;
+    pid_t
+    fork (std::string& msg)
+    {
+      pid_t status = -1;
 
 #if defined (HAVE_FORK)
-  status = ::fork ();
+      status = ::fork ();
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("fork");
+      msg = NOT_SUPPORTED ("fork");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::vfork (std::string& msg)
-{
-  pid_t status = -1;
+    pid_t
+    vfork (std::string& msg)
+    {
+      pid_t status = -1;
 
 #if defined (HAVE_VFORK) || defined (HAVE_FORK)
 #  if defined (HAVE_VFORK)
-  status = ::vfork ();
+      status = ::vfork ();
 #  else
-  status = ::fork ();
+      status = ::fork ();
 #  endif
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("vfork");
+      msg = NOT_SUPPORTED ("vfork");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::getpgrp (std::string& msg)
-{
-  pid_t status = -1;
+    pid_t
+    getpgrp (std::string& msg)
+    {
+      pid_t status = -1;
 
 #if defined (HAVE_GETPGRP)
-  status = ::getpgrp ();
+      status = ::getpgrp ();
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("getpgrp");
+      msg = NOT_SUPPORTED ("getpgrp");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::getpid (void)
-{
+    pid_t
+    getpid (void)
+    {
 #if defined (HAVE_GETPID)
-  return ::getpid ();
+      return ::getpid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-pid_t
-octave_syscalls::getppid (void)
-{
+    pid_t
+    getppid (void)
+    {
 #if defined (HAVE_GETPPID)
-  return ::getppid ();
+      return ::getppid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-gid_t
-octave_syscalls::getgid (void)
-{
+    gid_t
+    getgid (void)
+    {
 #if defined (HAVE_GETGID)
-  return ::getgid ();
+      return ::getgid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-gid_t
-octave_syscalls::getegid (void)
-{
+    gid_t
+    getegid (void)
+    {
 #if defined (HAVE_GETEGID)
-  return ::getegid ();
+      return ::getegid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-uid_t
-octave_syscalls::getuid (void)
-{
+    uid_t
+    getuid (void)
+    {
 #if defined (HAVE_GETUID)
-  return ::getuid ();
+      return ::getuid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-uid_t
-octave_syscalls::geteuid (void)
-{
+    uid_t
+    geteuid (void)
+    {
 #if defined (HAVE_GETEUID)
-  return ::geteuid ();
+      return ::geteuid ();
 #else
-  return 0;
+      return 0;
 #endif
-}
+    }
 
-int
-octave_syscalls::pipe (int *fildes)
-{
-  std::string msg;
-  return pipe (fildes, msg);
-}
+    int
+    pipe (int *fildes)
+    {
+      std::string msg;
+      return octave::syscalls::pipe (fildes, msg);
+    }
 
-int
-octave_syscalls::pipe (int *fildes, std::string& msg)
-{
-  msg = "";
+    int
+    pipe (int *fildes, std::string& msg)
+    {
+      msg = "";
 
-  int status = -1;
+      int status = -1;
 
-  status = gnulib::pipe (fildes);
+      status = gnulib::pipe (fildes);
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::waitpid (pid_t pid, int *status, int options)
-{
-  std::string msg;
-  return waitpid (pid, status, options, msg);
-}
+    pid_t
+    waitpid (pid_t pid, int *status, int options)
+    {
+      std::string msg;
+      return octave::syscalls::waitpid (pid, status, options, msg);
+    }
 
-pid_t
-octave_syscalls::waitpid (pid_t pid, int *status, int options,
-                          std::string& msg)
-{
-  pid_t retval = -1;
-  msg = "";
+    pid_t
+    waitpid (pid_t pid, int *status, int options,
+             std::string& msg)
+    {
+      pid_t retval = -1;
+      msg = "";
 
 #if defined (HAVE_WAITPID)
-  retval = ::octave_waitpid (pid, status, options);
+      retval = ::octave_waitpid (pid, status, options);
 
-  if (retval < 0)
-    msg = gnulib::strerror (errno);
+      if (retval < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("waitpid");
+      msg = NOT_SUPPORTED ("waitpid");
 #endif
 
-  return retval;
-}
+      return retval;
+    }
 
-int
-octave_syscalls::kill (pid_t pid, int sig)
-{
-  std::string msg;
-  return kill (pid, sig, msg);
-}
+    int
+    kill (pid_t pid, int sig)
+    {
+      std::string msg;
+      return octave::syscalls::kill (pid, sig, msg);
+    }
 
-int
-octave_syscalls::kill (pid_t pid, int sig, std::string& msg)
-{
-  msg = "";
+    int
+    kill (pid_t pid, int sig, std::string& msg)
+    {
+      msg = "";
 
-  int status = -1;
+      int status = -1;
 
 #if defined (HAVE_KILL)
-  status = ::kill (pid, sig);
+      status = ::kill (pid, sig);
 
-  if (status < 0)
-    msg = gnulib::strerror (errno);
+      if (status < 0)
+        msg = gnulib::strerror (errno);
 #else
-  msg = NOT_SUPPORTED ("kill");
+      msg = NOT_SUPPORTED ("kill");
 #endif
 
-  return status;
-}
+      return status;
+    }
 
-pid_t
-octave_syscalls::popen2 (const std::string& cmd, const string_vector& args,
-                         bool sync_mode, int *fildes)
-{
-  std::string msg;
-  bool interactive = false;
-  return popen2 (cmd, args, sync_mode, fildes, msg, interactive);
-}
+    pid_t
+    popen2 (const std::string& cmd, const string_vector& args,
+            bool sync_mode, int *fildes)
+    {
+      std::string msg;
+      bool interactive = false;
+      return octave::syscalls::popen2 (cmd, args, sync_mode, fildes, msg,
+                                       interactive);
+    }
 
-pid_t
-octave_syscalls::popen2 (const std::string& cmd, const string_vector& args,
-                         bool sync_mode, int *fildes, std::string& msg)
-{
-  bool interactive = false;
-  return popen2 (cmd, args, sync_mode, fildes, msg, interactive);
-}
+    pid_t
+    popen2 (const std::string& cmd, const string_vector& args,
+            bool sync_mode, int *fildes, std::string& msg)
+    {
+      bool interactive = false;
+      return octave::syscalls::popen2 (cmd, args, sync_mode, fildes, msg,
+                                       interactive);
+    }
 
-pid_t
-octave_syscalls::popen2 (const std::string& cmd, const string_vector& args,
-                         bool sync_mode, int *fildes, std::string& msg,
-                         bool &interactive)
-{
+    pid_t
+    popen2 (const std::string& cmd, const string_vector& args,
+            bool sync_mode, int *fildes, std::string& msg,
+            bool &interactive)
+    {
 #if defined (__WIN32__) && ! defined (__CYGWIN__)
-  return ::octave_popen2 (cmd, args, sync_mode, fildes, msg);
+      return ::octave_popen2 (cmd, args, sync_mode, fildes, msg);
 #else
-  pid_t pid;
-  int child_stdin[2], child_stdout[2];
+      pid_t pid;
+      int child_stdin[2], child_stdout[2];
 
-  if (pipe (child_stdin, msg) == 0)
-    {
-      if (pipe (child_stdout, msg) == 0)
+      if (pipe (child_stdin, msg) == 0)
         {
-          pid = fork (msg);
-          if (pid < 0)
-            msg = "popen2: process creation failed -- " + msg;
-          else if (pid == 0)
+          if (pipe (child_stdout, msg) == 0)
             {
-              std::string child_msg;
+              pid = fork (msg);
+              if (pid < 0)
+                msg = "popen2: process creation failed -- " + msg;
+              else if (pid == 0)
+                {
+                  std::string child_msg;
+
+                  interactive = false;
 
-              interactive = false;
-
-              // Child process
-              gnulib::close (child_stdin[1]);
-              gnulib::close (child_stdout[0]);
+                  // Child process
+                  gnulib::close (child_stdin[1]);
+                  gnulib::close (child_stdout[0]);
 
-              if (dup2 (child_stdin[0], STDIN_FILENO) >= 0)
-                {
-                  gnulib::close (child_stdin[0]);
-                  if (dup2 (child_stdout[1], STDOUT_FILENO) >= 0)
+                  if (dup2 (child_stdin[0], STDIN_FILENO) >= 0)
                     {
-                      gnulib::close (child_stdout[1]);
-                      if (execvp (cmd, args, child_msg) < 0)
-                        child_msg = "popen2 (child): unable to start process -- " + child_msg;
+                      gnulib::close (child_stdin[0]);
+                      if (dup2 (child_stdout[1], STDOUT_FILENO) >= 0)
+                        {
+                          gnulib::close (child_stdout[1]);
+                          if (execvp (cmd, args, child_msg) < 0)
+                            child_msg = "popen2 (child): unable to start process -- " + child_msg;
+                        }
+                      else
+                        child_msg = "popen2 (child): file handle duplication failed -- " + child_msg;
                     }
                   else
                     child_msg = "popen2 (child): file handle duplication failed -- " + child_msg;
+
+                  (*current_liboctave_error_handler) (child_msg.c_str ());
+
+                  exit (0);
                 }
               else
-                child_msg = "popen2 (child): file handle duplication failed -- " + child_msg;
+                {
+                  // Parent process
+                  gnulib::close (child_stdin[0]);
+                  gnulib::close (child_stdout[1]);
 
-              (*current_liboctave_error_handler) (child_msg.c_str ());
-
-              exit (0);
+#if defined (F_SETFL) && defined (O_NONBLOCK)
+                  if (! sync_mode
+                      && octave::syscalls::fcntl (child_stdout[0], F_SETFL,
+                                                  O_NONBLOCK, msg) < 0)
+                    msg = "popen2: error setting file mode -- " + msg;
+                  else
+#endif
+                    {
+                      fildes[0] = child_stdin[1];
+                      fildes[1] = child_stdout[0];
+                      return pid;
+                    }
+                }
+              gnulib::close (child_stdout[0]);
+              gnulib::close (child_stdout[1]);
             }
           else
-            {
-              // Parent process
-              gnulib::close (child_stdin[0]);
-              gnulib::close (child_stdout[1]);
+            msg = "popen2: pipe creation failed -- " + msg;
 
-#if defined (F_SETFL) && defined (O_NONBLOCK)
-              if (! sync_mode && octave_fcntl (child_stdout[0], F_SETFL,
-                                               O_NONBLOCK, msg) < 0)
-                msg = "popen2: error setting file mode -- " + msg;
-              else
-#endif
-                {
-                  fildes[0] = child_stdin[1];
-                  fildes[1] = child_stdout[0];
-                  return pid;
-                }
-            }
-          gnulib::close (child_stdout[0]);
-          gnulib::close (child_stdout[1]);
+          gnulib::close (child_stdin[0]);
+          gnulib::close (child_stdin[1]);
         }
       else
         msg = "popen2: pipe creation failed -- " + msg;
 
-      gnulib::close (child_stdin[0]);
-      gnulib::close (child_stdin[1]);
-    }
-  else
-    msg = "popen2: pipe creation failed -- " + msg;
-
-  return -1;
+      return -1;
 #endif
-}
+    }
+
+    int
+    fcntl (int fd, int cmd, long arg)
+    {
+      std::string msg;
+      return octave::syscalls::fcntl (fd, cmd, arg, msg);
+    }
 
-int
-octave_fcntl (int fd, int cmd, long arg)
-{
-  std::string msg;
-  return octave_fcntl (fd, cmd, arg, msg);
+    int
+    fcntl (int fd, int cmd, long arg, std::string& msg)
+    {
+      msg = "";
+
+      int status = -1;
+
+      status = gnulib::fcntl (fd, cmd, arg);
+
+      if (status < 0)
+        msg = gnulib::strerror (errno);
+
+      return status;
+    }
+  }
 }
-
-int
-octave_fcntl (int fd, int cmd, long arg, std::string& msg)
-{
-  msg = "";
-
-  int status = -1;
-
-  status = gnulib::fcntl (fd, cmd, arg);
-
-  if (status < 0)
-    msg = gnulib::strerror (errno);
-
-  return status;
-}
--- a/liboctave/system/oct-syscalls.h	Mon Apr 11 13:53:17 2016 -0400
+++ b/liboctave/system/oct-syscalls.h	Mon Apr 11 14:39:02 2016 -0400
@@ -31,47 +31,61 @@
 
 #include <sys/types.h>
 
-struct
-OCTAVE_API
-octave_syscalls
+namespace
+octave
 {
-  static int dup2 (int, int);
-  static int dup2 (int, int, std::string&);
+  namespace
+  syscalls
+  {
+    extern OCTAVE_API int dup2 (int, int);
+    extern OCTAVE_API int dup2 (int, int, std::string&);
+
+    extern OCTAVE_API int execvp (const std::string&, const string_vector&);
+    extern OCTAVE_API int execvp (const std::string&, const string_vector&,
+                                  std::string&);
 
-  static int execvp (const std::string&, const string_vector&);
-  static int execvp (const std::string&, const string_vector&, std::string&);
+    extern OCTAVE_API pid_t fork (std::string&);
+
+    extern OCTAVE_API pid_t vfork (std::string&);
+
+    extern OCTAVE_API pid_t getpgrp (std::string&);
 
-  static pid_t fork (std::string&);
-  static pid_t vfork (std::string&);
+    extern OCTAVE_API pid_t getpid (void);
+
+    extern OCTAVE_API pid_t getppid (void);
 
-  static pid_t getpgrp (std::string&);
+    extern OCTAVE_API gid_t getgid (void);
 
-  static pid_t getpid (void);
-  static pid_t getppid (void);
+    extern OCTAVE_API gid_t getegid (void);
 
-  static gid_t getgid (void);
-  static gid_t getegid (void);
+    extern OCTAVE_API uid_t getuid (void);
+
+    extern OCTAVE_API uid_t geteuid (void);
 
-  static uid_t getuid (void);
-  static uid_t geteuid (void);
+    extern OCTAVE_API int pipe (int *);
+    extern OCTAVE_API int pipe (int *, std::string&);
 
-  static int pipe (int *);
-  static int pipe (int *, std::string&);
+    extern OCTAVE_API pid_t waitpid (pid_t, int *status, int);
+    extern OCTAVE_API pid_t waitpid (pid_t, int *status, int, std::string&);
+
+    extern OCTAVE_API int kill (pid_t, int);
+    extern OCTAVE_API int kill (pid_t, int, std::string&);
 
-  static pid_t waitpid (pid_t, int *status, int);
-  static pid_t waitpid (pid_t, int *status, int, std::string&);
+    extern OCTAVE_API pid_t
+    popen2 (const std::string&, const string_vector&, bool, int *);
 
-  static int kill (pid_t, int);
-  static int kill (pid_t, int, std::string&);
+    extern OCTAVE_API pid_t
+    popen2 (const std::string&, const string_vector&, bool, int *,
+            std::string&);
 
-  static pid_t popen2 (const std::string&, const string_vector&, bool, int *);
-  static pid_t popen2 (const std::string&, const string_vector&, bool, int *,
-                       std::string&);
-  static pid_t popen2 (const std::string&, const string_vector&, bool, int *,
-                       std::string&, bool &interactive);
-};
+    extern OCTAVE_API pid_t
+    popen2 (const std::string&, const string_vector&, bool, int *,
+            std::string&, bool &interactive);
+
+    extern OCTAVE_API int fcntl (int, int, long);
+    extern OCTAVE_API int fcntl (int, int, long, std::string&);
+  }
+}
 
 #endif
 
-extern OCTAVE_API int octave_fcntl (int, int, long);
-extern OCTAVE_API int octave_fcntl (int, int, long, std::string&);