11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFDataArray+MessagePackValue.h"
#import "OFNumber.h"
#import "OFNull.h"
#import "OFDataArray.h"
#import "OFString.h"
#import "OFArray.h"
|
>
>
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <string.h>
#import "OFDataArray+MessagePackValue.h"
#import "OFNumber.h"
#import "OFNull.h"
#import "OFDataArray.h"
#import "OFString.h"
#import "OFArray.h"
|
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
/* fixmap */
if ((buffer[0] & 0xF0) == 0x80)
return parseTable(buffer + 1, length - 1, object,
buffer[0] & 0xF, depthLimit) + 1;
/* Prefix byte */
switch (*buffer) {
/* Unsigned integers */
case 0xCC: /* uint8 */
if (length < 2)
goto error;
*object = [OFNumber numberWithUInt8: buffer[1]];
return 2;
|
|
|
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
/* fixmap */
if ((buffer[0] & 0xF0) == 0x80)
return parseTable(buffer + 1, length - 1, object,
buffer[0] & 0xF, depthLimit) + 1;
/* Prefix byte */
switch (buffer[0]) {
/* Unsigned integers */
case 0xCC: /* uint8 */
if (length < 2)
goto error;
*object = [OFNumber numberWithUInt8: buffer[1]];
return 2;
|
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
uint8_t u8[4];
float f;
} f;
if (length < 5)
goto error;
for (size_t i = 0; i < 4; i++)
f.u8[i] = buffer[i + 1];
*object = [OFNumber numberWithFloat: OF_BSWAP_FLOAT_IF_LE(f.f)];
return 5;
case 0xCB:; /* float 64 */
union {
uint8_t u8[8];
double d;
} d;
if (length < 9)
goto error;
for (size_t i = 0; i < 8; i++)
d.u8[i] = buffer[i + 1];
*object = [OFNumber numberWithDouble:
OF_BSWAP_DOUBLE_IF_LE(d.d)];
return 9;
/* nil */
case 0xC0:
*object = [OFNull null];
|
<
|
<
|
|
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
uint8_t u8[4];
float f;
} f;
if (length < 5)
goto error;
memcpy(&f.u8, buffer + 1, 4);
*object = [OFNumber numberWithFloat: OF_BSWAP_FLOAT_IF_LE(f.f)];
return 5;
case 0xCB:; /* float 64 */
union {
uint8_t u8[8];
double d;
} d;
if (length < 9)
goto error;
memcpy(&d.u8, buffer + 1, 8);
*object = [OFNumber numberWithDouble:
OF_BSWAP_DOUBLE_IF_LE(d.d)];
return 9;
/* nil */
case 0xC0:
*object = [OFNull null];
|