4bdb5d191da9ed81b9b14b762596a9681a64fecc
[kopensolaris-gnu/glibc.git] / pwd / getpwent.c
1 /* Copyright (C) 1991 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 1, or (at your option)
7 any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with the GNU C Library; see the file COPYING.  If not, write to
16 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
17
18 #include <ansidecl.h>
19 #include <stddef.h>
20 #include <stdio.h>
21 #include <pwd.h>
22
23 static FILE *stream = NULL;
24
25 /* Rewind the stream.  */
26 void
27 DEFUN_VOID(setpwent)
28 {
29   if (stream != NULL)
30     rewind(stream);
31 }
32
33
34 /* Close the stream.  */
35 void
36 DEFUN_VOID(endpwent)
37 {
38   if (stream != NULL)
39     {
40       (void) fclose(stream);
41       stream = NULL;
42     }
43 }
44
45
46 /* Return one entry from the password file.  */
47 struct passwd *
48 DEFUN_VOID(getpwent)
49 {
50   static PTR info = NULL;
51   if (info == NULL)
52     {
53       info = __pwdalloc();
54       if (info == NULL)
55         return(NULL);
56     }
57
58   if (stream == NULL)
59     {
60       stream = __pwdopen();
61       if (stream == NULL)
62         return(NULL);
63     }
64
65   return(__pwdread(stream, info));
66 }