updates.
[silc.git] / lib / silcutil / silcbuffer.h
index 34e30c1c1f863f7fa299f79d34aaa26e3d81f36f..9d6f2e2aa3bf3c134fc16d5a3c8ae48a229bc2fd 100644 (file)
 
 */
 
-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 */
 
@@ -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. 
@@ -185,7 +196,7 @@ unsigned char *silc_buffer_pull(SilcBuffer sb, uint32 len)
   unsigned char *old_data = sb->data;
 
 #ifdef SILC_DEBUG
-  assert(len <= (sb->tail - sb->data));
+  assert(len <= (uint32)(sb->tail - sb->data));
 #endif
 
   sb->data += len;
@@ -249,7 +260,7 @@ unsigned char *silc_buffer_pull_tail(SilcBuffer sb, uint32 len)
   unsigned char *old_tail = sb->tail;
 
 #ifdef SILC_DEBUG
-  assert((sb->end - sb->tail) >= len);
+  assert((uint32)(sb->end - sb->tail) >= len);
 #endif
 
   sb->tail += len;
@@ -303,11 +314,11 @@ unsigned char *silc_buffer_push_tail(SilcBuffer sb, uint32 len)
 
 extern inline
 unsigned char *silc_buffer_put_head(SilcBuffer sb, 
-                                   unsigned char *data,
+                                   const unsigned char *data,
                                    uint32 len)
 {
 #ifdef SILC_DEBUG
-  assert((sb->data - sb->head) >= len);
+  assert((uint32)(sb->data - sb->head) >= len);
 #endif
   return (unsigned char *)memcpy(sb->head, data, len);
 }
@@ -325,11 +336,11 @@ unsigned char *silc_buffer_put_head(SilcBuffer sb,
 
 extern inline
 unsigned char *silc_buffer_put(SilcBuffer sb, 
-                              unsigned char *data,
+                              const unsigned char *data,
                               uint32 len)
 {
 #ifdef SILC_DEBUG
-  assert((sb->tail - sb->data) >= len);
+  assert((uint32)(sb->tail - sb->data) >= len);
 #endif
   return (unsigned char *)memcpy(sb->data, data, len);
 }
@@ -347,11 +358,11 @@ unsigned char *silc_buffer_put(SilcBuffer sb,
 
 extern inline
 unsigned char *silc_buffer_put_tail(SilcBuffer sb, 
-                                   unsigned char *data,
+                                   const unsigned char *data,
                                    uint32 len)
 {
 #ifdef SILC_DEBUG
-  assert((sb->end - sb->tail) >= len);
+  assert((uint32)(sb->end - sb->tail) >= len);
 #endif
   return (unsigned char *)memcpy(sb->tail, data, len);
 }