Initial revision
authorroland <roland>
Wed, 30 Jan 1991 09:57:09 +0000 (09:57 +0000)
committerroland <roland>
Wed, 30 Jan 1991 09:57:09 +0000 (09:57 +0000)
pwd/Makefile [new file with mode: 0644]
pwd/fgetpwent.c [new file with mode: 0644]
pwd/getpw.c [new file with mode: 0644]
pwd/getpwent.c [new file with mode: 0644]
pwd/getpwnam.c [new file with mode: 0644]
pwd/putpwent.c [new file with mode: 0644]
pwd/pwdopen.c [new file with mode: 0644]
sysdeps/posix/signal.c [new file with mode: 0644]

diff --git a/pwd/Makefile b/pwd/Makefile
new file mode 100644 (file)
index 0000000..a095df1
--- /dev/null
@@ -0,0 +1,25 @@
+# Copyright (C) 1991 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with the GNU C Library; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+#
+#      Sub-makefile for pwd portion of the library.
+#
+subdir := pwd
+
+routines := pwdopen pwdread fgetpwent getpw getpwent getpwnam getpwuid putpwent
+
+include ../Rules
diff --git a/pwd/fgetpwent.c b/pwd/fgetpwent.c
new file mode 100644 (file)
index 0000000..eb2d02c
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <pwd.h>
+
+/* Read one entry from the given stream.  */
+struct passwd *
+DEFUN(fgetpwent, (stream), FILE *stream)
+{
+  static PTR info = NULL;
+  if (info == NULL)
+    {
+      info = __pwdalloc();
+      if (info == NULL)
+       return(NULL);
+    }
+
+  return(__pwdread(stream, info));
+}
diff --git a/pwd/getpw.c b/pwd/getpw.c
new file mode 100644 (file)
index 0000000..642c149
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <pwd.h>
+
+
+/* Re-construct the password-file line for the given uid
+   in the given buffer.  This knows the format that the caller
+   will expect, but this need not be the format of the password file.  */
+int
+DEFUN(getpw, (uid, buf), int uid AND register char *buf)
+{
+  register struct passwd *p;
+
+  if (uid < 0 || buf == NULL)
+    {
+      errno = EINVAL;
+      return(-1);
+    }
+
+  p = getpwuid(uid);
+  if (p == NULL)
+    return(-1);
+
+  if (sprintf(buf, "%s:%s:%d:%d:%s:%s:%s", p->pw_name, p->pw_passwd,
+             p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell) < 0)
+    return(-1);
+
+  return(0);
+}
diff --git a/pwd/getpwent.c b/pwd/getpwent.c
new file mode 100644 (file)
index 0000000..4bdb5d1
--- /dev/null
@@ -0,0 +1,66 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <pwd.h>
+
+static FILE *stream = NULL;
+
+/* Rewind the stream.  */
+void
+DEFUN_VOID(setpwent)
+{
+  if (stream != NULL)
+    rewind(stream);
+}
+
+
+/* Close the stream.  */
+void
+DEFUN_VOID(endpwent)
+{
+  if (stream != NULL)
+    {
+      (void) fclose(stream);
+      stream = NULL;
+    }
+}
+
+
+/* Return one entry from the password file.  */
+struct passwd *
+DEFUN_VOID(getpwent)
+{
+  static PTR info = NULL;
+  if (info == NULL)
+    {
+      info = __pwdalloc();
+      if (info == NULL)
+       return(NULL);
+    }
+
+  if (stream == NULL)
+    {
+      stream = __pwdopen();
+      if (stream == NULL)
+       return(NULL);
+    }
+
+  return(__pwdread(stream, info));
+}
diff --git a/pwd/getpwnam.c b/pwd/getpwnam.c
new file mode 100644 (file)
index 0000000..5110f60
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <pwd.h>
+
+/* Search for an entry with a matching name.  */
+struct passwd *
+DEFUN(getpwnam, (name), register CONST char *name)
+{
+  static PTR info = NULL;
+  register FILE *stream;
+  register struct passwd *p;
+
+  if (info == NULL)
+    {
+      info = __pwdalloc();
+      if (info == NULL)
+       return(NULL);
+    }
+
+  stream = __pwdopen();
+  if (stream == NULL)
+    return(NULL);
+
+  while ((p = __pwdread(stream, info)) != NULL)
+    if (!strcmp(p->pw_name, name))
+      break;
+
+  (void) fclose(stream);
+  return(p);
+}
diff --git a/pwd/putpwent.c b/pwd/putpwent.c
new file mode 100644 (file)
index 0000000..41ee1d7
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <pwd.h>
+
+
+/* Write an entry to the given stream.
+   This must know the format of the password file.  */
+int
+DEFUN(putpwent, (p, stream), register CONST struct passwd *p AND FILE *stream)
+{
+  if (p == NULL || stream == NULL)
+    {
+      errno = EINVAL;
+      return(-1);
+    }
+
+  if (fprintf(stream, "%s:%s:%d:%d:%s:%s\n", p->pw_name, p->pw_passwd,
+             p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_shell) < 0)
+    return(-1);
+
+  return(0);
+}
diff --git a/pwd/pwdopen.c b/pwd/pwdopen.c
new file mode 100644 (file)
index 0000000..f3c54fb
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdio.h>
+#include <pwd.h>
+
+/* Return a new stream open on the password file.  */
+FILE *
+DEFUN_VOID(__pwdopen)
+{
+  return(fopen("/etc/passwd", "r"));
+}
diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c
new file mode 100644 (file)
index 0000000..ee6ee7f
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <signal.h>
+
+
+/* Set the handler for the signal SIG to HANDLER,
+   returning the old handler, or SIG_ERR on error.  */
+__sighandler_t
+DEFUN(signal, (sig, handler), int sig AND __sighandler_t handler)
+{
+  struct sigaction act, oact;
+
+  if (handler == SIG_ERR)
+    {
+      errno = EINVAL;
+      return SIG_ERR;
+    }
+
+  act.sa_handler = handler;
+  if (__sigemptyset(&act.sa_mask) < 0)
+    return SIG_ERR;
+  act.sa_flags = 0;
+  if (__sigaction(sig, &act, &oact) < 0)
+    return SIG_ERR;
+
+  return oact.sa_handler;
+}