14 if (buffer_size >= size_requested)
17 buffer = (uint8_t *)realloc(buffer, size_requested);
23 buffer_size = size_requested;
27 tlv_s *
readFromFile(FILE *in_fd, uint8_t *&out_buffer,
size_t &out_buffer_size)
33 if (
checkBufferSize(out_buffer, out_buffer_size,
sizeof(header_s)) < 0) {
34 printf(
"[TLVParser] Failed to reallocate buffer\n");
37 read_sz = fread(out_buffer,
sizeof(header_s), 1, in_fd);
41 tlv_s *root = (tlv_s *)out_buffer;
43 assert(length >=
sizeof(header_s));
47 printf(
"[TLVParser] Failed to reallocate buffer\n");
50 read_sz = fread(out_buffer +
sizeof(header_s), length -
sizeof(header_s), 1, in_fd);
54 return (tlv_s *)out_buffer;
66 size_t root_index = 0;
68 return iter(root_index);
81 while ((current_tlv =
iter(index)))
82 if (current_tlv->getType() == type)
90 tlv_s *next_tlv = (tlv_s *)(
buffer + index);
103 printf(
"[TLVParser] Next element is out of bound\n");
114 Parser root_parser(buffer, buffer_size);
118 printf(
"[TLVParser] Bad TLV element passed to parseTimestamp\n");
124 uint32_t *casted = (uint32_t *)read->getValue();
125 output.tv_sec = casted[0];
126 output.tv_usec = casted[1];
#define OSEF_TYPE_TIMESTAMP_MICROSECOND
int checkBufferSize(uint8_t *&buffer, size_t &buffer_size, size_t size_requested)
tlv_s * iter(size_t &index) const
static int parseTimestamp(const uint8_t *buffer, size_t buffer_size, timeval &output)
tlv_s * getFirstTlv(void)
static size_t getSize(const tlv_s &tlv)
tlv_s * findTlv(type_t type) const
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
Parser(const uint8_t *buffer, size_t buffer_size)
tlv_s * readFromFile(FILE *in_fd, uint8_t *&out_buffer, size_t &out_buffer_sz)