From 9904338bb9f311aab13da2c4a1947ba6c491bab0 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 22 Oct 2006 10:35:10 +0000 Subject: [PATCH] Added SILC_STR_BUFFER to format SilcBuffer. --- lib/silcutil/silcbuffmt.c | 201 +++++++++++++++++++++++--------------- lib/silcutil/silcbuffmt.h | 189 +++++++++++++++++++---------------- 2 files changed, 227 insertions(+), 163 deletions(-) diff --git a/lib/silcutil/silcbuffmt.c b/lib/silcutil/silcbuffmt.c index 902d2805..1ec22d00 100644 --- a/lib/silcutil/silcbuffmt.c +++ b/lib/silcutil/silcbuffmt.c @@ -85,7 +85,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) fmt = va_arg(ap, SilcBufferParamType); switch(fmt) { - case SILC_BUFFER_PARAM_OFFSET: + case SILC_PARAM_OFFSET: { int offst = va_arg(ap, int); if (!offst) @@ -101,7 +101,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) } break; } - case SILC_BUFFER_PARAM_SI8_CHAR: + case SILC_PARAM_SI8_CHAR: { char x = (char)va_arg(ap, int); FORMAT_HAS_SPACE(stack, dst, 1); @@ -109,7 +109,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 1); break; } - case SILC_BUFFER_PARAM_UI8_CHAR: + case SILC_PARAM_UI8_CHAR: { unsigned char x = (unsigned char)va_arg(ap, int); FORMAT_HAS_SPACE(stack, dst, 1); @@ -117,7 +117,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 1); break; } - case SILC_BUFFER_PARAM_SI16_SHORT: + case SILC_PARAM_SI16_SHORT: { unsigned char xf[2]; SilcInt16 x = (SilcInt16)va_arg(ap, int); @@ -127,7 +127,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 2); break; } - case SILC_BUFFER_PARAM_UI16_SHORT: + case SILC_PARAM_UI16_SHORT: { unsigned char xf[2]; SilcUInt16 x = (SilcUInt16)va_arg(ap, int); @@ -137,7 +137,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 2); break; } - case SILC_BUFFER_PARAM_SI32_INT: + case SILC_PARAM_SI32_INT: { unsigned char xf[4]; SilcInt32 x = va_arg(ap, SilcInt32); @@ -147,7 +147,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 4); break; } - case SILC_BUFFER_PARAM_UI32_INT: + case SILC_PARAM_UI32_INT: { unsigned char xf[4]; SilcUInt32 x = va_arg(ap, SilcUInt32); @@ -157,7 +157,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 4); break; } - case SILC_BUFFER_PARAM_SI64_INT: + case SILC_PARAM_SI64_INT: { unsigned char xf[8]; SilcInt64 x = va_arg(ap, SilcInt64); @@ -167,7 +167,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, sizeof(SilcInt64)); break; } - case SILC_BUFFER_PARAM_UI64_INT: + case SILC_PARAM_UI64_INT: { unsigned char xf[8]; SilcUInt64 x = va_arg(ap, SilcUInt64); @@ -177,12 +177,12 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, sizeof(SilcUInt64)); 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: + case SILC_PARAM_UI8_STRING: + case SILC_PARAM_UI16_STRING: + case SILC_PARAM_UI32_STRING: + case SILC_PARAM_UI8_STRING_ALLOC: + 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); @@ -191,16 +191,16 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) 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_DATA: - 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: - case SILC_BUFFER_PARAM_DATA_ALLOC: + case SILC_PARAM_UI8_NSTRING: + case SILC_PARAM_UI16_NSTRING: + case SILC_PARAM_UI32_NSTRING: + case SILC_PARAM_UI_XNSTRING: + case SILC_PARAM_DATA: + case SILC_PARAM_UI8_NSTRING_ALLOC: + case SILC_PARAM_UI16_NSTRING_ALLOC: + case SILC_PARAM_UI32_NSTRING_ALLOC: + case SILC_PARAM_UI_XNSTRING_ALLOC: + case SILC_PARAM_DATA_ALLOC: { unsigned char *x = va_arg(ap, unsigned char *); SilcUInt32 tmp_len = va_arg(ap, SilcUInt32); @@ -211,10 +211,25 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) } break; } - case SILC_BUFFER_PARAM_END: + case SILC_PARAM_BUFFER: + case SILC_PARAM_BUFFER_ALLOC: + { + SilcBuffer x = va_arg(ap, SilcBuffer); + unsigned char xf[4]; + if (x && silc_buffer_len(x)) { + FORMAT_HAS_SPACE(stack, dst, silc_buffer_len(x) + 4); + SILC_PUT32_MSB(silc_buffer_len(x), xf); + silc_buffer_put(dst, xf, 4); + silc_buffer_pull(dst, 4); + silc_buffer_put(dst, silc_buffer_data(x), silc_buffer_len(x)); + silc_buffer_pull(dst, silc_buffer_len(x)); + } + } + break; + case SILC_PARAM_END: goto ok; break; - case SILC_BUFFER_PARAM_ADVANCE: + case SILC_PARAM_ADVANCE: advance = TRUE; break; default: @@ -264,7 +279,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) fmt = va_arg(ap, SilcBufferParamType); switch(fmt) { - case SILC_BUFFER_PARAM_OFFSET: + case SILC_PARAM_OFFSET: { int offst = va_arg(ap, int); if (!offst) @@ -277,7 +292,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) } break; } - case SILC_BUFFER_PARAM_SI8_CHAR: + case SILC_PARAM_SI8_CHAR: { char *x = va_arg(ap, char *); UNFORMAT_HAS_SPACE(src, 1); @@ -286,7 +301,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 1); break; } - case SILC_BUFFER_PARAM_UI8_CHAR: + case SILC_PARAM_UI8_CHAR: { unsigned char *x = va_arg(ap, unsigned char *); UNFORMAT_HAS_SPACE(src, 1); @@ -295,7 +310,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 1); break; } - case SILC_BUFFER_PARAM_SI16_SHORT: + case SILC_PARAM_SI16_SHORT: { SilcInt16 *x = va_arg(ap, SilcInt16 *); UNFORMAT_HAS_SPACE(src, 2); @@ -304,7 +319,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 2); break; } - case SILC_BUFFER_PARAM_UI16_SHORT: + case SILC_PARAM_UI16_SHORT: { SilcUInt16 *x = va_arg(ap, SilcUInt16 *); UNFORMAT_HAS_SPACE(src, 2); @@ -313,7 +328,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 2); break; } - case SILC_BUFFER_PARAM_SI32_INT: + case SILC_PARAM_SI32_INT: { SilcInt32 *x = va_arg(ap, SilcInt32 *); UNFORMAT_HAS_SPACE(src, 4); @@ -322,7 +337,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 4); break; } - case SILC_BUFFER_PARAM_UI32_INT: + case SILC_PARAM_UI32_INT: { SilcUInt32 *x = va_arg(ap, SilcUInt32 *); UNFORMAT_HAS_SPACE(src, 4); @@ -331,7 +346,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, 4); break; } - case SILC_BUFFER_PARAM_SI64_INT: + case SILC_PARAM_SI64_INT: { SilcInt64 *x = va_arg(ap, SilcInt64 *); UNFORMAT_HAS_SPACE(src, sizeof(SilcInt64)); @@ -340,7 +355,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, sizeof(SilcInt64)); break; } - case SILC_BUFFER_PARAM_UI64_INT: + case SILC_PARAM_UI64_INT: { SilcUInt64 *x = va_arg(ap, SilcUInt64 *); UNFORMAT_HAS_SPACE(src, sizeof(SilcUInt64)); @@ -349,7 +364,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, sizeof(SilcUInt64)); break; } - case SILC_BUFFER_PARAM_UI8_STRING: + case SILC_PARAM_UI8_STRING: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -362,7 +377,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI16_STRING: + case SILC_PARAM_UI16_STRING: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -375,7 +390,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI8_STRING_ALLOC: + case SILC_PARAM_UI8_STRING_ALLOC: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -390,7 +405,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI16_STRING_ALLOC: + case SILC_PARAM_UI16_STRING_ALLOC: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -405,7 +420,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI32_STRING: + case SILC_PARAM_UI32_STRING: { SilcUInt32 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -418,7 +433,7 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI32_STRING_ALLOC: + case SILC_PARAM_UI32_STRING_ALLOC: { SilcUInt32 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -433,49 +448,49 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI8_NSTRING: + case SILC_PARAM_UI8_NSTRING: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt8 *len = va_arg(ap, SilcUInt8 *); + SilcUInt8 *len3 = va_arg(ap, SilcUInt8 *); UNFORMAT_HAS_SPACE(src, 1); len2 = (SilcUInt8)src->data[0]; silc_buffer_pull(src, 1); UNFORMAT_HAS_SPACE(src, len2); - if (len) - *len = len2; + if (len3) + *len3 = len2; if (x) *x = src->data; silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI16_NSTRING: + case SILC_PARAM_UI16_NSTRING: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt16 *len = va_arg(ap, SilcUInt16 *); + SilcUInt16 *len3 = va_arg(ap, SilcUInt16 *); UNFORMAT_HAS_SPACE(src, 2); SILC_GET16_MSB(len2, src->data); silc_buffer_pull(src, 2); UNFORMAT_HAS_SPACE(src, len2); - if (len) - *len = len2; + if (len3) + *len3 = len2; if (x) *x = src->data; silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI8_NSTRING_ALLOC: + case SILC_PARAM_UI8_NSTRING_ALLOC: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt8 *len = va_arg(ap, SilcUInt8 *); + SilcUInt8 *len3 = va_arg(ap, SilcUInt8 *); UNFORMAT_HAS_SPACE(src, 1); len2 = (SilcUInt8)src->data[0]; silc_buffer_pull(src, 1); UNFORMAT_HAS_SPACE(src, len2); - if (len) - *len = len2; + if (len3) + *len3 = len2; if (x && len2) { *x = silc_calloc(len2 + 1, sizeof(unsigned char)); memcpy(*x, src->data, len2); @@ -483,17 +498,17 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI16_NSTRING_ALLOC: + case SILC_PARAM_UI16_NSTRING_ALLOC: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt16 *len = va_arg(ap, SilcUInt16 *); + SilcUInt16 *len3 = va_arg(ap, SilcUInt16 *); UNFORMAT_HAS_SPACE(src, 2); SILC_GET16_MSB(len2, src->data); silc_buffer_pull(src, 2); UNFORMAT_HAS_SPACE(src, len2); - if (len) - *len = len2; + if (len3) + *len3 = len2; if (x && len2) { *x = silc_calloc(len2 + 1, sizeof(unsigned char)); memcpy(*x, src->data, len2); @@ -501,50 +516,76 @@ int silc_buffer_unformat_vp(SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI32_NSTRING: + case SILC_PARAM_UI32_NSTRING: { SilcUInt32 len2; unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt32 *len = va_arg(ap, SilcUInt32 *); + SilcUInt32 *len3 = va_arg(ap, SilcUInt32 *); UNFORMAT_HAS_SPACE(src, 4); SILC_GET32_MSB(len2, src->data); silc_buffer_pull(src, 4); UNFORMAT_HAS_SPACE(src, len2); - if (len) - *len = len2; + if (len3) + *len3 = len2; if (x) *x = src->data; silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI_XNSTRING: - case SILC_BUFFER_PARAM_DATA: + case SILC_PARAM_UI_XNSTRING: + case SILC_PARAM_DATA: { unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt32 len = va_arg(ap, SilcUInt32); - UNFORMAT_HAS_SPACE(src, len); - if (len && x) + SilcUInt32 len2 = va_arg(ap, SilcUInt32); + UNFORMAT_HAS_SPACE(src, len2); + if (len2 && x) *x = src->data; - silc_buffer_pull(src, len); + silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_UI_XNSTRING_ALLOC: - case SILC_BUFFER_PARAM_DATA_ALLOC: + case SILC_PARAM_UI_XNSTRING_ALLOC: + case SILC_PARAM_DATA_ALLOC: { unsigned char **x = va_arg(ap, unsigned char **); - SilcUInt32 len = va_arg(ap, SilcUInt32); - UNFORMAT_HAS_SPACE(src, len); - if (len && x) { - *x = silc_calloc(len + 1, sizeof(unsigned char)); - memcpy(*x, src->data, len); + SilcUInt32 len2 = va_arg(ap, SilcUInt32); + UNFORMAT_HAS_SPACE(src, len2); + if (len2 && x) { + *x = silc_calloc(len2 + 1, sizeof(unsigned char)); + memcpy(*x, src->data, len2); } - silc_buffer_pull(src, len); + silc_buffer_pull(src, len2); break; } - case SILC_BUFFER_PARAM_END: + case SILC_PARAM_BUFFER: + { + SilcBuffer x = va_arg(ap, SilcBuffer); + SilcUInt32 len2; + UNFORMAT_HAS_SPACE(src, 4); + SILC_GET32_MSB(len2, src->data); + silc_buffer_pull(src, 4); + UNFORMAT_HAS_SPACE(src, len2); + silc_buffer_set(x, src->data, len2); + silc_buffer_pull(src, len2); + } + break; + case SILC_PARAM_BUFFER_ALLOC: + { + SilcBuffer x = va_arg(ap, SilcBuffer); + SilcUInt32 len2; + UNFORMAT_HAS_SPACE(src, 4); + SILC_GET32_MSB(len2, src->data); + silc_buffer_pull(src, 4); + UNFORMAT_HAS_SPACE(src, len2); + silc_buffer_format(x, + SILC_STR_DATA(src->data, len2), + SILC_STR_END); + silc_buffer_pull(src, len2); + } + break; + case SILC_PARAM_END: goto ok; break; - case SILC_BUFFER_PARAM_ADVANCE: + case SILC_PARAM_ADVANCE: break; default: SILC_LOG_DEBUG(("Bad buffer formatting type `%d'. Could not " @@ -588,7 +629,7 @@ int silc_buffer_strformat(SilcBuffer dst, ...) if (!string) continue; - if (string == (char *)SILC_BUFFER_PARAM_END) + if (string == (char *)SILC_PARAM_END) goto ok; slen = strlen(string); @@ -632,7 +673,7 @@ int silc_buffer_sstrformat(SilcStack stack, SilcBuffer dst, ...) if (!string) continue; - if (string == (char *)SILC_BUFFER_PARAM_END) + if (string == (char *)SILC_PARAM_END) goto ok; slen = strlen(string); diff --git a/lib/silcutil/silcbuffmt.h b/lib/silcutil/silcbuffmt.h index 271137bf..9fbdfe0a 100644 --- a/lib/silcutil/silcbuffmt.h +++ b/lib/silcutil/silcbuffmt.h @@ -202,58 +202,58 @@ int silc_buffer_strformat(SilcBuffer dst, ...); ***/ int silc_buffer_sstrformat(SilcStack stack, SilcBuffer dst, ...); -/* Macros for expanding parameters into variable function argument list. - These are passed to silc_buffer_format and silc_buffer_unformat - functions. */ - -/* Buffer parameter types. - - _SI_ = signed - _UI_ = unsigned - - Any XXX_STRING_ALLOC types will allocate space for the data and - memcpy the data to the pointer sent as argument (in unformatting). - - Any XXX_STRING will not allocate or copy any data. Instead it - will set the pointer to the data. Note that the data pointer - returned (in unformatting) must not be freed. - -*/ +/****d* silcutil/SilcBufferFormatAPI/SilcBufferParamType + * + * NAME + * + * typedef enum { ... } SilcBufferParamType; + * + * DESCRIPTION + * + * Buffer parameter types. These are not needed when formatting or + * unformatting buffers. Use the macros such as SILC_STR_UI_CHAR and + * others instead. These types may be used when describing what a + * buffer looks like, and how it may be formatted and unformatted. + * + * SOURCE + */ typedef enum { - SILC_BUFFER_PARAM_SI8_CHAR, - SILC_BUFFER_PARAM_UI8_CHAR, - - SILC_BUFFER_PARAM_SI16_SHORT, - SILC_BUFFER_PARAM_UI16_SHORT, - - SILC_BUFFER_PARAM_SI32_INT, - SILC_BUFFER_PARAM_UI32_INT, - - SILC_BUFFER_PARAM_SI64_INT, - SILC_BUFFER_PARAM_UI64_INT, - - SILC_BUFFER_PARAM_UI8_STRING, /* No copy */ - SILC_BUFFER_PARAM_UI8_STRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI16_STRING, /* No copy */ - SILC_BUFFER_PARAM_UI16_STRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI32_STRING, /* No copy */ - SILC_BUFFER_PARAM_UI32_STRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI8_NSTRING, /* No copy */ - SILC_BUFFER_PARAM_UI8_NSTRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI16_NSTRING, /* No copy */ - SILC_BUFFER_PARAM_UI16_NSTRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI32_NSTRING, /* No copy */ - SILC_BUFFER_PARAM_UI32_NSTRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_UI_XNSTRING, /* No copy */ - SILC_BUFFER_PARAM_UI_XNSTRING_ALLOC, /* Alloc + memcpy */ - SILC_BUFFER_PARAM_DATA, /* No copy */ - SILC_BUFFER_PARAM_DATA_ALLOC, /* Alloc + memcpy */ - - SILC_BUFFER_PARAM_OFFSET, - SILC_BUFFER_PARAM_ADVANCE, - - SILC_BUFFER_PARAM_END + SILC_PARAM_SI8_CHAR, /* Signed 8-bit char */ + SILC_PARAM_UI8_CHAR, /* Unsigned 8-bit char */ + SILC_PARAM_SI16_SHORT, /* Signed 16-bit int */ + SILC_PARAM_UI16_SHORT, /* Unsigned 16-bit int */ + SILC_PARAM_SI32_INT, /* Signed 32-bit int */ + SILC_PARAM_UI32_INT, /* Unsigned 32-bit int */ + SILC_PARAM_SI64_INT, /* Signed 64-bit int */ + SILC_PARAM_UI64_INT, /* Unsigned 64-bit int */ + SILC_PARAM_UI8_STRING, /* String (max len 8-bits)*/ + SILC_PARAM_UI16_STRING, /* String (max len 16-bits) */ + SILC_PARAM_UI32_STRING, /* String (max len 32-bits) */ + SILC_PARAM_BUFFER, /* SilcBuffer */ + + /* Internal types */ + SILC_PARAM_DATA, /* Binary data */ + SILC_PARAM_UI8_NSTRING, /* String (max len 8-bits) */ + SILC_PARAM_UI16_NSTRING, /* String (max len 16-bits) */ + SILC_PARAM_UI32_NSTRING, /* String (max len 32-bits) */ + SILC_PARAM_UI8_STRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_UI16_STRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_UI32_STRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_UI8_NSTRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_UI16_NSTRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_UI32_NSTRING_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_DATA_ALLOC, /* Alloc + memcpy */ + SILC_PARAM_BUFFER_ALLOC, /* Alloc + memcpy */ + + SILC_PARAM_OFFSET, + SILC_PARAM_ADVANCE, + + SILC_PARAM_UI_XNSTRING, + SILC_PARAM_UI_XNSTRING_ALLOC, + + SILC_PARAM_END } SilcBufferParamType; +/***/ /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_CHAR * @@ -272,8 +272,8 @@ typedef enum { * SILC_STR_UI_CHAR(unsigned char *) * ***/ -#define SILC_STR_SI_CHAR(x) SILC_BUFFER_PARAM_SI8_CHAR, (x) -#define SILC_STR_UI_CHAR(x) SILC_BUFFER_PARAM_UI8_CHAR, (x) +#define SILC_STR_SI_CHAR(x) SILC_PARAM_SI8_CHAR, (x) +#define SILC_STR_UI_CHAR(x) SILC_PARAM_UI8_CHAR, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_SHORT * @@ -284,7 +284,7 @@ typedef enum { * * DESCRIPTION * - * Signed/SilcUInt16. + * SilcInt16/SilcUInt16. * * Formatting: SILC_STR_SI_SHORT(short) * SILC_STR_UI_SHORT(SilcUInt16) @@ -292,8 +292,8 @@ typedef enum { * SILC_STR_UI_SHORT(SilcUInt16 *) * ***/ -#define SILC_STR_SI_SHORT(x) SILC_BUFFER_PARAM_SI16_SHORT, (x) -#define SILC_STR_UI_SHORT(x) SILC_BUFFER_PARAM_UI16_SHORT, (x) +#define SILC_STR_SI_SHORT(x) SILC_PARAM_SI16_SHORT, (x) +#define SILC_STR_UI_SHORT(x) SILC_PARAM_UI16_SHORT, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT * @@ -304,7 +304,7 @@ typedef enum { * * DESCRIPTION * - * Signed/SilcUInt32. + * SilcInt32/SilcUInt32. * * Formatting: SILC_STR_SI_INT(int) * SILC_STR_UI_INT(SilcUInt32) @@ -312,8 +312,8 @@ typedef enum { * SILC_STR_UI_INT(SilcUInt32 *) * ***/ -#define SILC_STR_SI_INT(x) SILC_BUFFER_PARAM_SI32_INT, (x) -#define SILC_STR_UI_INT(x) SILC_BUFFER_PARAM_UI32_INT, (x) +#define SILC_STR_SI_INT(x) SILC_PARAM_SI32_INT, (x) +#define SILC_STR_UI_INT(x) SILC_PARAM_UI32_INT, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT64 * @@ -324,7 +324,7 @@ typedef enum { * * DESCRIPTION * - * Signed/SilcUInt64. + * SilcInt64/SilcUInt64. * * Formatting: SILC_STR_SI_INT64(int) * SILC_STR_UI_INT64(SilcUInt32) @@ -332,8 +332,8 @@ typedef enum { * SILC_STR_UI_INT64(SilcUInt32 *) * ***/ -#define SILC_STR_SI_INT64(x) SILC_BUFFER_PARAM_SI64_INT, (x) -#define SILC_STR_UI_INT64(x) SILC_BUFFER_PARAM_UI64_INT, (x) +#define SILC_STR_SI_INT64(x) SILC_PARAM_SI64_INT, (x) +#define SILC_STR_UI_INT64(x) SILC_PARAM_UI64_INT, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_STRING * @@ -378,12 +378,12 @@ typedef enum { * as argument in unformatting. * ***/ -#define SILC_STR_UI8_STRING(x) SILC_BUFFER_PARAM_UI8_STRING, (x) -#define SILC_STR_UI8_STRING_ALLOC(x) SILC_BUFFER_PARAM_UI8_STRING_ALLOC, (x) -#define SILC_STR_UI16_STRING(x) SILC_BUFFER_PARAM_UI16_STRING, (x) -#define SILC_STR_UI16_STRING_ALLOC(x) SILC_BUFFER_PARAM_UI16_STRING_ALLOC, (x) -#define SILC_STR_UI32_STRING(x) SILC_BUFFER_PARAM_UI32_STRING, (x) -#define SILC_STR_UI32_STRING_ALLOC(x) SILC_BUFFER_PARAM_UI32_STRING_ALLOC, (x) +#define SILC_STR_UI8_STRING(x) SILC_PARAM_UI8_STRING, (x) +#define SILC_STR_UI8_STRING_ALLOC(x) SILC_PARAM_UI8_STRING_ALLOC, (x) +#define SILC_STR_UI16_STRING(x) SILC_PARAM_UI16_STRING, (x) +#define SILC_STR_UI16_STRING_ALLOC(x) SILC_PARAM_UI16_STRING_ALLOC, (x) +#define SILC_STR_UI32_STRING(x) SILC_PARAM_UI32_STRING, (x) +#define SILC_STR_UI32_STRING_ALLOC(x) SILC_PARAM_UI32_STRING_ALLOC, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_NSTRING * @@ -428,15 +428,15 @@ typedef enum { * as argument in unformatting. * ***/ -#define SILC_STR_UI8_NSTRING(x, l) SILC_BUFFER_PARAM_UI8_NSTRING, (x), (l) +#define SILC_STR_UI8_NSTRING(x, l) SILC_PARAM_UI8_NSTRING, (x), (l) #define SILC_STR_UI8_NSTRING_ALLOC(x, l) \ - SILC_BUFFER_PARAM_UI8_NSTRING_ALLOC, (x), (l) -#define SILC_STR_UI16_NSTRING(x, l) SILC_BUFFER_PARAM_UI16_NSTRING, (x), (l) + SILC_PARAM_UI8_NSTRING_ALLOC, (x), (l) +#define SILC_STR_UI16_NSTRING(x, l) SILC_PARAM_UI16_NSTRING, (x), (l) #define SILC_STR_UI16_NSTRING_ALLOC(x, l) \ - SILC_BUFFER_PARAM_UI16_NSTRING_ALLOC, (x), (l) -#define SILC_STR_UI32_NSTRING(x, l) SILC_BUFFER_PARAM_UI32_NSTRING, (x), (l) + SILC_PARAM_UI16_NSTRING_ALLOC, (x), (l) +#define SILC_STR_UI32_NSTRING(x, l) SILC_PARAM_UI32_NSTRING, (x), (l) #define SILC_STR_UI32_NSTRING_ALLOC(x, l) \ - SILC_BUFFER_PARAM_UI32_NSTRING_ALLOC, (x), (l) + SILC_PARAM_UI32_NSTRING_ALLOC, (x), (l) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_DATA * @@ -447,7 +447,7 @@ typedef enum { * * DESCRIPTION * - * Binary data formatting. Second argument is the lenght of the data. + * Binary data formatting. Second argument is the length of the data. * * Formatting: SILC_STR_DATA(unsigned char *, SilcUInt32) * Unformatting: SILC_STR_DATA(unsigned char **, SilcUInt32) @@ -459,14 +459,37 @@ typedef enum { * as argument in unformatting. * ***/ -#define SILC_STR_DATA(x, l) SILC_BUFFER_PARAM_DATA, (x), (l) -#define SILC_STR_DATA_ALLOC(x, l) \ - SILC_BUFFER_PARAM_DATA_ALLOC, (x), (l) +#define SILC_STR_DATA(x, l) SILC_PARAM_DATA, (x), (l) +#define SILC_STR_DATA_ALLOC(x, l) SILC_PARAM_DATA_ALLOC, (x), (l) /* Deprecated */ -#define SILC_STR_UI_XNSTRING(x, l) SILC_BUFFER_PARAM_UI_XNSTRING, (x), (l) -#define SILC_STR_UI_XNSTRING_ALLOC(x, l) \ - SILC_BUFFER_PARAM_UI_XNSTRING_ALLOC, (x), (l) +#define SILC_STR_UI_XNSTRING(x, l) SILC_PARAM_UI_XNSTRING, (x), (l) +#define SILC_STR_UI_XNSTRING_ALLOC(x, l) SILC_PARAM_UI_XNSTRING_ALLOC, (x), (l) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_BUFFER + * + * NAME + * + * #define SILC_STR_BUFFER() ... + * #define SILC_STR_BUFFER_ALLOC() ... + * + * DESCRIPTION + * + * SilcBuffer formatting. + * + * Formatting: SILC_STR_DATA(SilcBuffer) + * Unformatting: SILC_STR_DATA(SilcBuffer) + * + * This type can be used to format and unformat SilcBuffer. The lenght + * of the buffer will be automatically encoded into the buffer as a 32-bit + * integer. In unformatting the SilcBuffer context must be pre-allocated. + * + * _ALLOC routines automatically allocates memory inside SilcBuffer in + * unformatting. + * + ***/ +#define SILC_STR_BUFFER(x) SILC_BUFFER_DATA, (x) +#define SILC_STR_BUFFER_ALLOC(x) SILC_PARAM_BUFFER_ALLOC, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_OFFSET * @@ -491,7 +514,7 @@ typedef enum { * can be used in formatting and unformatting at the same time. * ***/ -#define SILC_STR_OFFSET(x) SILC_BUFFER_PARAM_OFFSET, (x) +#define SILC_STR_OFFSET(x) SILC_PARAM_OFFSET, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_ADVANCE * @@ -523,7 +546,7 @@ typedef enum { * silc_buffer_push(buffer, silc_buffer_truelen(buffer)); * ***/ -#define SILC_STR_ADVANCE SILC_BUFFER_PARAM_ADVANCE +#define SILC_STR_ADVANCE SILC_PARAM_ADVANCE /****d* silcutil/SilcBufferFormatAPI/SILC_STR_END * @@ -537,7 +560,7 @@ typedef enum { * argument list or error will occur. * ***/ -#define SILC_STR_END SILC_BUFFER_PARAM_END +#define SILC_STR_END SILC_PARAM_END /****d* silcutil/SilcBufferFormatAPI/SILC_STRFMT_END * -- 2.24.0