Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char const* nsmp_field_unpack(
- char const *const start_ptr,
- nsmp_type const type,
- nsmp_packet_field *const field
- ) {
- int size;
- char const *ptr = start_ptr;
- field->type = type;
- if(field->type != nsmp_string) {
- size = nsmp_type_size[type]
- } else {
- nsmp_packet_field len;
- ptr = nsmp_field_upack(ptr, nsmp_uint16, &len);
- size = *(uint16_t *) len.val;
- free(len.val);
- }
- field->val = malloc(size);
- switch(field->type) {
- case nsmp_string:
- strcpy((char *) field->val, ptr);
- break;
- case nsmp_int8:
- case nsmp_uint8:
- *(uint8_t *) field->val = *(uint8_t *) ptr;
- break;
- case nsmp_int16:
- case nsmp_uint16:
- *(uint16_t *) field->val = ntohs(*(uint16_t *) ptr);
- break;
- case nsmp_int32:
- case nsmp_uint32:
- case nsmp_float:
- *(uint32_t *) field->val = ntohl(*(uint32_t *) ptr);
- break;
- }
- ptr += size;
- return ptr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement