summaryrefslogtreecommitdiff
path: root/msgpack/unpack_template.h
diff options
context:
space:
mode:
authorAntonio Cuni <anto.cuni@gmail.com>2013-10-19 17:27:16 +0200
committerAntonio Cuni <anto.cuni@gmail.com>2013-10-19 17:27:16 +0200
commit56dd1650a42a454027ba335b494100a9f211758e (patch)
treebb40490af6a940e75d91d0e2e19a9975c78c8a15 /msgpack/unpack_template.h
parent985d4c1496d8c9186079ebc4e42aee319e67c385 (diff)
downloadmsgpack-python-56dd1650a42a454027ba335b494100a9f211758e.tar.gz
implement unpacking for all the fixtext formats
Diffstat (limited to 'msgpack/unpack_template.h')
-rw-r--r--msgpack/unpack_template.h22
1 files changed, 15 insertions, 7 deletions
diff --git a/msgpack/unpack_template.h b/msgpack/unpack_template.h
index 29ac935..b051075 100644
--- a/msgpack/unpack_template.h
+++ b/msgpack/unpack_template.h
@@ -202,12 +202,16 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, size_t l
case 0xd2: // signed int 32
case 0xd3: // signed int 64
again_fixed_trail(NEXT_CS(p), 1 << (((unsigned int)*p) & 0x03));
- //case 0xd4:
- //case 0xd5:
- //case 0xd6: // big integer 16
- //case 0xd7: // big integer 32
- //case 0xd8: // big float 16
- //case 0xd9: // big float 32
+ case 0xd4: // fixext 1
+ case 0xd5: // fixext 2
+ case 0xd6: // fixext 4
+ case 0xd7: // fixext 8
+ again_fixed_trail_if_zero(ACS_EXT_VALUE,
+ (1 << (((unsigned int)*p) & 0x03))+1,
+ _ext_zero);
+ case 0xd8: // fixext 16
+ again_fixed_trail_if_zero(ACS_EXT_VALUE, 16+1, _ext_zero);
+ //case 0xd9:
case 0xda: // raw 16
case 0xdb: // raw 32
case 0xdc: // array 16
@@ -298,6 +302,10 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, size_t l
_raw_zero:
push_variable_value(_raw, data, n, trail);
+ case ACS_EXT_VALUE:
+ _ext_zero:
+ push_variable_value(_ext, data, n, trail);
+
case CS_ARRAY_16:
start_container(_array, _msgpack_load16(uint16_t,n), CT_ARRAY_ITEM);
case CS_ARRAY_32:
@@ -309,7 +317,7 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, size_t l
case CS_MAP_32:
/* FIXME security guard */
start_container(_map, _msgpack_load32(uint32_t,n), CT_MAP_KEY);
-
+
default:
goto _failed;
}