Blame


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