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;
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;
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);
}
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);
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);
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);
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);
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);
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);
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);
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);
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];
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;
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);
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);
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);
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);
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);
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));
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);
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);
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);
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));
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 **);
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 **);
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 **);
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 **);
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 **);
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);
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;