1 /* $OpenBSD: buffer.h,v 1.11 2002/03/04 17:27:39 stevesk Exp $ */
2
3 #ifndef _BUFFER_H
4 #define _BUFFER_H
5
6 #pragma ident "%Z%%M% %I% %E% SMI"
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12
13 /*
14 * Author: Tatu Ylonen <ylo@cs.hut.fi>
15 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
16 * All rights reserved
17 * Code for manipulating FIFO buffers.
18 *
19 * As far as I am concerned, the code I have written for this software
20 * can be used freely for any purpose. Any derived versions of this
21 * software must be clearly marked as such, and if the derived work is
22 * incompatible with the protocol description in the RFC file, it must be
23 * called by a name other than "ssh" or "Secure Shell".
24 */
25
26 typedef struct {
27 u_char *buf; /* Buffer for data. */
28 u_int alloc; /* Number of bytes allocated for data. */
29 u_int offset; /* Offset of first byte containing data. */
30 u_int end; /* Offset of last byte containing data. */
31 } Buffer;
32
33 void buffer_init(Buffer *);
34 void buffer_clear(Buffer *);
35 void buffer_free(Buffer *);
36
37 u_int buffer_len(Buffer *);
38 void *buffer_ptr(Buffer *);
39
40 void buffer_append(Buffer *, const void *, u_int);
41 void *buffer_append_space(Buffer *, u_int);
42
43 int buffer_check_alloc(Buffer *, u_int);
44
45 void buffer_get(Buffer *, void *, u_int);
46
47 void buffer_consume(Buffer *, u_int);
48 void buffer_consume_end(Buffer *, u_int);
49
50 void buffer_dump(Buffer *);
51
52 int buffer_get_ret(Buffer *, void *, u_int);
53 int buffer_consume_ret(Buffer *, u_int);
54 int buffer_consume_end_ret(Buffer *, u_int);
55
56 #ifdef __cplusplus
57 }
58 #endif
59
60 #endif /* _BUFFER_H */