From: Pekka Riikonen Date: Sun, 30 Dec 2007 12:46:48 +0000 (+0000) Subject: Moved SILC_PARAM_* types under generic SilcParam type into the X-Git-Tag: 1.2.beta1~48 X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=commitdiff_plain;h=687f7e441ffa2fa6a6726bc2851ca7c2c436be45 Moved SILC_PARAM_* types under generic SilcParam type into the silctypes.h. --- diff --git a/lib/silcutil/silcbuffmt.c b/lib/silcutil/silcbuffmt.c index 3a789fc9..b0c5d5c5 100644 --- a/lib/silcutil/silcbuffmt.c +++ b/lib/silcutil/silcbuffmt.c @@ -78,15 +78,17 @@ int silc_buffer_sformat(SilcStack stack, SilcBuffer dst, ...) int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) { - SilcBufferParamType fmt; + SilcParam fmt; int flen = 0; SilcBool advance = FALSE; /* Parse the arguments by formatting type. */ while (1) { - fmt = va_arg(ap, SilcBufferParamType); + fmt = va_arg(ap, SilcParam); - switch(fmt) { + SILC_LOG_DEBUG(("Buffer format type %x", fmt)); + + switch (fmt) { case SILC_PARAM_FUNC: { SilcBufferFormatFunc func; @@ -108,9 +110,9 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) 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: + case SILC_PARAM_UI8_STRING | SILC_PARAM_ALLOC: + case SILC_PARAM_UI16_STRING | SILC_PARAM_ALLOC: + case SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC: { char *x = va_arg(ap, char *); SilcUInt32 tmp_len = x ? strlen(x) : 0; @@ -124,13 +126,11 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) 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: + case SILC_PARAM_UICHAR: + case SILC_PARAM_UI8_NSTRING | SILC_PARAM_ALLOC: + case SILC_PARAM_UI16_NSTRING | SILC_PARAM_ALLOC: + case SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC: + case SILC_PARAM_UICHAR | SILC_PARAM_ALLOC: { unsigned char *x = va_arg(ap, unsigned char *); SilcUInt32 tmp_len = va_arg(ap, SilcUInt32); @@ -141,7 +141,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) } break; } - case SILC_PARAM_UI8_CHAR: + case SILC_PARAM_UINT8: { unsigned char x = (unsigned char)va_arg(ap, int); FORMAT_HAS_SPACE(stack, dst, 1); @@ -149,7 +149,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 1); break; } - case SILC_PARAM_UI16_SHORT: + case SILC_PARAM_UINT16: { unsigned char xf[2]; SilcUInt16 x = (SilcUInt16)va_arg(ap, int); @@ -159,7 +159,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 2); break; } - case SILC_PARAM_UI32_INT: + case SILC_PARAM_UINT32: { unsigned char xf[4]; SilcUInt32 x = va_arg(ap, SilcUInt32); @@ -169,7 +169,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 4); break; } - case SILC_PARAM_UI64_INT: + case SILC_PARAM_UINT64: { unsigned char xf[8]; SilcUInt64 x = va_arg(ap, SilcUInt64); @@ -179,7 +179,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, sizeof(SilcUInt64)); break; } - case SILC_PARAM_SI8_CHAR: + case SILC_PARAM_SINT8: { char x = (char)va_arg(ap, int); FORMAT_HAS_SPACE(stack, dst, 1); @@ -187,7 +187,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 1); break; } - case SILC_PARAM_SI16_SHORT: + case SILC_PARAM_SINT16: { unsigned char xf[2]; SilcInt16 x = (SilcInt16)va_arg(ap, int); @@ -197,7 +197,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 2); break; } - case SILC_PARAM_SI32_INT: + case SILC_PARAM_SINT32: { unsigned char xf[4]; SilcInt32 x = va_arg(ap, SilcInt32); @@ -207,7 +207,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) silc_buffer_pull(dst, 4); break; } - case SILC_PARAM_SI64_INT: + case SILC_PARAM_SINT64: { unsigned char xf[8]; SilcInt64 x = va_arg(ap, SilcInt64); @@ -218,7 +218,7 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap) break; } case SILC_PARAM_BUFFER: - case SILC_PARAM_BUFFER_ALLOC: + case SILC_PARAM_BUFFER | SILC_PARAM_ALLOC: { SilcBuffer x = va_arg(ap, SilcBuffer); unsigned char xf[4]; @@ -313,16 +313,18 @@ int silc_buffer_sunformat(SilcStack stack, SilcBuffer src, ...) int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) { - SilcBufferParamType fmt; + SilcParam fmt; unsigned char *start_ptr = src->data; int len = 0; SilcBool advance = FALSE; /* Parse the arguments by formatting type. */ - while(1) { - fmt = va_arg(ap, SilcBufferParamType); + while (1) { + fmt = va_arg(ap, SilcParam); - switch(fmt) { + SILC_LOG_DEBUG(("Buffer unformat type %x", fmt)); + + switch (fmt) { case SILC_PARAM_FUNC: { SilcBufferUnformatFunc func; @@ -340,8 +342,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, tmp_len); } } - case SILC_PARAM_UI_XNSTRING: - case SILC_PARAM_DATA: + case SILC_PARAM_UICHAR: { unsigned char **x = va_arg(ap, unsigned char **); SilcUInt32 len2 = va_arg(ap, SilcUInt32); @@ -351,8 +352,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI_XNSTRING_ALLOC: - case SILC_PARAM_DATA_ALLOC: + case SILC_PARAM_UICHAR | SILC_PARAM_ALLOC: { unsigned char **x = va_arg(ap, unsigned char **); SilcUInt32 len2 = va_arg(ap, SilcUInt32); @@ -364,7 +364,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI8_CHAR: + case SILC_PARAM_UINT8: { unsigned char *x = va_arg(ap, unsigned char *); UNFORMAT_HAS_SPACE(src, 1); @@ -373,7 +373,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 1); break; } - case SILC_PARAM_UI16_SHORT: + case SILC_PARAM_UINT16: { SilcUInt16 *x = va_arg(ap, SilcUInt16 *); UNFORMAT_HAS_SPACE(src, 2); @@ -382,7 +382,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 2); break; } - case SILC_PARAM_UI32_INT: + case SILC_PARAM_UINT32: { SilcUInt32 *x = va_arg(ap, SilcUInt32 *); UNFORMAT_HAS_SPACE(src, 4); @@ -391,7 +391,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 4); break; } - case SILC_PARAM_UI64_INT: + case SILC_PARAM_UINT64: { SilcUInt64 *x = va_arg(ap, SilcUInt64 *); UNFORMAT_HAS_SPACE(src, sizeof(SilcUInt64)); @@ -400,7 +400,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, sizeof(SilcUInt64)); break; } - case SILC_PARAM_SI8_CHAR: + case SILC_PARAM_SINT8: { char *x = va_arg(ap, char *); UNFORMAT_HAS_SPACE(src, 1); @@ -409,7 +409,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 1); break; } - case SILC_PARAM_SI16_SHORT: + case SILC_PARAM_SINT16: { SilcInt16 *x = va_arg(ap, SilcInt16 *); UNFORMAT_HAS_SPACE(src, 2); @@ -418,7 +418,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 2); break; } - case SILC_PARAM_SI32_INT: + case SILC_PARAM_SINT32: { SilcInt32 *x = va_arg(ap, SilcInt32 *); UNFORMAT_HAS_SPACE(src, 4); @@ -427,7 +427,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, 4); break; } - case SILC_PARAM_SI64_INT: + case SILC_PARAM_SINT64: { SilcInt64 *x = va_arg(ap, SilcInt64 *); UNFORMAT_HAS_SPACE(src, sizeof(SilcInt64)); @@ -449,20 +449,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI16_STRING: - { - SilcUInt16 len2; - unsigned char **x = va_arg(ap, unsigned char **); - UNFORMAT_HAS_SPACE(src, 2); - SILC_GET16_MSB(len2, src->data); - silc_buffer_pull(src, 2); - UNFORMAT_HAS_SPACE(src, len2); - if (silc_likely(x)) - *x = src->data; - silc_buffer_pull(src, len2); - break; - } - case SILC_PARAM_UI8_STRING_ALLOC: + case SILC_PARAM_UI8_STRING | SILC_PARAM_ALLOC: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -477,7 +464,20 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI16_STRING_ALLOC: + case SILC_PARAM_UI16_STRING: + { + SilcUInt16 len2; + unsigned char **x = va_arg(ap, unsigned char **); + UNFORMAT_HAS_SPACE(src, 2); + SILC_GET16_MSB(len2, src->data); + silc_buffer_pull(src, 2); + UNFORMAT_HAS_SPACE(src, len2); + if (silc_likely(x)) + *x = src->data; + silc_buffer_pull(src, len2); + break; + } + case SILC_PARAM_UI16_STRING | SILC_PARAM_ALLOC: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -505,7 +505,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI32_STRING_ALLOC: + case SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC: { SilcUInt32 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -536,23 +536,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI16_NSTRING: - { - SilcUInt16 len2; - unsigned char **x = va_arg(ap, unsigned char **); - 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 (len3) - *len3 = len2; - if (x) - *x = src->data; - silc_buffer_pull(src, len2); - break; - } - case SILC_PARAM_UI8_NSTRING_ALLOC: + case SILC_PARAM_UI8_NSTRING | SILC_PARAM_ALLOC: { SilcUInt8 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -570,7 +554,23 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } - case SILC_PARAM_UI16_NSTRING_ALLOC: + case SILC_PARAM_UI16_NSTRING: + { + SilcUInt16 len2; + unsigned char **x = va_arg(ap, unsigned char **); + 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 (len3) + *len3 = len2; + if (x) + *x = src->data; + silc_buffer_pull(src, len2); + break; + } + case SILC_PARAM_UI16_NSTRING | SILC_PARAM_ALLOC: { SilcUInt16 len2; unsigned char **x = va_arg(ap, unsigned char **); @@ -604,6 +604,24 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); break; } + case SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC: + { + SilcUInt32 len2; + unsigned char **x = va_arg(ap, unsigned char **); + 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 (len3) + *len3 = len2; + if (silc_likely(x && len2)) { + *x = silc_scalloc(stack, len2 + 1, sizeof(unsigned char)); + memcpy(*x, src->data, len2); + } + silc_buffer_pull(src, len2); + break; + } case SILC_PARAM_BUFFER: { SilcBuffer x = va_arg(ap, SilcBuffer); @@ -616,7 +634,7 @@ int silc_buffer_sunformat_vp(SilcStack stack, SilcBuffer src, va_list ap) silc_buffer_pull(src, len2); } break; - case SILC_PARAM_BUFFER_ALLOC: + case SILC_PARAM_BUFFER | SILC_PARAM_ALLOC: { SilcBuffer x = va_arg(ap, SilcBuffer); SilcUInt32 len2; diff --git a/lib/silcutil/silcbuffmt.h b/lib/silcutil/silcbuffmt.h index d1745d1a..6e530f54 100644 --- a/lib/silcutil/silcbuffmt.h +++ b/lib/silcutil/silcbuffmt.h @@ -23,7 +23,7 @@ * * SILC Buffer Format API provides functions for formatting different data * types into a buffer and retrieving different data types from a buffer - * into specified data types. It is especially useful to format packets, + * into specified data types. It is especially useful to encode packets, * protocol payloads and such. * * As the SilcBuffer API is not thread-safe these routines may not be used @@ -36,10 +36,10 @@ * * memset(&buffer, 0, sizeof(buffer)); * ret = silc_buffer_format(&buffer, - * SILC_STR_UI_INT(intval), - * SILC_STR_CHAR(charval), - * SILC_STR_UI_INT(intval), - * SILC_STR_SHORT(str_len), + * SILC_STR_UINT32(intval), + * SILC_STR_UINT8(charval), + * SILC_STR_UINT64(longintval), + * SILC_STR_UINT16(str_len), * SILC_STR_DATA(str, str_len), * SILC_STR_END); * if (ret < 0) @@ -134,10 +134,10 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer, * * memset(&buffer, 0, sizeof(buffer)); * ret = silc_buffer_format(&buffer, - * SILC_STR_UI_INT(intval), - * SILC_STR_CHAR(charval), - * SILC_STR_UI_INT(intval), - * SILC_STR_SHORT(str_len), + * SILC_STR_UINT32(intval), + * SILC_STR_UINT8(charval), + * SILC_STR_UINT32(intval), + * SILC_STR_UINT16(str_len), * SILC_STR_DATA(str, str_len), * SILC_STR_END); * if (ret < 0) @@ -150,8 +150,8 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer, * SilcBuffer buf; * buf = silc_buffer_alloc(0); * ret = silc_buffer_format(buf, - * SILC_STR_UI_INT(intval), - * SILC_STR_CHAR(charval), + * SILC_STR_UINT32(intval), + * SILC_STR_UINT8(charval), * SILC_STR_END); * if (ret < 0) * error; @@ -163,7 +163,7 @@ typedef int (*SilcBufferUnformatFunc)(SilcStack stack, SilcBuffer buffer, * SilcBuffer buf; * buf = silc_buffer_alloc(2 + str_len); * ret = silc_buffer_format(buf, - * SILC_STR_UI_SHORT(str_len), + * SILC_STR_UINT16(str_len), * SILC_STR_DATA(str, str_len), * SILC_STR_END); * if (ret < 0) @@ -237,8 +237,8 @@ int silc_buffer_sformat_vp(SilcStack stack, SilcBuffer dst, va_list ap); * EXAMPLE * * ret = silc_buffer_unformat(buffer, - * SILC_STR_UI_INT(&intval), - * SILC_STR_CHAR(&charval), + * SILC_STR_UINT32(&intval), + * SILC_STR_UINT8(&charval), * SILC_STR_OFFSET(4), * SILC_STR_UI16_NSTRING_ALLOC(&str, &str_len), * SILC_STR_END); @@ -343,139 +343,149 @@ int silc_buffer_strformat(SilcBuffer dst, ...); ***/ int silc_buffer_sstrformat(SilcStack stack, SilcBuffer dst, ...); -/****d* silcutil/SilcBufferFormatAPI/SilcBufferParamType +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT8 * * NAME * - * typedef enum { ... } SilcBufferParamType; + * #define SILC_STR_SINT8() ... * * 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_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_FUNC, - - SILC_PARAM_UI_XNSTRING, - SILC_PARAM_UI_XNSTRING_ALLOC, - - SILC_PARAM_END -} SilcBufferParamType; -/***/ - -/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_CHAR + * One 8-bit signed integer. + * + * Formatting: SILC_STR_SINT8(SilcInt8) + * Unformatting: SILC_STR_SINT8(SilcInt8 *) + * + ***/ +#define SILC_STR_SINT8(x) SILC_PARAM_SINT8, (x) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT8 + * + * NAME + * + * #define SILC_STR_UINT8() ... + * + * DESCRIPTION + * + * One 8-bit unsigned integer. + * + * Formatting: SILC_STR_UINT8(SilcUInt8) + * Unformatting: SILC_STR_UINT8(SilcUInt8 *) + * + ***/ +#define SILC_STR_UINT8(x) SILC_PARAM_UINT8, (x) + +/* Deprecated */ +#define SILC_STR_SI_CHAR(x) SILC_PARAM_SINT8, (x) +#define SILC_STR_UI_CHAR(x) SILC_PARAM_UINT8, (x) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT16 + * + * NAME + * + * #define SILC_STR_SINT16() ... + * + * DESCRIPTION + * + * SilcInt16. + * + * Formatting: SILC_STR_SINT16(SilcInt16) + * Unformatting: SILC_STR_SINT16(SilcInt16 *) + * + ***/ +#define SILC_STR_SINT16(x) SILC_PARAM_SINT16, (x) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT16 * * NAME * - * #define SILC_STR_UI_CHAR() ... - * #define SILC_STR_SI_CHAR() ... + * #define SILC_STR_UINT16() ... * * DESCRIPTION * - * One signed/unsigned character. + * SilcUInt16. * - * Formatting: SILC_STR_SI_CHAR(char) - * SILC_STR_UI_CHAR(unsigned char) - * Unformatting: SILC_STR_SI_CHAR(char *) - * SILC_STR_UI_CHAR(unsigned char *) + * Formatting: SILC_STR_UINT16(SilcUInt16) + * Unformatting: SILC_STR_UINT16(SilcUInt16 *) * ***/ -#define SILC_STR_SI_CHAR(x) SILC_PARAM_SI8_CHAR, (x) -#define SILC_STR_UI_CHAR(x) SILC_PARAM_UI8_CHAR, (x) +#define SILC_STR_UINT16(x) SILC_PARAM_UINT16, (x) -/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_SHORT +/* Deprecated */ +#define SILC_STR_SI_SHORT(x) SILC_PARAM_SINT16, (x) +#define SILC_STR_UI_SHORT(x) SILC_PARAM_UINT16, (x) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT32 * * NAME * - * #define SILC_STR_UI_SHORT() ... - * #define SILC_STR_SI_SHORT() ... + * #define SILC_STR_SINT32() ... * * DESCRIPTION * - * SilcInt16/SilcUInt16. + * SilcInt32. * - * Formatting: SILC_STR_SI_SHORT(SilcInt16) - * SILC_STR_UI_SHORT(SilcUInt16) - * Unformatting: SILC_STR_SI_SHORT(SilcInt16 *) - * SILC_STR_UI_SHORT(SilcUInt16 *) + * Formatting: SILC_STR_SINT32(SilcInt32) + * Unformatting: SILC_STR_SINT32(SilcInt32 *) * ***/ -#define SILC_STR_SI_SHORT(x) SILC_PARAM_SI16_SHORT, (x) -#define SILC_STR_UI_SHORT(x) SILC_PARAM_UI16_SHORT, (x) +#define SILC_STR_SINT32(x) SILC_PARAM_SINT32, (x) -/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT32 * * NAME * - * #define SILC_STR_UI_INT() ... - * #define SILC_STR_SI_INT() ... + * #define SILC_STR_UINT32() ... * * DESCRIPTION * - * SilcInt32/SilcUInt32. + * SilcUInt32. * - * Formatting: SILC_STR_SI_INT(SilcInt32) - * SILC_STR_UI_INT(SilcUInt32) - * Unformatting: SILC_STR_SI_INT(SilcInt32 *) - * SILC_STR_UI_INT(SilcUInt32 *) + * Formatting: SILC_STR_UINT32(SilcUInt32) + * Unformatting: SILC_STR_UINT32(SilcUInt32 *) * ***/ -#define SILC_STR_SI_INT(x) SILC_PARAM_SI32_INT, (x) -#define SILC_STR_UI_INT(x) SILC_PARAM_UI32_INT, (x) +#define SILC_STR_UINT32(x) SILC_PARAM_UINT32, (x) + +/* Deprecated */ +#define SILC_STR_SI_INT(x) SILC_PARAM_SINT32, (x) +#define SILC_STR_UI_INT(x) SILC_PARAM_UINT32, (x) -/****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_INT64 +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_SINT64 * * NAME * - * #define SILC_STR_UI_INT64() ... - * #define SILC_STR_SI_INT64() ... + * #define SILC_STR_SINT64() ... * * DESCRIPTION * - * SilcInt64/SilcUInt64. + * SilcInt64. * - * Formatting: SILC_STR_SI_INT64(SilcInt64) - * SILC_STR_UI_INT64(SilcUInt64) - * Unformatting: SILC_STR_SI_INT64(SilcInt64 *) - * SILC_STR_UI_INT64(SilcUInt64 *) + * Formatting: SILC_STR_SINT64(SilcInt64) + * Unformatting: SILC_STR_SINT64(SilcInt64 *) * ***/ -#define SILC_STR_SI_INT64(x) SILC_PARAM_SI64_INT, (x) -#define SILC_STR_UI_INT64(x) SILC_PARAM_UI64_INT, (x) +#define SILC_STR_SI_INT64(x) SILC_PARAM_SINT64, (x) + +/****d* silcutil/SilcBufferFormatAPI/SILC_STR_UINT64 + * + * NAME + * + * #define SILC_STR_UINT64() ... + * + * DESCRIPTION + * + * SilcUInt64. + * + * Formatting: SILC_STR_UINT64(SilcUInt64) + * Unformatting: SILC_STR_UINT64(SilcUInt64 *) + * + ***/ +#define SILC_STR_UI_INT64(x) SILC_PARAM_UINT64, (x) + +/* Deprecated */ +#define SILC_STR_SI_INT64(x) SILC_PARAM_SINT64, (x) +#define SILC_STR_UI_INT64(x) SILC_PARAM_UINT64, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_STRING * @@ -521,11 +531,11 @@ typedef enum { * ***/ #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_UI8_STRING_ALLOC(x) SILC_PARAM_UI8_STRING | SILC_PARAM_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_UI16_STRING_ALLOC(x) SILC_PARAM_UI16_STRING | SILC_PARAM_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) +#define SILC_STR_UI32_STRING_ALLOC(x) SILC_PARAM_UI32_STRING | SILC_PARAM_ALLOC, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_*_NSTRING * @@ -572,13 +582,13 @@ typedef enum { ***/ #define SILC_STR_UI8_NSTRING(x, l) SILC_PARAM_UI8_NSTRING, (x), (l) #define SILC_STR_UI8_NSTRING_ALLOC(x, l) \ - SILC_PARAM_UI8_NSTRING_ALLOC, (x), (l) + SILC_PARAM_UI8_NSTRING | SILC_PARAM_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_PARAM_UI16_NSTRING_ALLOC, (x), (l) + SILC_PARAM_UI16_NSTRING | SILC_PARAM_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_PARAM_UI32_NSTRING_ALLOC, (x), (l) + SILC_PARAM_UI32_NSTRING | SILC_PARAM_ALLOC, (x), (l) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_DATA * @@ -601,12 +611,12 @@ typedef enum { * as argument in unformatting. * ***/ -#define SILC_STR_DATA(x, l) SILC_PARAM_DATA, (x), (l) -#define SILC_STR_DATA_ALLOC(x, l) SILC_PARAM_DATA_ALLOC, (x), (l) +#define SILC_STR_DATA(x, l) SILC_PARAM_UICHAR, (x), (l) +#define SILC_STR_DATA_ALLOC(x, l) SILC_PARAM_UICHAR | SILC_PARAM_ALLOC, (x), (l) /* Deprecated */ -#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) +#define SILC_STR_UI_XNSTRING(x, l) SILC_PARAM_UICHAR, (x), (l) +#define SILC_STR_UI_XNSTRING_ALLOC(x, l) SILC_PARAM_UICHAR | SILC_PARAM_ALLOC, (x), (l) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_BUFFER * @@ -632,7 +642,7 @@ typedef enum { * ***/ #define SILC_STR_BUFFER(x) SILC_PARAM_BUFFER, (x) -#define SILC_STR_BUFFER_ALLOC(x) SILC_PARAM_BUFFER_ALLOC, (x) +#define SILC_STR_BUFFER_ALLOC(x) SILC_PARAM_BUFFER | SILC_PARAM_ALLOC, (x) /****d* silcutil/SilcBufferFormatAPI/SILC_STR_FUNC * @@ -668,7 +678,7 @@ typedef enum { * // Encode payload, encrypt and compute MAC. * silc_buffer_format(buf, * SILC_STR_FUNC(foo_encode_id, id, ctx), - * SILC_STR_UI_SHORT(len), + * SILC_STR_UINT16(len), * SILC_STR_DATA(data, len), * SILC_STR_FUNC(foo_buf_encrypt, NULL, key), * SILC_STR_FUNC(foo_buf_hmac, NULL, hmac), @@ -680,7 +690,7 @@ typedef enum { * SILC_STR_FUNC(foo_buf_hmac, NULL, hmac), * SILC_STR_FUNC(foo_buf_decrypt, NULL, key), * SILC_STR_FUNC(foo_decode_id, &id, ctx), - * SILC_STR_UI_SHORT(&len), + * SILC_STR_UINT16(&len), * SILC_STR_END); * ***/ @@ -722,8 +732,8 @@ typedef enum { * * Advance the buffer to the end of the data after the formatting is * done. In normal operation when the formatted data is written the - * buffer is located at the start of the data. With SILC_STR_ADVANCE - * the buffer will be located at the end of the data. This makes it + * buffer is positioned at the start of the data. With SILC_STR_ADVANCE + * the buffer will be positioned at the end of the data. This makes it * easy to add new data immediately after the previously added data. * The SILC_STR_ADVANCE may also be used in unformatting. * diff --git a/lib/silcutil/silctypes.h b/lib/silcutil/silctypes.h index 66409acc..b6bbffd2 100644 --- a/lib/silcutil/silctypes.h +++ b/lib/silcutil/silctypes.h @@ -268,6 +268,50 @@ typedef void * SilcSocket; #endif /***/ + +/****d* silcutil/SILCTypes/SilcParam + * + * NAME + * + * typedef SilcUInt32 SilcParam; + * + * DESCRIPTION + * + * A generic parameters that describe the type of an parameter or argument. + * They can be used to describe function arguments, buffer encoding format, + * etc. + * + * SOURCE + */ +typedef SilcUInt32 SilcParam; + +#define SILC_PARAM_SINT8 1 /* SilcInt8 */ +#define SILC_PARAM_UINT8 2 /* SilcUInt8 */ +#define SILC_PARAM_SINT16 3 /* SilcInt16 */ +#define SILC_PARAM_UINT16 4 /* SilcUInt16 */ +#define SILC_PARAM_SINT32 5 /* SilcInt32 */ +#define SILC_PARAM_UINT32 6 /* SilcUInt32 */ +#define SILC_PARAM_SINT64 7 /* SilcInt64 */ +#define SILC_PARAM_UINT64 8 /* SilcUInt64 */ +#define SILC_PARAM_SICHAR 9 /* signed char * */ +#define SILC_PARAM_UICHAR 10 /* unsigned char * */ +#define SILC_PARAM_BUFFER 11 /* SilcBuffer */ +#define SILC_PARAM_PTR 12 /* void * */ +#define SILC_PARAM_END 0xfeeefff1 /* End of parameters */ +/***/ + +/* Internal parameter types, not publicly documented */ +#define SILC_PARAM_UI8_STRING 100 /* String (max len 8-bits) */ +#define SILC_PARAM_UI16_STRING 101 /* String (max len 16-bits) */ +#define SILC_PARAM_UI32_STRING 102 /* String (max len 32-bits) */ +#define SILC_PARAM_UI8_NSTRING 103 /* String (max len 8-bits) */ +#define SILC_PARAM_UI16_NSTRING 104 /* String (max len 16-bits) */ +#define SILC_PARAM_UI32_NSTRING 105 /* String (max len 32-bits) */ +#define SILC_PARAM_OFFSET 106 +#define SILC_PARAM_ADVANCE 107 +#define SILC_PARAM_FUNC 108 +#define SILC_PARAM_ALLOC 0x00010000 /* Allocate, bitmask */ + /* Macros */ #if (defined(SILC_I486) || defined(SILC_X86_64)) && defined(__GNUC__) @@ -846,7 +890,7 @@ static inline SilcUInt64 silc_ror64(SilcUInt64 val, int num) * * DESCRIPTION * - * Brach prediction macro. It specifies that it is likely that the brach + * Branch prediction macro. It specifies that it is likely that the branch * where silc_likely is applied is taken. Compiler will optimize the * code based on this prediction. Never use this before you have profiled * the code first.