summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libcruft/entlib.h
blob: 2659d542e6ae3897f98db96a1632e66a7e19a7ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
 * dietlibc/lib/entlib.h - Generic delimited-line parsing library header
 *
 * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
 *
 * This is a brand new implementation, based on the interface
 * described in man-pages-1.34-1mdk man pages package.
 */

#ifndef __ENTLIB_H
#define __ENTLIB_H

#include <sys/types.h>	/* for open(2), lseek(2) */
#include <sys/stat.h>	/* for open(2) */
#include <fcntl.h>	/* for open(2) */
#include <unistd.h>	/* for close(2), lseek(2) */
#include <stdlib.h>	/* for calloc(3), free(3) */
#include <errno.h>	/* for errno */
#include <string.h>	/* for memmove(3) */
#include <stdlib.h>	/* for atoi(3) */
#include <paths.h>	/* for the file locations */

#include <pwd.h>	/* for struct passwd */
#include <grp.h>	/* for struct group */
#include <shadow.h>	/* for struct spwd */

/* should be a multiple of 64 to create decent alignment */
#define __ENT_BUFSIZ (64 * 2)
#define __ENT_RAW_BUFSIZ (__ENT_BUFSIZ + 2) /* some overlap required */

struct __ent_state {
	char ent_buf[__ENT_RAW_BUFSIZ];	/* raw file data buffer */
	unsigned int buflen;		/* amount of valid data in ent_buf */
	unsigned int bufptr;		/* next valid position in ent_buf */
	int fd;				/* /etc/passwd file descriptor */
};

extern int __ent_start(const char *pathname, struct __ent_state **st_ref);
extern int __ent_get_line(struct __ent_state *st);
extern int __ent_split(struct __ent_state *st, char **parts, int n_parts, int delimiter, int require_exact);
extern void __ent_set(struct __ent_state *st);
extern void __ent_end(struct __ent_state *st);

#endif /* __ENTLIB_H */