X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcbuffer.h;h=d32b046baf34a8836627d7bb40e47dfd87c73cbf;hb=4d35af3be05cacf69ca4bd634973cdcd25118e98;hp=179c3d0e0567065917c4d402e077eef0887ad61d;hpb=e14cef8f772a6f73f05254ae220a3a83981ea753;p=silc.git diff --git a/lib/silcutil/silcbuffer.h b/lib/silcutil/silcbuffer.h index 179c3d0e..d32b046b 100644 --- a/lib/silcutil/silcbuffer.h +++ b/lib/silcutil/silcbuffer.h @@ -116,18 +116,6 @@ typedef struct SilcBufferStruct { unsigned char *data; unsigned char *tail; unsigned char *end; - - /* Method functions. */ - unsigned char *(*pull)(struct SilcBufferStruct *, unsigned int); - unsigned char *(*push)(struct SilcBufferStruct *, unsigned int); - unsigned char *(*pull_tail)(struct SilcBufferStruct *, unsigned int); - unsigned char *(*push_tail)(struct SilcBufferStruct *, unsigned int); - unsigned char *(*put)(struct SilcBufferStruct *, unsigned char *, - unsigned int); - unsigned char *(*put_head)(struct SilcBufferStruct *, unsigned char *, - unsigned int); - unsigned char *(*put_tail)(struct SilcBufferStruct *, unsigned char *, - unsigned int); } SilcBufferObject; typedef SilcBufferObject *SilcBuffer; @@ -145,6 +133,42 @@ typedef SilcBufferObject *SilcBuffer; * functions. */ +extern inline +SilcBuffer silc_buffer_alloc(unsigned int len) +{ + SilcBuffer sb; + unsigned char *data; + + /* Allocate new SilcBuffer */ + sb = silc_calloc(1, sizeof(*sb)); + + /* Allocate the actual data area */ + data = silc_calloc(len, sizeof(*data)); + memset(data, 0, len); + + /* Set pointers to the new buffer */ + sb->truelen = len; + sb->len = 0; + sb->head = data; + sb->data = data; + sb->tail = data; + sb->end = data + sb->truelen; + + return sb; +} + +/* Free's a SilcBuffer */ + +extern inline +void silc_buffer_free(SilcBuffer sb) +{ + if (sb) { + memset(sb->head, 'F', sb->truelen); + silc_free(sb->head); + silc_free(sb); + } +} + /* Pulls current data area towards end. The length of the currently valid data area is also decremented. Returns pointer to the data area before pulling. @@ -328,9 +352,9 @@ unsigned char *silc_buffer_put_tail(SilcBuffer sb, #endif /* !SILC_DEBUG */ /* Prototypes */ +#ifdef SILC_DEBUG SilcBuffer silc_buffer_alloc(unsigned int len); void silc_buffer_free(SilcBuffer sb); -#ifdef SILC_DEBUG unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len); unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len); unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len);