xref: /openbsd/usr.sbin/lpd/iobuf.h (revision 3b188dab)
1*3b188dabSeric /*	$OpenBSD: iobuf.h,v 1.1.1.1 2018/04/27 16:14:36 eric Exp $	*/
2*3b188dabSeric 
3*3b188dabSeric /*
4*3b188dabSeric  * Copyright (c) 2017 Eric Faurot <eric@openbsd.org>
5*3b188dabSeric  *
6*3b188dabSeric  * Permission to use, copy, modify, and distribute this software for any
7*3b188dabSeric  * purpose with or without fee is hereby granted, provided that the above
8*3b188dabSeric  * copyright notice and this permission notice appear in all copies.
9*3b188dabSeric  *
10*3b188dabSeric  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11*3b188dabSeric  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12*3b188dabSeric  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13*3b188dabSeric  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14*3b188dabSeric  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15*3b188dabSeric  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16*3b188dabSeric  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*3b188dabSeric  */
18*3b188dabSeric 
19*3b188dabSeric struct ioqbuf {
20*3b188dabSeric 	struct ioqbuf	*next;
21*3b188dabSeric 	char		*buf;
22*3b188dabSeric 	size_t		 size;
23*3b188dabSeric 	size_t		 wpos;
24*3b188dabSeric 	size_t		 rpos;
25*3b188dabSeric };
26*3b188dabSeric 
27*3b188dabSeric struct iobuf {
28*3b188dabSeric 	char		*buf;
29*3b188dabSeric 	size_t		 max;
30*3b188dabSeric 	size_t		 size;
31*3b188dabSeric 	size_t		 wpos;
32*3b188dabSeric 	size_t		 rpos;
33*3b188dabSeric 
34*3b188dabSeric 	size_t		 queued;
35*3b188dabSeric 	struct ioqbuf	*outq;
36*3b188dabSeric 	struct ioqbuf	*outqlast;
37*3b188dabSeric };
38*3b188dabSeric 
39*3b188dabSeric #define IOBUF_WANT_READ		-1
40*3b188dabSeric #define IOBUF_WANT_WRITE	-2
41*3b188dabSeric #define IOBUF_CLOSED		-3
42*3b188dabSeric #define IOBUF_ERROR		-4
43*3b188dabSeric #define IOBUF_SSLERROR		-5
44*3b188dabSeric 
45*3b188dabSeric int	iobuf_init(struct iobuf *, size_t, size_t);
46*3b188dabSeric void	iobuf_clear(struct iobuf *);
47*3b188dabSeric 
48*3b188dabSeric int	iobuf_extend(struct iobuf *, size_t);
49*3b188dabSeric void	iobuf_normalize(struct iobuf *);
50*3b188dabSeric void	iobuf_drop(struct iobuf *, size_t);
51*3b188dabSeric size_t	iobuf_space(struct iobuf *);
52*3b188dabSeric size_t	iobuf_len(struct iobuf *);
53*3b188dabSeric size_t	iobuf_left(struct iobuf *);
54*3b188dabSeric char   *iobuf_data(struct iobuf *);
55*3b188dabSeric char   *iobuf_getline(struct iobuf *, size_t *);
56*3b188dabSeric ssize_t	iobuf_read(struct iobuf *, int);
57*3b188dabSeric ssize_t	iobuf_read_ssl(struct iobuf *, void *);
58*3b188dabSeric 
59*3b188dabSeric size_t  iobuf_queued(struct iobuf *);
60*3b188dabSeric void*   iobuf_reserve(struct iobuf *, size_t);
61*3b188dabSeric int	iobuf_queue(struct iobuf *, const void*, size_t);
62*3b188dabSeric int	iobuf_queuev(struct iobuf *, const struct iovec *, int);
63*3b188dabSeric int	iobuf_fqueue(struct iobuf *, const char *, ...);
64*3b188dabSeric int	iobuf_vfqueue(struct iobuf *, const char *, va_list);
65*3b188dabSeric int	iobuf_flush(struct iobuf *, int);
66*3b188dabSeric int	iobuf_flush_ssl(struct iobuf *, void *);
67*3b188dabSeric ssize_t	iobuf_write(struct iobuf *, int);
68*3b188dabSeric ssize_t	iobuf_write_ssl(struct iobuf *, void *);
69