]> pd.if.org Git - zpackage/blobdiff - lib/buffer.h
add buffer lib files
[zpackage] / lib / buffer.h
diff --git a/lib/buffer.h b/lib/buffer.h
new file mode 100644 (file)
index 0000000..7a849d8
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef ZPM_BUFFER_H_
+#define ZPM_BUFFER_H_ 1
+
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+
+/* 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