*/
-typedef struct SilcBufferStruct {
+typedef struct {
uint32 truelen;
uint32 len;
unsigned char *head;
unsigned char *data;
unsigned char *tail;
unsigned char *end;
-} SilcBufferObject;
-
-typedef SilcBufferObject *SilcBuffer;
+} *SilcBuffer, SilcBufferStruct;
/* Macros */
SilcBuffer sb;
/* Allocate new SilcBuffer */
- sb = silc_calloc(1, sizeof(*sb));
+ sb = (SilcBuffer)silc_calloc(1, sizeof(*sb));
/* Allocate the actual data area */
- sb->head = silc_calloc(len, sizeof(*sb->head));
+ sb->head = (unsigned char *)silc_calloc(len, sizeof(*sb->head));
/* Set pointers to the new buffer */
sb->truelen = len;
}
}
+/* Sets the `data' and `data_len' to the buffer pointer sent as argument.
+ The data area is automatically set to the `data_len'. This function
+ can be used to set the data to static buffer without needing any
+ memory allocations. The `data' will not be copied to the buffer. */
+
+extern inline
+void silc_buffer_set(SilcBuffer sb, unsigned char *data, uint32 data_len)
+{
+ sb->data = sb->head = data;
+ sb->tail = sb->end = data + data_len;
+ sb->len = sb->truelen = data_len;
+}
+
/* 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.
#ifdef SILC_DEBUG
assert((sb->data - sb->head) >= len);
#endif
- return memcpy(sb->head, data, len);
+ return (unsigned char *)memcpy(sb->head, data, len);
}
/* Puts data at the start of the valid data area. Returns a pointer
#ifdef SILC_DEBUG
assert((sb->tail - sb->data) >= len);
#endif
- return memcpy(sb->data, data, len);
+ return (unsigned char *)memcpy(sb->data, data, len);
}
/* Puts data at the tail of the buffer. Returns pointer to the copied
#ifdef SILC_DEBUG
assert((sb->end - sb->tail) >= len);
#endif
- return memcpy(sb->tail, data, len);
+ return (unsigned char *)memcpy(sb->tail, data, len);
}
#endif