aaf84edde708416302b51eb376f0876ea9382a44
[musl] / src / passwd / getpwent_a.c
1 #include "pwf.h"
2
3 struct passwd *__getpwent_a(FILE *f, struct passwd *pw, char **line, size_t *size)
4 {
5         ssize_t l;
6         char *s;
7         for (;;) {
8                 if ((l=getline(line, size, f)) < 0) {
9                         free(*line);
10                         *line = 0;
11                         return 0;
12                 }
13                 line[0][l-1] = 0;
14
15                 s = line[0];
16                 pw->pw_name = s++;
17                 if (!(s = strchr(s, ':'))) continue;
18
19                 *s++ = 0; pw->pw_passwd = s;
20                 if (!(s = strchr(s, ':'))) continue;
21
22                 *s++ = 0; pw->pw_uid = atoi(s);
23                 if (!(s = strchr(s, ':'))) continue;
24
25                 *s++ = 0; pw->pw_gid = atoi(s);
26                 if (!(s = strchr(s, ':'))) continue;
27
28                 *s++ = 0; pw->pw_gecos = s;
29                 if (!(s = strchr(s, ':'))) continue;
30
31                 *s++ = 0; pw->pw_dir = s;
32                 if (!(s = strchr(s, ':'))) continue;
33
34                 *s++ = 0; pw->pw_shell = s;
35                 return pw;
36         }
37 }