From d9c5a093a4395783dd935fae6ed4b5ea6ec38080 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Thu, 9 Nov 2006 16:12:09 +0000 Subject: [PATCH] SILC_STR_ADVANCE support to unformatting. --- lib/silcutil/silcbuffmt.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/silcutil/silcbuffmt.c b/lib/silcutil/silcbuffmt.c index 20285ec8..e980d2b6 100644 --- a/lib/silcutil/silcbuffmt.c +++ b/lib/silcutil/silcbuffmt.c @@ -313,6 +313,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) SilcBufferParamType fmt; unsigned char *start_ptr = src->data; int len = 0; + SilcBool advance = FALSE; /* Parse the arguments by formatting type. */ while(1) { @@ -647,6 +648,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) break; } case SILC_PARAM_ADVANCE: + advance = TRUE; break; case SILC_PARAM_END: goto ok; @@ -660,15 +662,17 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) } fail: - SILC_LOG_DEBUG(("Error occured while unformatting buffer")); + SILC_LOG_DEBUG(("Error occured while unformatting buffer, type %d", fmt)); len = src->data - start_ptr; silc_buffer_push(src, len); return -1; ok: /* Push the buffer back to the start. */ - len = src->data - start_ptr; - silc_buffer_push(src, len); + if (!advance) { + len = src->data - start_ptr; + silc_buffer_push(src, len); + } return len; } -- 2.24.0