Integer type name change.
[silc.git] / lib / silcutil / silcbuffmt.c
index 08c8e29059574735aae2ef79af1bb965d6197abe..be83be57936443bcd2af45a64ffba06761f357a0 100644 (file)
@@ -40,10 +40,20 @@ do {                                                \
 int silc_buffer_format(SilcBuffer dst, ...)
 {
   va_list ap;
-  SilcBufferParamType fmt;
-  unsigned char *start_ptr = dst->data;
+  int ret;
 
   va_start(ap, dst);
+  ret = silc_buffer_format_vp(dst, ap);
+  va_end(ap);
+
+  return ret;
+}
+
+int silc_buffer_format_vp(SilcBuffer dst, va_list ap)
+{
+  SilcBufferParamType fmt;
+  unsigned char *start_ptr = dst->data;
+  int len;
 
   /* Parse the arguments by formatting type. */
   while(1) {
@@ -69,7 +79,7 @@ int silc_buffer_format(SilcBuffer dst, ...)
     case SILC_BUFFER_PARAM_SI16_SHORT:
       {
        unsigned char xf[2];
-       short x = (short)va_arg(ap, int);
+       SilcInt16 x = (SilcInt16)va_arg(ap, int);
        HAS_SPACE(dst, 2);
        SILC_PUT16_MSB(x, xf);
        silc_buffer_put(dst, xf, 2);
@@ -79,7 +89,7 @@ int silc_buffer_format(SilcBuffer dst, ...)
     case SILC_BUFFER_PARAM_UI16_SHORT:
       {
        unsigned char xf[2];
-       unsigned short x = (unsigned short)va_arg(ap, int);
+       SilcUInt16 x = (SilcUInt16)va_arg(ap, int);
        HAS_SPACE(dst, 2);
        SILC_PUT16_MSB(x, xf);
        silc_buffer_put(dst, xf, 2);
@@ -89,7 +99,7 @@ int silc_buffer_format(SilcBuffer dst, ...)
     case SILC_BUFFER_PARAM_SI32_INT:
       {
        unsigned char xf[4];
-       int x = va_arg(ap, int);
+       SilcInt32 x = va_arg(ap, SilcInt32);
        HAS_SPACE(dst, 4);
        SILC_PUT32_MSB(x, xf);
        silc_buffer_put(dst, xf, 4);
@@ -99,34 +109,58 @@ int silc_buffer_format(SilcBuffer dst, ...)
     case SILC_BUFFER_PARAM_UI32_INT:
       {
        unsigned char xf[4];
-       unsigned int x = va_arg(ap, unsigned int);
+       SilcUInt32 x = va_arg(ap, SilcUInt32);
        HAS_SPACE(dst, 4);
        SILC_PUT32_MSB(x, xf);
        silc_buffer_put(dst, xf, 4);
        silc_buffer_pull(dst, 4);
        break;
       }
+    case SILC_BUFFER_PARAM_SI64_INT:
+      {
+       unsigned char xf[8];
+       SilcInt64 x = va_arg(ap, SilcInt64);
+       HAS_SPACE(dst, 8);
+       SILC_PUT64_MSB(x, xf);
+       silc_buffer_put(dst, xf, 8);
+       silc_buffer_pull(dst, 8);
+       break;
+      }
+    case SILC_BUFFER_PARAM_UI64_INT:
+      {
+       unsigned char xf[8];
+       SilcUInt64 x = va_arg(ap, SilcUInt64);
+       HAS_SPACE(dst, 8);
+       SILC_PUT64_MSB(x, xf);
+       silc_buffer_put(dst, xf, 8);
+       silc_buffer_pull(dst, 8);
+       break;
+      }
+    case SILC_BUFFER_PARAM_UI8_STRING:
     case SILC_BUFFER_PARAM_UI16_STRING:
     case SILC_BUFFER_PARAM_UI32_STRING:
+    case SILC_BUFFER_PARAM_UI8_STRING_ALLOC:
     case SILC_BUFFER_PARAM_UI16_STRING_ALLOC:
     case SILC_BUFFER_PARAM_UI32_STRING_ALLOC:
       {
        unsigned char *x = va_arg(ap, unsigned char *);
-       int tmp_len = strlen(x);
+       SilcUInt32 tmp_len = strlen(x);
        HAS_SPACE(dst, tmp_len);
        silc_buffer_put(dst, x, tmp_len);
        silc_buffer_pull(dst, tmp_len);
        break;
       }
+    case SILC_BUFFER_PARAM_UI8_NSTRING:
     case SILC_BUFFER_PARAM_UI16_NSTRING:
     case SILC_BUFFER_PARAM_UI32_NSTRING:
     case SILC_BUFFER_PARAM_UI_XNSTRING:
+    case SILC_BUFFER_PARAM_UI8_NSTRING_ALLOC:
     case SILC_BUFFER_PARAM_UI16_NSTRING_ALLOC:
     case SILC_BUFFER_PARAM_UI32_NSTRING_ALLOC:
     case SILC_BUFFER_PARAM_UI_XNSTRING_ALLOC:
       {
        unsigned char *x = va_arg(ap, unsigned char *);
-       unsigned int len = va_arg(ap, unsigned int);
+       SilcUInt32 len = va_arg(ap, SilcUInt32);
        HAS_SPACE(dst, len);
        silc_buffer_put(dst, x, len);
        silc_buffer_pull(dst, len);
@@ -145,15 +179,13 @@ int silc_buffer_format(SilcBuffer dst, ...)
 
  fail:
   SILC_LOG_DEBUG(("Error occured while formatting data"));
-#ifdef SILC_DEBUG
-  assert(FALSE);
-#endif
   return -1;
 
  ok:
   /* Push the buffer back to where it belongs. */
-  silc_buffer_push(dst, dst->data - start_ptr);
-  return dst->len;
+  len = dst->data - start_ptr;
+  silc_buffer_push(dst, len);
+  return len;
 }
 
 /* Unformats the buffer sent as argument. The unformatted data is returned
@@ -164,12 +196,21 @@ int silc_buffer_format(SilcBuffer dst, ...)
 int silc_buffer_unformat(SilcBuffer src, ...)
 {
   va_list ap;
+  int ret;
+
+  va_start(ap, src);
+  ret = silc_buffer_unformat_vp(src, ap);
+  va_end(ap);
+  
+  return ret;
+}
+
+int silc_buffer_unformat_vp(SilcBuffer src, va_list ap)
+{
   SilcBufferParamType fmt;
   unsigned char *start_ptr = src->data;
   int len = 0;
 
-  va_start(ap, src);
-
   /* Parse the arguments by formatting type. */
   while(1) {
     fmt = va_arg(ap, SilcBufferParamType);
@@ -195,7 +236,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_SI16_SHORT:
       {
-       short *x = va_arg(ap, short *);
+       SilcInt16 *x = va_arg(ap, SilcInt16 *);
        HAS_SPACE(src, 2);
        if (x)
          SILC_GET16_MSB(*x, src->data);
@@ -204,7 +245,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_UI16_SHORT:
       {
-       unsigned short *x = va_arg(ap, unsigned short *);
+       SilcUInt16 *x = va_arg(ap, SilcUInt16 *);
        HAS_SPACE(src, 2);
        if (x)
          SILC_GET16_MSB(*x, src->data);
@@ -213,7 +254,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_SI32_INT:
       {
-       int *x = va_arg(ap, int *);
+       SilcInt32 *x = va_arg(ap, SilcInt32 *);
        HAS_SPACE(src, 4);
        if (x)
          SILC_GET32_MSB(*x, src->data);
@@ -222,16 +263,47 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_UI32_INT:
       {
-       unsigned int *x = va_arg(ap, unsigned int *);
+       SilcUInt32 *x = va_arg(ap, SilcUInt32 *);
        HAS_SPACE(src, 4);
        if (x)
          SILC_GET32_MSB(*x, src->data);
        silc_buffer_pull(src, 4);
        break;
       }
+    case SILC_BUFFER_PARAM_SI64_INT:
+      {
+       SilcInt64 *x = va_arg(ap, SilcInt64 *);
+       HAS_SPACE(src, 8);
+       if (x)
+         SILC_GET64_MSB(*x, src->data);
+       silc_buffer_pull(src, 8);
+       break;
+      }
+    case SILC_BUFFER_PARAM_UI64_INT:
+      {
+       SilcUInt64 *x = va_arg(ap, SilcUInt64 *);
+       HAS_SPACE(src, 8);
+       if (x)
+         SILC_GET64_MSB(*x, src->data);
+       silc_buffer_pull(src, 8);
+       break;
+      }
+    case SILC_BUFFER_PARAM_UI8_STRING:
+      {
+       SilcUInt8 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       HAS_SPACE(src, 1);
+       len2 = (SilcUInt8)src->data[0];
+       silc_buffer_pull(src, 1);
+       HAS_SPACE(src, len2);
+       if (x)
+         *x = src->data;
+       silc_buffer_pull(src, len2);
+       break;
+      }
     case SILC_BUFFER_PARAM_UI16_STRING:
       {
-       unsigned short len2;
+       SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
        HAS_SPACE(src, 2);
        SILC_GET16_MSB(len2, src->data);
@@ -242,9 +314,24 @@ int silc_buffer_unformat(SilcBuffer src, ...)
        silc_buffer_pull(src, len2);
        break;
       }
+    case SILC_BUFFER_PARAM_UI8_STRING_ALLOC:
+      {
+       SilcUInt8 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       HAS_SPACE(src, 1);
+       len2 = (SilcUInt8)src->data[0];
+       silc_buffer_pull(src, 1);
+       HAS_SPACE(src, len2);
+       if (x && len2) {
+         *x = silc_calloc(len2 + 1, sizeof(unsigned char));
+         memcpy(*x, src->data, len2);
+       }
+       silc_buffer_pull(src, len2);
+       break;
+      }
     case SILC_BUFFER_PARAM_UI16_STRING_ALLOC:
       {
-       unsigned short len2;
+       SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
        HAS_SPACE(src, 2);
        SILC_GET16_MSB(len2, src->data);
@@ -259,7 +346,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_UI32_STRING:
       {
-       unsigned int len2;
+       SilcUInt32 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
        HAS_SPACE(src, 4);
        SILC_GET32_MSB(len2, src->data);
@@ -272,7 +359,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_UI32_STRING_ALLOC:
       {
-       unsigned int len2;
+       SilcUInt32 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
        HAS_SPACE(src, 4);
        SILC_GET32_MSB(len2, src->data);
@@ -285,11 +372,27 @@ int silc_buffer_unformat(SilcBuffer src, ...)
        silc_buffer_pull(src, len2);
        break;
       }
+    case SILC_BUFFER_PARAM_UI8_NSTRING:
+      {
+       SilcUInt8 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       SilcUInt8 *len = va_arg(ap, SilcUInt8 *);
+       HAS_SPACE(src, 1);
+       len2 = (SilcUInt8)src->data[0];
+       silc_buffer_pull(src, 1);
+       HAS_SPACE(src, len2);
+       if (len)
+         *len = len2;
+       if (x)
+         *x = src->data;
+       silc_buffer_pull(src, len2);
+       break;
+      }
     case SILC_BUFFER_PARAM_UI16_NSTRING:
       {
-       unsigned short len2;
+       SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
-       unsigned short *len = va_arg(ap, unsigned short *);
+       SilcUInt16 *len = va_arg(ap, SilcUInt16 *);
        HAS_SPACE(src, 2);
        SILC_GET16_MSB(len2, src->data);
        silc_buffer_pull(src, 2);
@@ -301,11 +404,29 @@ int silc_buffer_unformat(SilcBuffer src, ...)
        silc_buffer_pull(src, len2);
        break;
       }
+    case SILC_BUFFER_PARAM_UI8_NSTRING_ALLOC:
+      {
+       SilcUInt8 len2;
+       unsigned char **x = va_arg(ap, unsigned char **);
+       SilcUInt8 *len = va_arg(ap, SilcUInt8 *);
+       HAS_SPACE(src, 1);
+       len2 = (SilcUInt8)src->data[0];
+       silc_buffer_pull(src, 1);
+       HAS_SPACE(src, len2);
+       if (len)
+         *len = len2;
+       if (x && len2) {
+         *x = silc_calloc(len2 + 1, sizeof(unsigned char));
+         memcpy(*x, src->data, len2);
+       }
+       silc_buffer_pull(src, len2);
+       break;
+      }
     case SILC_BUFFER_PARAM_UI16_NSTRING_ALLOC:
       {
-       unsigned short len2;
+       SilcUInt16 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
-       unsigned short *len = va_arg(ap, unsigned short *);
+       SilcUInt16 *len = va_arg(ap, SilcUInt16 *);
        HAS_SPACE(src, 2);
        SILC_GET16_MSB(len2, src->data);
        silc_buffer_pull(src, 2);
@@ -321,9 +442,9 @@ int silc_buffer_unformat(SilcBuffer src, ...)
       }
     case SILC_BUFFER_PARAM_UI32_NSTRING:
       {
-       unsigned int len2;
+       SilcUInt32 len2;
        unsigned char **x = va_arg(ap, unsigned char **);
-       unsigned int *len = va_arg(ap, unsigned int *);
+       SilcUInt32 *len = va_arg(ap, SilcUInt32 *);
        HAS_SPACE(src, 4);
        SILC_GET32_MSB(len2, src->data);
        silc_buffer_pull(src, 4);
@@ -338,7 +459,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
     case SILC_BUFFER_PARAM_UI_XNSTRING:
       {
        unsigned char **x = va_arg(ap, unsigned char **);
-       unsigned int len = va_arg(ap, unsigned int);
+       SilcUInt32 len = va_arg(ap, SilcUInt32);
        HAS_SPACE(src, len);
        if (len && x)
          *x = src->data;
@@ -348,7 +469,7 @@ int silc_buffer_unformat(SilcBuffer src, ...)
     case SILC_BUFFER_PARAM_UI_XNSTRING_ALLOC:
       {
        unsigned char **x = va_arg(ap, unsigned char **);
-       unsigned int len = va_arg(ap, unsigned int);
+       SilcUInt32 len = va_arg(ap, SilcUInt32);
        HAS_SPACE(src, len);
        if (len && x) {
          *x = silc_calloc(len + 1, sizeof(unsigned char));
@@ -370,9 +491,6 @@ int silc_buffer_unformat(SilcBuffer src, ...)
 
  fail:
   SILC_LOG_DEBUG(("Error occured while unformatting buffer"));
-#ifdef SILC_DEBUG
-  assert(FALSE);
-#endif
   return -1;
 
  ok: