Fixed silc_buffer_unformat return correct length with SILC_STR_ADVANCE
[runtime.git] / lib / silcutil / silcbuffmt.c
index 2daf348f77c1d45d09c5168b44556df5741116ef..838177d183932c0bb5a9fa465d572ca5b1df459c 100644 (file)
@@ -16,9 +16,8 @@
   GNU General Public License for more details.
 
 */
-/* $Id$ */
 
-#include "silc.h"
+#include "silcruntime.h"
 
 /************************** Types and definitions ***************************/
 
@@ -49,7 +48,7 @@ do {                                                  \
     goto fail;                                         \
   }                                                    \
   if (silc_unlikely((req + 1) <= 0)) {                 \
-    silc_set_errno(SILC_ERR_UNDERFLOW);                        \
+    silc_set_errno(SILC_ERR_OVERFLOW);                 \
     goto fail;                                         \
   }                                                    \
 } while(0)
@@ -180,7 +179,7 @@ int silc_buffer_sformat_vp_i(SilcStack stack, SilcBuffer dst, va_list ap,
     case SILC_PARAM_REGEX:
       {
        const char *regex = va_arg(ap, char *);
-       SilcBufferRegexFlags rflags = va_arg(ap, SilcUInt32);
+       SilcBufferRegexFlags rflags = va_arg(ap, SilcBufferRegexFlags);
        SilcBufferStruct match;
        SilcBool match_all = (rflags & SILC_STR_REGEX_ALL) != 0;
        SilcBool match_nl = (rflags & SILC_STR_REGEX_NL) != 0;
@@ -284,7 +283,7 @@ int silc_buffer_sformat_vp_i(SilcStack stack, SilcBuffer dst, va_list ap,
 
        if (x && tmp_len) {
          FORMAT_HAS_SPACE(stack, dst, tmp_len);
-         silc_buffer_put(dst, x, tmp_len);
+         silc_buffer_put(dst, (unsigned char *)x, tmp_len);
          silc_buffer_pull(dst, tmp_len);
        }
        break;
@@ -669,7 +668,7 @@ int silc_buffer_sunformat_vp_i(SilcStack stack, SilcBuffer src, va_list ap,
     case SILC_PARAM_REGEX:
       {
        const char *regex = va_arg(ap, char *);
-       SilcBufferRegexFlags rflags = va_arg(ap, SilcUInt32);
+       SilcBufferRegexFlags rflags = va_arg(ap, SilcBufferRegexFlags);
        SilcBufferStruct match;
        SilcBool match_all = (rflags & SILC_STR_REGEX_ALL) != 0;
        SilcBool match_nl = (rflags & SILC_STR_REGEX_NL) != 0;
@@ -1245,11 +1244,12 @@ int silc_buffer_sunformat_vp_i(SilcStack stack, SilcBuffer src, va_list ap,
   return -1;
 
  ok:
+  len = src->data - start_ptr;
+
   /* Push the buffer back to the start. */
-  if (process && !advance) {
-    len = src->data - start_ptr;
+  if (process && !advance)
     silc_buffer_push(src, len);
-  }
+
   return len;
 }