44
55#include "cmp.h"
66
7- static const uint32_t version = 2 ;
7+ static const uint32_t version = 3 ;
88static const uint32_t mp_version = 5 ;
99
1010enum {
@@ -1137,6 +1137,11 @@ bool cmp_read_char(cmp_ctx_t *ctx, int8_t *c) {
11371137 case CMP_TYPE_SINT8 :
11381138 * c = obj .as .s8 ;
11391139 return true;
1140+ case CMP_TYPE_UINT8 :
1141+ if (obj .as .u8 <= 127 ) {
1142+ * c = obj .as .u8 ;
1143+ return true;
1144+ }
11401145 default :
11411146 ctx -> error = INVALID_TYPE_ERROR ;
11421147 return false;
@@ -1155,9 +1160,17 @@ bool cmp_read_short(cmp_ctx_t *ctx, int16_t *s) {
11551160 case CMP_TYPE_SINT8 :
11561161 * s = obj .as .s8 ;
11571162 return true;
1163+ case CMP_TYPE_UINT8 :
1164+ * s = obj .as .u8 ;
1165+ return true;
11581166 case CMP_TYPE_SINT16 :
11591167 * s = obj .as .s16 ;
11601168 return true;
1169+ case CMP_TYPE_UINT16 :
1170+ if (obj .as .u16 <= 32767 ) {
1171+ * s = obj .as .u16 ;
1172+ return true;
1173+ }
11611174 default :
11621175 ctx -> error = INVALID_TYPE_ERROR ;
11631176 return false;
@@ -1176,12 +1189,23 @@ bool cmp_read_int(cmp_ctx_t *ctx, int32_t *i) {
11761189 case CMP_TYPE_SINT8 :
11771190 * i = obj .as .s8 ;
11781191 return true;
1192+ case CMP_TYPE_UINT8 :
1193+ * i = obj .as .u8 ;
1194+ return true;
11791195 case CMP_TYPE_SINT16 :
11801196 * i = obj .as .s16 ;
11811197 return true;
1198+ case CMP_TYPE_UINT16 :
1199+ * i = obj .as .u16 ;
1200+ return true;
11821201 case CMP_TYPE_SINT32 :
11831202 * i = obj .as .s32 ;
11841203 return true;
1204+ case CMP_TYPE_UINT32 :
1205+ if (obj .as .u32 <= 2147483647 ) {
1206+ * i = obj .as .u32 ;
1207+ return true;
1208+ }
11851209 default :
11861210 ctx -> error = INVALID_TYPE_ERROR ;
11871211 return false;
@@ -1200,15 +1224,29 @@ bool cmp_read_long(cmp_ctx_t *ctx, int64_t *d) {
12001224 case CMP_TYPE_SINT8 :
12011225 * d = obj .as .s8 ;
12021226 return true;
1227+ case CMP_TYPE_UINT8 :
1228+ * d = obj .as .u8 ;
1229+ return true;
12031230 case CMP_TYPE_SINT16 :
1204- * d = be16 (obj .as .s16 );
1231+ * d = obj .as .s16 ;
1232+ return true;
1233+ case CMP_TYPE_UINT16 :
1234+ * d = obj .as .u16 ;
12051235 return true;
12061236 case CMP_TYPE_SINT32 :
1207- * d = be32 (obj .as .s32 );
1237+ * d = obj .as .s32 ;
1238+ return true;
1239+ case CMP_TYPE_UINT32 :
1240+ * d = obj .as .u32 ;
12081241 return true;
12091242 case CMP_TYPE_SINT64 :
1210- * d = be64 ( obj .as .s64 ) ;
1243+ * d = obj .as .s64 ;
12111244 return true;
1245+ case CMP_TYPE_UINT64 :
1246+ if (obj .as .u64 <= 9223372036854775807 ) {
1247+ * d = obj .as .u64 ;
1248+ return true;
1249+ }
12121250 default :
12131251 ctx -> error = INVALID_TYPE_ERROR ;
12141252 return false;
@@ -1260,7 +1298,7 @@ bool cmp_read_u16(cmp_ctx_t *ctx, uint16_t *s) {
12601298 return false;
12611299 }
12621300
1263- * s = be16 ( obj .as .u16 ) ;
1301+ * s = obj .as .u16 ;
12641302 return true;
12651303}
12661304
@@ -1275,7 +1313,7 @@ bool cmp_read_u32(cmp_ctx_t *ctx, uint32_t *i) {
12751313 return false;
12761314 }
12771315
1278- * i = be32 ( obj .as .u32 ) ;
1316+ * i = obj .as .u32 ;
12791317 return true;
12801318}
12811319
@@ -1290,7 +1328,7 @@ bool cmp_read_u64(cmp_ctx_t *ctx, uint64_t *l) {
12901328 return false;
12911329 }
12921330
1293- * l = be64 ( obj .as .u64 ) ;
1331+ * l = obj .as .u64 ;
12941332 return true;
12951333}
12961334
@@ -1368,13 +1406,13 @@ bool cmp_read_ulong(cmp_ctx_t *ctx, uint64_t *u) {
13681406 * u = obj .as .u8 ;
13691407 return true;
13701408 case CMP_TYPE_UINT16 :
1371- * u = be16 ( obj .as .u16 ) ;
1409+ * u = obj .as .u16 ;
13721410 return true;
13731411 case CMP_TYPE_UINT32 :
1374- * u = be32 ( obj .as .u32 ) ;
1412+ * u = obj .as .u32 ;
13751413 return true;
13761414 case CMP_TYPE_UINT64 :
1377- * u = be64 ( obj .as .u64 ) ;
1415+ * u = obj .as .u64 ;
13781416 return true;
13791417 default :
13801418 ctx -> error = INVALID_TYPE_ERROR ;
0 commit comments