X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fbuffer.h;fp=lib%2Fbuffer.h;h=7a849d8b14d2d6fd8baca6bc6cf5b1452d180765;hb=290e4a5a70804333d0d0060035292ebe1cc758cd;hp=0000000000000000000000000000000000000000;hpb=b120452a12d0ffef68822f8a83f67ab89c606a08;p=zpackage diff --git a/lib/buffer.h b/lib/buffer.h new file mode 100644 index 0000000..7a849d8 --- /dev/null +++ b/lib/buffer.h @@ -0,0 +1,53 @@ +#ifndef ZPM_BUFFER_H_ +#define ZPM_BUFFER_H_ 1 + +#include +#include +#include + +/* flags: + * 0x1 secure: zero memory when used + * 0x2 fixed: buffer doesn't belong to you, and size says how big it is + * 0x4 + */ +struct zpm_buffer { + char *buffer; + size_t len; + size_t size; + int32_t error; + uint32_t flags; +}; + +struct zpm_buffer_reader { + struct zpm_buffer b; + size_t cursor; +}; + +uint32_t zpm_buffer_next3(struct zpm_buffer_reader *rb); +uint16_t zpm_buffer_next2(struct zpm_buffer_reader *rb); +uint8_t zpm_buffer_next(struct zpm_buffer_reader *rb); +void zpm_buffer_nextn(struct zpm_buffer_reader *rb, unsigned char *b, size_t n); + +void zpm_buffer_init(struct zpm_buffer *b); + +/* makes sure there's at least need bytes free */ +void zpm_buffer_expand(struct zpm_buffer *b, size_t need); +void zpm_buffer_free(struct zpm_buffer *b); +void zpm_buffer_set(struct zpm_buffer *buffer, int ch); +void zpm_buffer_compact(struct zpm_buffer *b); +void zpm_buffer_append(struct zpm_buffer *b, const unsigned char *bytes, size_t n); +void zpm_buffer_appendf(struct zpm_buffer *b, const char *fmt, ...); +void zpm_buffer_appendvf(struct zpm_buffer *b, const char *fmt, va_list ap); +void zpm_buffer_append_str(struct zpm_buffer *b, const char *s); +void zpm_buffer_append16(struct zpm_buffer *b, uint16_t n); +void zpm_buffer_append24(struct zpm_buffer *b, uint32_t n); +void zpm_buffer_append_byte(struct zpm_buffer *b, uint8_t n); +void zpm_buffer_shift(struct zpm_buffer *b, size_t n); +void zpm_buffer_write16(struct zpm_buffer *b, uint16_t n, size_t at); +void zpm_buffer_writebe(struct zpm_buffer *b, int bytes, size_t at, uint64_t val); +uint64_t zpm_buffer_readbe(struct zpm_buffer *b, int bytes, size_t at); + +/* make room at the beginning */ +void zpm_buffer_unshift(struct zpm_buffer *b, size_t n); + +#endif