1 #ifndef _FZP_H
2 #define _FZP_H
3 
4 #include <zlib.h>
5 
6 enum fzp_type
7 {
8 	FZP_FILE=0,
9 	FZP_COMPRESSED
10 };
11 
12 struct fzp
13 {
14 	enum fzp_type type;
15 	union
16 	{
17 		FILE *fp;
18 		gzFile zp;
19 	};
20 	char *buf;
21 	size_t s;
22 };
23 
24 extern struct fzp *fzp_open(const char *path, const char *mode);
25 extern struct fzp *fzp_gzopen(const char *path, const char *mode);
26 extern int fzp_close(struct fzp **fzp);
27 
28 extern int fzp_read(struct fzp *fzp, void *ptr, size_t nmemb);
29 extern size_t fzp_write(struct fzp *fzp, const void *ptr, size_t nmemb);
30 extern int fzp_eof(struct fzp *fzp);
31 extern int fzp_flush(struct fzp *fzp);
32 
33 extern int fzp_seek(struct fzp *fzp, off_t offset, int whence);
34 extern off_t fzp_tell(struct fzp *fzp);
35 
36 #ifndef HAVE_WIN32
37 extern int fzp_truncate(const char *path, enum fzp_type type, off_t length,
38 	int compression);
39 #endif
40 
41 extern int fzp_printf(struct fzp *fzp, const char *format, ...);
42 
43 extern void fzp_setlinebuf(struct fzp *fzp);
44 
45 extern char *fzp_gets(struct fzp *fzp, char *s, int size);
46 extern int fzp_fileno(struct fzp *fzp);
47 
48 extern struct fzp *fzp_dopen(int fd, const char *mode);
49 extern struct fzp *fzp_gzdopen(int fd, const char *mode);
50 
51 extern void fzp_ERR_print_errors_fp(struct fzp *fzp);
52 extern X509 *fzp_PEM_read_X509(struct fzp *fzp);
53 
54 extern int fzp_read_ensure(struct fzp *fzp, void *ptr, size_t nmemb,
55 	const char *func);
56 
57 #endif
58