updates.
[silc.git] / lib / silcutil / silcbuffer.h
index 6060e667658818d34731eb336a1b9308a123ae45..a6ca1897e2fc3444e7650aa4566874a2da303b04 100644 (file)
    the allocated data area. Following short description of the fields
    of the buffer.
 
-   unsigned int truelen;
+   uint32 truelen;
 
        True length of the buffer. This is set at the allocation of the
        buffer and it should not be touched after that. This field should
        be considered read-only.
 
-   unsigned int len;
+   uint32 len;
 
        Length of the currently valid data area. Tells the length of the 
        data at the buffer. This is set to zero at the allocation of the
 
 */
 
-typedef struct SilcBufferStruct {
-  unsigned int truelen;
-  unsigned int len;
+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 */
 
@@ -131,15 +129,15 @@ typedef SilcBufferObject *SilcBuffer;
 /* Inline functions */
 
 extern inline
-SilcBuffer silc_buffer_alloc(unsigned int len)
+SilcBuffer silc_buffer_alloc(uint32 len)
 {
   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;
@@ -162,6 +160,19 @@ void silc_buffer_free(SilcBuffer sb)
   }
 }
 
+/* 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. 
@@ -180,7 +191,7 @@ void silc_buffer_free(SilcBuffer sb)
 */
 
 extern inline 
-unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_pull(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_data = sb->data;
 
@@ -212,7 +223,7 @@ unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len)
 */
 
 extern inline 
-unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_push(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_data = sb->data;
 
@@ -244,7 +255,7 @@ unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len)
 */
 
 extern inline 
-unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_pull_tail(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_tail = sb->tail;
 
@@ -276,7 +287,7 @@ unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len)
 */
 
 extern inline
-unsigned char *silc_buffer_push_tail(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_push_tail(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_tail = sb->tail;
 
@@ -304,12 +315,12 @@ unsigned char *silc_buffer_push_tail(SilcBuffer sb, unsigned int len)
 extern inline
 unsigned char *silc_buffer_put_head(SilcBuffer sb, 
                                    unsigned char *data,
-                                   unsigned int len)
+                                   uint32 len)
 {
 #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 
@@ -326,12 +337,12 @@ unsigned char *silc_buffer_put_head(SilcBuffer sb,
 extern inline
 unsigned char *silc_buffer_put(SilcBuffer sb, 
                               unsigned char *data,
-                              unsigned int len)
+                              uint32 len)
 {
 #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
@@ -348,12 +359,12 @@ unsigned char *silc_buffer_put(SilcBuffer sb,
 extern inline
 unsigned char *silc_buffer_put_tail(SilcBuffer sb, 
                                    unsigned char *data,
-                                   unsigned int len)
+                                   uint32 len)
 {
 #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