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