diff src/DLD-FUNCTIONS/getgrent.cc @ 2937:9d26524e2869

[project @ 1997-05-06 05:49:53 by jwe]
author jwe
date Tue, 06 May 1997 05:55:13 +0000
parents 295f037b4b3e
children 38de16594cb4
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/getgrent.cc	Tue May 06 05:46:00 1997 +0000
+++ b/src/DLD-FUNCTIONS/getgrent.cc	Tue May 06 05:55:13 1997 +0000
@@ -30,9 +30,7 @@
 #include <sys/types.h>
 #endif
 
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
+#include "oct-group.h"
 
 #include "defun-dld.h"
 #include "error.h"
@@ -46,7 +44,7 @@
 // Group file functions.  (Why not?)
 
 static octave_value
-mk_gr_map (struct group *gr)
+mk_gr_map (const octave_group& gr)
 {
   octave_value retval;
 
@@ -54,40 +52,10 @@
     {
       Octave_map m;
 
-      m ["name"] = gr->gr_name;
-#if defined (HAVE_GR_PASSWD)
-      m ["passwd"] = gr->gr_passwd;
-#else
-      m ["passwd"] = "";
-#endif
-      m ["gid"] = static_cast<double> (gr->gr_gid);
-
-      if (gr->gr_mem)
-	{
-	  // XXX FIXME XXX -- maybe there should be a string_vector
-	  // constructor that takes a NULL terminated list of C
-	  // strings.
-
-	  char **tmp = gr->gr_mem;
-
-	  int k = 0;
-	  while (*tmp++)
-	    k++;
-
-	  if (k > 0)
-	    {
-	      tmp = gr->gr_mem;
-
-	      string_vector members (k);
-
-	      for (int i = 0; i < k; i++)
-		members[i] = tmp[i];
-
-	      m ["mem"] = members;
-	    }
-	  else
-	    m ["mem"] = "";
-	}
+      m ["name"] = gr.name ();
+      m ["passwd"] = gr.passwd ();
+      m ["gid"] = static_cast<double> (gr.gid ());
+      m ["mem"] = gr.mem ();
 
       retval = m;
     }
@@ -102,17 +70,19 @@
 \n\
 Read an entry from the group-file stream, opening it if necessary.")
 {
-  octave_value retval;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = 0.0;
 
   int nargin = args.length ();
 
   if (nargin == 0)
     {
-#ifdef HAVE_GETGRENT
-      retval = mk_gr_map (getgrent ());
-#else
-      gripe_not_supported ("getgrent");
-#endif
+      string msg;
+
+      retval(0) = mk_gr_map (octave_group::getgrent (msg));
+      retval(1) = msg;
     }
   else
     print_usage ("getgrent");
@@ -125,13 +95,15 @@
 \n\
 Search for a group entry with a matching group ID.")
 {
-  octave_value retval;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = 0.0;
 
   int nargin = args.length ();
 
   if (nargin == 1)
     {
-#ifdef HAVE_GETGRGID
       double dval = args(0).double_value ();
 
       if (! error_state)
@@ -140,14 +112,14 @@
 	    {
 	      gid_t gid = static_cast<gid_t> (dval);
 
-	      retval = mk_gr_map (getgrgid (gid));
+	      string msg;
+
+	      retval(0) = mk_gr_map (octave_group::getgrgid (gid, msg));
+	      retval(1) = msg;
 	    }
 	  else
 	    error ("getgrgid: argument must be an integer");
 	}
-#else
-      gripe_not_supported ("getgrgid");
-#endif
     }
   else
     print_usage ("getgrgid");
@@ -160,20 +132,24 @@
 \n\
 Search for group entry with a matching group name.")
 {
-  octave_value retval;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = 0.0;
 
   int nargin = args.length ();
 
   if (nargin == 1)
     {
-#ifdef HAVE_GETGRNAM
       string s = args(0).string_value ();
 
       if (! error_state)
-	retval = mk_gr_map (getgrnam (s.c_str ()));
-#else
-      gripe_not_supported ("getgrnam");
-#endif
+	{
+	  string msg;
+
+	  retval(0) = mk_gr_map (octave_group::getgrnam (s.c_str (), msg));
+	  retval(1) = msg;
+	}
     }
   else
     print_usage ("getgrnam");
@@ -186,17 +162,19 @@
 \n\
 Rewind the group-file stream.")
 {
-  octave_value retval;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = -1.0;
 
   int nargin = args.length ();
 
   if (nargin == 0)
     {
-#ifdef HAVE_SETGRENT
-      setgrent ();
-#else
-      gripe_not_supported ("setgrent");
-#endif
+      string msg;
+
+      retval(0) = static_cast<double> (octave_group::setgrent (msg));
+      retval(1) = msg;
     }
   else
     print_usage ("setgrent");
@@ -209,17 +187,19 @@
 \n\
 Close the group-file stream.")
 {
-  octave_value retval;
+  octave_value_list retval;
+
+  retval(1) = string ();
+  retval(0) = -1.0;
 
   int nargin = args.length ();
 
   if (nargin == 0)
     {
-#ifdef HAVE_ENDGRENT
-      endgrent ();
-#else
-      gripe_not_supported ("endgrent");
-#endif
+      string msg;
+
+      retval(0) = static_cast<double> (octave_group::endgrent (msg));
+      retval(1) = msg;
     }
   else
     print_usage ("endgrent");