blob.h revision 2632
113207Sgabeblack@google.com/* 213207Sgabeblack@google.com * blob.h 313207Sgabeblack@google.com * 413207Sgabeblack@google.com * Binary blob handling. 513207Sgabeblack@google.com * 613207Sgabeblack@google.com * Copyright (c) 2002 Dug Song <dugsong@monkey.org> 713207Sgabeblack@google.com * 813207Sgabeblack@google.com * $Id: blob.h,v 1.2 2002/04/05 03:06:44 dugsong Exp $ 913207Sgabeblack@google.com */ 1013207Sgabeblack@google.com 1113207Sgabeblack@google.com#ifndef DNET_BLOB_H 1213207Sgabeblack@google.com#define DNET_BLOB_H 1313207Sgabeblack@google.com 1413207Sgabeblack@google.comtypedef struct blob { 1513207Sgabeblack@google.com u_char *base; /* start of data */ 1613207Sgabeblack@google.com int off; /* offset into data */ 1713207Sgabeblack@google.com int end; /* end of data */ 1813207Sgabeblack@google.com int size; /* size of allocation */ 1913207Sgabeblack@google.com} blob_t; 2013207Sgabeblack@google.com 2113207Sgabeblack@google.com__BEGIN_DECLS 2213207Sgabeblack@google.comblob_t *blob_new(void); 2313207Sgabeblack@google.com 2413207Sgabeblack@google.comint blob_read(blob_t *b, void *buf, int len); 2513207Sgabeblack@google.comint blob_write(blob_t *b, const void *buf, int len); 2613207Sgabeblack@google.com 2713207Sgabeblack@google.comint blob_seek(blob_t *b, int off, int whence); 2813207Sgabeblack@google.com#define blob_skip(b, l) blob_seek(b, l, SEEK_CUR) 2913207Sgabeblack@google.com#define blob_rewind(b) blob_seek(b, 0, SEEK_SET) 3013207Sgabeblack@google.com 3113207Sgabeblack@google.com#define blob_offset(b) ((b)->off) 3213293Sgabeblack@google.com#define blob_left(b) ((b)->end - (b)->off) 3313288Sgabeblack@google.com 3413207Sgabeblack@google.comint blob_index(blob_t *b, const void *buf, int len); 3513324Sgabeblack@google.comint blob_rindex(blob_t *b, const void *buf, int len); 3613260Sgabeblack@google.com 3713207Sgabeblack@google.comint blob_pack(blob_t *b, const char *fmt, ...); 3813207Sgabeblack@google.comint blob_unpack(blob_t *b, const char *fmt, ...); 3913207Sgabeblack@google.com 4013207Sgabeblack@google.comint blob_insert(blob_t *b, const void *buf, int len); 4113207Sgabeblack@google.comint blob_delete(blob_t *b, void *buf, int len); 4213207Sgabeblack@google.com 4313207Sgabeblack@google.comint blob_print(blob_t *b, char *style, int len); 4413207Sgabeblack@google.com 4513207Sgabeblack@google.comblob_t *blob_free(blob_t *b); 4613207Sgabeblack@google.com 4713207Sgabeblack@google.comint blob_register_alloc(size_t size, void *(*bmalloc)(size_t), 4813207Sgabeblack@google.com void (*bfree)(void *), void *(*brealloc)(void *, size_t)); 4913207Sgabeblack@google.com#ifdef va_start 5013207Sgabeblack@google.comtypedef int (*blob_fmt_cb)(int pack, int len, blob_t *b, va_list *arg); 5113207Sgabeblack@google.com 5213207Sgabeblack@google.comint blob_register_pack(char c, blob_fmt_cb fmt_cb); 5313207Sgabeblack@google.com#endif 5413207Sgabeblack@google.com__END_DECLS 5513207Sgabeblack@google.com 5613288Sgabeblack@google.com#endif /* DNET_BLOB_H */ 5713260Sgabeblack@google.com