File: bufio.h

package info (click to toggle)
got 0.119-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,448 kB
  • sloc: ansic: 124,378; sh: 50,814; yacc: 4,353; makefile: 2,241; perl: 357
file content (77 lines) | stat: -rw-r--r-- 2,707 bytes parent folder | download | duplicates (2)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * bufio.h was written by Omar Polo <op@omarpolo.com>
 *
 * This is free and unencumbered software released into the public domain.
 *
 * Anyone is free to copy, modify, publish, use, compile, sell, or
 * distribute this software, either in source code form or as a compiled
 * binary, for any purpose, commercial or non-commercial, and by any
 * means.
 *
 * In jurisdictions that recognize copyright laws, the author or authors
 * of this software dedicate any and all copyright interest in the
 * software to the public domain. We make this dedication for the benefit
 * of the public at large and to the detriment of our heirs and
 * successors. We intend this dedication to be an overt act of
 * relinquishment in perpetuity of all present and future rights to this
 * software under copyright law.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

struct tls;

#define BIO_CHUNK	(64 * 1024)
struct buf {
	uint8_t		*buf;
	size_t		 len;
	size_t		 cap;
	size_t		 cur;
};

struct bufio {
	int		 fd;
	struct tls	*ctx;
	int		 wantev;
	struct buf	 wbuf;
	struct buf	 rbuf;
};

#define	BUFIO_WANT_READ		0x1
#define	BUFIO_WANT_WRITE	0x2

int		 buf_init(struct buf *);
int		 buf_has_line(struct buf *, const char *);
char		*buf_getdelim(struct buf *, const char *, size_t *);
void		 buf_drain(struct buf *, size_t);
void		 buf_drain_line(struct buf *, const char *);
void		 buf_free(struct buf *);

int		 bufio_init(struct bufio *);
void		 bufio_free(struct bufio *);
int		 bufio_close(struct bufio *);
int		 bufio_reset(struct bufio *);
void		 bufio_set_fd(struct bufio *, int);
int		 bufio_starttls(struct bufio *, const char *, int,
		    const uint8_t *, size_t, const uint8_t *, size_t);
int		 bufio_ev(struct bufio *);
int		 bufio_handshake(struct bufio *);
ssize_t		 bufio_read(struct bufio *);
size_t		 bufio_drain(struct bufio *, void *, size_t);
ssize_t		 bufio_write(struct bufio *);
const char	*bufio_io_err(struct bufio *);
int		 bufio_compose(struct bufio *, const void *, size_t);
int		 bufio_compose_str(struct bufio *, const char *);
int		 bufio_compose_fmt(struct bufio *, const char *, ...)
		    __attribute__((__format__ (printf, 2, 3)));
void		 bufio_rewind_cursor(struct bufio *);

/* callbacks for pdjson */
int		 bufio_get_cb(void *);
int		 bufio_peek_cb(void *);