]> pd.if.org Git - zpackage/blob - lib/buffer.h
add buffer lib files
[zpackage] / lib / buffer.h
1 #ifndef ZPM_BUFFER_H_
2 #define ZPM_BUFFER_H_ 1
3
4 #include <stdint.h>
5 #include <string.h>
6 #include <errno.h>
7
8 /* flags:
9  * 0x1 secure: zero memory when used
10  * 0x2 fixed: buffer doesn't belong to you, and size says how big it is
11  * 0x4 
12  */
13 struct zpm_buffer {
14         char *buffer;
15         size_t len;
16         size_t size;
17         int32_t error;
18         uint32_t flags;
19 };
20
21 struct zpm_buffer_reader {
22         struct zpm_buffer b;
23         size_t cursor;
24 };
25
26 uint32_t zpm_buffer_next3(struct zpm_buffer_reader *rb);
27 uint16_t zpm_buffer_next2(struct zpm_buffer_reader *rb);
28 uint8_t zpm_buffer_next(struct zpm_buffer_reader *rb);
29 void zpm_buffer_nextn(struct zpm_buffer_reader *rb, unsigned char *b, size_t n);
30
31 void zpm_buffer_init(struct zpm_buffer *b); 
32
33 /* makes sure there's at least need bytes free */
34 void zpm_buffer_expand(struct zpm_buffer *b, size_t need);
35 void zpm_buffer_free(struct zpm_buffer *b);
36 void zpm_buffer_set(struct zpm_buffer *buffer, int ch);
37 void zpm_buffer_compact(struct zpm_buffer *b);
38 void zpm_buffer_append(struct zpm_buffer *b, const unsigned char *bytes, size_t n);
39 void zpm_buffer_appendf(struct zpm_buffer *b, const char *fmt, ...);
40 void zpm_buffer_appendvf(struct zpm_buffer *b, const char *fmt, va_list ap);
41 void zpm_buffer_append_str(struct zpm_buffer *b, const char *s);
42 void zpm_buffer_append16(struct zpm_buffer *b, uint16_t n);
43 void zpm_buffer_append24(struct zpm_buffer *b, uint32_t n);
44 void zpm_buffer_append_byte(struct zpm_buffer *b, uint8_t n);
45 void zpm_buffer_shift(struct zpm_buffer *b, size_t n);
46 void zpm_buffer_write16(struct zpm_buffer *b, uint16_t n, size_t at);
47 void zpm_buffer_writebe(struct zpm_buffer *b, int bytes, size_t at, uint64_t val);
48 uint64_t zpm_buffer_readbe(struct zpm_buffer *b, int bytes, size_t at);
49
50 /* make room at the beginning */
51 void zpm_buffer_unshift(struct zpm_buffer *b, size_t n);
52
53 #endif