updates
[silc.git] / lib / silcutil / silcbuffer.h
index 124911031f8741a8174d61a615ffe8730df147a4..b91d6cb67ad50f79b658818bddeea43ebd5a3d6e 100644 (file)
     Currently valid data area is considered to be the main data area in
     the buffer. However, the entire buffer is of course valid data and can
     be used as such. Usually head section of the buffer includes different
-    kind of headers or similiar. Data section includes the main data of
+    kind of headers or similar. Data section includes the main data of
     the buffer. Tail section can be seen as a reserve space of the data
     section. Tail section can be pulled towards end thus the data section
     becomes larger.
 
 */
 
-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 */
 
@@ -130,16 +128,16 @@ typedef SilcBufferObject *SilcBuffer;
 
 /* Inline functions */
 
-extern inline
+static inline
 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;
@@ -152,7 +150,7 @@ SilcBuffer silc_buffer_alloc(uint32 len)
 
 /* Free's a SilcBuffer */
 
-extern inline
+static inline
 void silc_buffer_free(SilcBuffer sb)
 {
   if (sb) {
@@ -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. */
+
+static 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. 
@@ -179,13 +190,13 @@ void silc_buffer_free(SilcBuffer sb)
            ^
 */
 
-extern inline 
+static inline 
 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;
@@ -211,7 +222,7 @@ unsigned char *silc_buffer_pull(SilcBuffer sb, uint32 len)
               ^
 */
 
-extern inline 
+static inline 
 unsigned char *silc_buffer_push(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_data = sb->data;
@@ -243,13 +254,13 @@ unsigned char *silc_buffer_push(SilcBuffer sb, uint32 len)
                         ^
 */
 
-extern inline 
+static inline 
 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;
@@ -275,7 +286,7 @@ unsigned char *silc_buffer_pull_tail(SilcBuffer sb, uint32 len)
                             ^
 */
 
-extern inline
+static inline
 unsigned char *silc_buffer_push_tail(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_tail = sb->tail;
@@ -301,15 +312,15 @@ unsigned char *silc_buffer_push_tail(SilcBuffer sb, uint32 len)
    Puts data to the head section. 
 */
 
-extern inline
+static 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 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 
@@ -323,15 +334,15 @@ unsigned char *silc_buffer_put_head(SilcBuffer sb,
            Puts data to the data section.
 */
 
-extern inline
+static 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 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
@@ -345,15 +356,15 @@ unsigned char *silc_buffer_put(SilcBuffer sb,
                            Puts data to the tail section.
 */
 
-extern inline
+static 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 memcpy(sb->tail, data, len);
+  return (unsigned char *)memcpy(sb->tail, data, len);
 }
 
 #endif