commit - 144e01a4d075265e50af98aed5f1581b3f841d25
commit + 407f6af68be0eef99173c8f29524f49ad8430372
blob - e0cc7c0714e7fa7280f6577584250200654c5c82
blob + adc46049e5e46fc7a34096b9945dab2f12a2ffbc
--- libtestoutput/parse_subunit_v2.c
+++ libtestoutput/parse_subunit_v2.c
return vptr;
}
-const void* read_varint(const void* buffer, uint8_t *n_bytes)
+const void* read_varint(const void* buffer, const void *content)
{
assert(buffer == NULL);
- buffer = read_uint8(buffer, n_bytes);
- printf("Bytes %d\n", *n_bytes);
- assert(*n_bytes != 0);
- uint8_t value = 0;
- for(int i = 0; i <= *n_bytes; i++) {
- buffer = read_uint8(buffer, &value);
- }
+ uint8_t byte_1 = 0, n_bytes = 0, value_0 = 0;
+ uint16_t byte_2 = 0;
+ buffer = read_uint8(buffer, &byte_1);
+ n_bytes = byte_1 & 0xc0;
+ value_0 = byte_1 & 0x3f;
+ content = (const void*)malloc(n_bytes);
+ memset(content, 0, n_bytes);
+ switch (n_bytes) {
+ case 0x00:
+ *content = value_0;
+ break;
+ case 0x40:
+ buffer = read_uint8(buffer, &byte_1);
+ *(uint16_t)content = value_0 << 8 | byte_1;
+ break;
+ case 0x40:
+ buffer = read_uint16(buffer, &byte_2);
+ *(uint32_t)content = value_0 << 16 | byte_2;
+ break;
+ default:
+ buffer = read_uint8(buffer, &byte_1);
+ buffer = read_uint16(buffer, &byte_2);
+ *(uint32_t)content = (value_0 << 24) | byte_1 << 8 | byte_2;
+ };
+
return buffer;
}
p->status = p->flags & 0x0007;
assert((p->status) <= 0x0007);
- buf = read_uint32(buf, &p->length);
+ const void* data;
+ buf = read_varint(buf, data);
+ p->length = (uint32_t*)data;
assert((p->length) < PACKET_MAX_LENGTH);
if (p->flags & FLAG_TIMESTAMP) {
uint8_t n_bytes = 0;
if (p->flags & FLAG_TEST_ID) {
- buf = read_varint(buf, &n_bytes);
- printf("FLAG_TEST_ID %d bytes\n", n_bytes);
+ buf = read_varint(buf, data);
+ p->testid = (char*)data;
};
if (p->flags & FLAG_TAGS) {
- buf = read_varint(buf, &n_bytes);
- printf("FLAG_TAGS %d bytes\n", n_bytes);
+ buf = read_varint(buf, data);
+ p->tags = (char*)data;
};
if (p->flags & FLAG_MIME_TYPE) {
- buf = read_varint(buf, &n_bytes);
- printf("FLAG_MIME_TYPE %d bytes\n", n_bytes);
+ buf = read_varint(buf, data);
+ p->mime_type = (char*)data;
};
if (p->flags & FLAG_FILE_CONTENT) {
- buf = read_varint(buf, &n_bytes);
- printf("FLAG_FILE_CONTENT %d bytes\n", n_bytes);
+ buf = read_varint(buf, data);
+ p->content = (char*)data;
};
if (p->flags & FLAG_ROUTE_CODE) {
- buf = read_varint(buf, &n_bytes);
- printf("FLAG_ROUTE_CODE %d bytes\n", n_bytes);
+ buf = read_varint(buf, data);
+ p->routing_code = (char*)data;
};
if (p->flags & FLAG_EOF) { /* nothing to do */ };
if (p->flags & FLAG_RUNNABLE) { /* nothing to do */ };
blob - 1b66f314636fd1839dadc285b19992d8b4470779
blob + 74273624d7627172971066a768f007b6ec199147
--- libtestoutput/parse_subunit_v2.h
+++ libtestoutput/parse_subunit_v2.h
uint32_t timestamp;
char *testid;
char *tags;
- char *mime;
+ char *mime_type;
char *content;
char *routing_code;
char *crc32;
const void* read_uint8(const void* buffer, uint8_t* value);
const void* read_uint16(const void* buffer, uint16_t* value);
const void* read_uint32(const void* buffer, uint32_t* value);
-const void* read_varint(const void* buffer, uint8_t *n_bytes);
+const void* read_varint(const void* buffer, const void *content);
#endif /* PARSE_SUBUNIT_V2_H */