updates.
[silc.git] / lib / silccore / silcpayload.c
index f9fb09009f9d0fff2b4f2305a3235b742723dc69..294ebac8356d6581dd9c4b160e338e926df417c3 100644 (file)
@@ -80,40 +80,36 @@ SilcIDPayload silc_id_payload_parse_data(unsigned char *data,
                                         uint32 len)
 {
   SilcIDPayload new;
-  SilcBuffer buffer;
+  SilcBufferStruct buffer;
   int ret;
 
   SILC_LOG_DEBUG(("Parsing ID payload"));
 
-  buffer = silc_buffer_alloc(len);
-  silc_buffer_pull_tail(buffer, SILC_BUFFER_END(buffer));
-  silc_buffer_put(buffer, data, len);
+  silc_buffer_set(&buffer, data, len);
 
   new = silc_calloc(1, sizeof(*new));
 
-  ret = silc_buffer_unformat(buffer,
+  ret = silc_buffer_unformat(&buffer,
                             SILC_STR_UI_SHORT(&new->type),
                             SILC_STR_UI_SHORT(&new->len),
                             SILC_STR_END);
   if (ret == -1)
     goto err;
 
-  silc_buffer_pull(buffer, 4);
+  silc_buffer_pull(&buffer, 4);
 
-  if (new->len > buffer->len)
+  if (new->len > buffer.len)
     goto err;
 
-  ret = silc_buffer_unformat(buffer,
+  ret = silc_buffer_unformat(&buffer,
                             SILC_STR_UI_XNSTRING_ALLOC(&new->id, new->len),
                             SILC_STR_END);
   if (ret == -1)
     goto err;
 
-  silc_buffer_free(buffer);
   return new;
 
  err:
-  silc_buffer_free(buffer);
   silc_free(new);
   return NULL;
 }
@@ -122,43 +118,38 @@ SilcIDPayload silc_id_payload_parse_data(unsigned char *data,
 
 void *silc_id_payload_parse_id(unsigned char *data, uint32 len)
 {
-  SilcBuffer buffer;
+  SilcBufferStruct buffer;
   SilcIdType type;
   uint16 idlen;
-  unsigned char *id_data;
+  unsigned char *id_data = NULL;
   int ret;
   void *id;
 
-  buffer = silc_buffer_alloc(len);
-  silc_buffer_pull_tail(buffer, SILC_BUFFER_END(buffer));
-  silc_buffer_put(buffer, data, len);
+  silc_buffer_set(&buffer, data, len);
 
-  ret = silc_buffer_unformat(buffer,
+  ret = silc_buffer_unformat(&buffer,
                             SILC_STR_UI_SHORT(&type),
                             SILC_STR_UI_SHORT(&idlen),
                             SILC_STR_END);
   if (ret == -1)
     goto err;
 
-  silc_buffer_pull(buffer, 4);
+  silc_buffer_pull(&buffer, 4);
 
-  if (idlen > buffer->len)
+  if (idlen > buffer.len)
     goto err;
 
-  ret = silc_buffer_unformat(buffer,
+  ret = silc_buffer_unformat(&buffer,
                             SILC_STR_UI_XNSTRING_ALLOC(&id_data, idlen),
                             SILC_STR_END);
   if (ret == -1)
     goto err;
 
-  silc_buffer_free(buffer);
-
   id = silc_id_str2id(id_data, idlen, type);
   silc_free(id_data);
   return id;
 
  err:
-  silc_buffer_free(buffer);
   return NULL;
 }
 
@@ -175,7 +166,7 @@ SilcBuffer silc_id_payload_encode(void *id, SilcIdType type)
                  type == SILC_ID_SERVER ? "Server" : "Channel"));
 
   id_data = silc_id_id2str(id, type);
-  len = silc_id_get_len(type);
+  len = silc_id_get_len(id, type);
 
   buffer = silc_buffer_alloc(4 + len);
   silc_buffer_pull_tail(buffer, SILC_BUFFER_END(buffer));
@@ -394,7 +385,7 @@ SilcBuffer silc_argument_payload_encode_payload(SilcArgumentPayload payload)
   return buffer;
 }
 
-/* Free's Command Payload */
+/* Frees Argument Payload */
 
 void silc_argument_payload_free(SilcArgumentPayload payload)
 {