summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/otherlibs/unix/getpw.c
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/otherlibs/unix/getpw.c')
-rw-r--r--ocaml-binary-annot/otherlibs/unix/getpw.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/ocaml-binary-annot/otherlibs/unix/getpw.c b/ocaml-binary-annot/otherlibs/unix/getpw.c
new file mode 100644
index 0000000000..eba9d6c3c3
--- /dev/null
+++ b/ocaml-binary-annot/otherlibs/unix/getpw.c
@@ -0,0 +1,65 @@
+/***********************************************************************/
+/* */
+/* Objective Caml */
+/* */
+/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
+/* */
+/* Copyright 1996 Institut National de Recherche en Informatique et */
+/* en Automatique. All rights reserved. This file is distributed */
+/* under the terms of the GNU Library General Public License, with */
+/* the special exception on linking described in file ../../LICENSE. */
+/* */
+/***********************************************************************/
+
+/* $Id$ */
+
+#include <mlvalues.h>
+#include <alloc.h>
+#include <memory.h>
+#include <fail.h>
+#include "unixsupport.h"
+#include <pwd.h>
+
+static value alloc_passwd_entry(struct passwd *entry)
+{
+ value res;
+ value name = Val_unit, passwd = Val_unit, gecos = Val_unit;
+ value dir = Val_unit, shell = Val_unit;
+
+ Begin_roots5 (name, passwd, gecos, dir, shell);
+ name = copy_string(entry->pw_name);
+ passwd = copy_string(entry->pw_passwd);
+#ifndef __BEOS__
+ gecos = copy_string(entry->pw_gecos);
+#else
+ gecos = copy_string("");
+#endif
+ dir = copy_string(entry->pw_dir);
+ shell = copy_string(entry->pw_shell);
+ res = alloc_small(7, 0);
+ Field(res,0) = name;
+ Field(res,1) = passwd;
+ Field(res,2) = Val_int(entry->pw_uid);
+ Field(res,3) = Val_int(entry->pw_gid);
+ Field(res,4) = gecos;
+ Field(res,5) = dir;
+ Field(res,6) = shell;
+ End_roots();
+ return res;
+}
+
+CAMLprim value unix_getpwnam(value name)
+{
+ struct passwd * entry;
+ entry = getpwnam(String_val(name));
+ if (entry == (struct passwd *) NULL) raise_not_found();
+ return alloc_passwd_entry(entry);
+}
+
+CAMLprim value unix_getpwuid(value uid)
+{
+ struct passwd * entry;
+ entry = getpwuid(Int_val(uid));
+ if (entry == (struct passwd *) NULL) raise_not_found();
+ return alloc_passwd_entry(entry);
+}