Added.
[silc.git] / lib / silcutil / silcbuffmt.c
index 562af7d86501524808c3c596e11645fa77b412cc..36d9b4817bae692966f26b8d3b815b2d69da7348 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2006 Pekka Riikonen
+  Copyright (C) 1997 - 2007 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -85,21 +85,14 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
     switch(fmt) {
     case SILC_PARAM_FUNC:
       {
-       SilcBufferFormatFunc func = NULL;
-       SilcBufferSFormatFunc funcs = NULL;
+       SilcBufferFormatFunc func;
        void *val;
        void *context;
        int tmp_len;
-       if (!stack)
-         func = va_arg(ap, SilcBufferFormatFunc);
-       else
-         funcs = va_arg(ap, SilcBufferSFormatFunc);
+       func = va_arg(ap, SilcBufferFormatFunc);
        val = va_arg(ap, void *);
        context = va_arg(ap, void *);
-       if (!stack)
-         tmp_len = func(dst, val, context);
-       else
-         tmp_len = funcs(stack, dst, val, context);
+       tmp_len = func(stack, dst, val, context);
        if (tmp_len < 0)
          goto fail;
        if (tmp_len) {
@@ -115,11 +108,13 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
     case SILC_PARAM_UI16_STRING_ALLOC:
     case SILC_PARAM_UI32_STRING_ALLOC:
       {
-       unsigned char *x = va_arg(ap, unsigned char *);
-       SilcUInt32 tmp_len = strlen(x);
-       FORMAT_HAS_SPACE(stack, dst, tmp_len);
-       silc_buffer_put(dst, x, tmp_len);
-       silc_buffer_pull(dst, tmp_len);
+       char *x = va_arg(ap, char *);
+       SilcUInt32 tmp_len = x ? strlen(x) : 0;
+       if (x && tmp_len) {
+         FORMAT_HAS_SPACE(stack, dst, tmp_len);
+         silc_buffer_put(dst, (unsigned char *)x, tmp_len);
+         silc_buffer_pull(dst, tmp_len);
+       }
        break;
       }
     case SILC_PARAM_UI8_NSTRING:
@@ -184,7 +179,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap)
       {
        char x = (char)va_arg(ap, int);
        FORMAT_HAS_SPACE(stack, dst, 1);
-       silc_buffer_put(dst, &x, 1);
+       silc_buffer_put(dst, (unsigned char *)&x, 1);
        silc_buffer_pull(dst, 1);
        break;
       }
@@ -322,21 +317,14 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap)
     switch(fmt) {
     case SILC_PARAM_FUNC:
       {
-       SilcBufferUnformatFunc func = NULL;
-       SilcBufferSUnformatFunc funcs = NULL;
+       SilcBufferUnformatFunc func;
        void **val;
        void *context;
        int tmp_len;
-       if (!stack)
-         func = va_arg(ap, SilcBufferUnformatFunc);
-       else
-         funcs = va_arg(ap, SilcBufferSUnformatFunc);
+       func = va_arg(ap, SilcBufferUnformatFunc);
        val = va_arg(ap, void **);
        context = va_arg(ap, void *);
-       if (!stack)
-         tmp_len = func(src, val, context);
-       else
-         tmp_len = funcs(stack, src, val, context);
+       tmp_len = func(stack, src, val, context);
        if (tmp_len < 0)
          goto fail;
        if (tmp_len) {
@@ -745,8 +733,8 @@ int silc_buffer_sstrformat(SilcStack stack, SilcBuffer dst, ...)
       goto ok;
 
     slen = strlen(string);
-    d = silc_srealloc_ua(stack, len + 1, dst->head,
-                        sizeof(*dst->head) * (slen + len + 1));
+    d = silc_srealloc(stack, len + 1, dst->head,
+                     sizeof(*dst->head) * (slen + len + 1));
     if (silc_unlikely(!d))
       return -1;
     dst->head = d;