#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