Implement chunk_to_sequence function
This function converts a given chunk to a variable-length byte sequence.
This commit is contained in:
committed by
Tobias Brunner
parent
53232d5883
commit
0327fac6b6
@@ -16,9 +16,23 @@
|
|||||||
|
|
||||||
#include "tkm_utils.h"
|
#include "tkm_utils.h"
|
||||||
|
|
||||||
|
/* Generic variable-length sequence */
|
||||||
|
struct sequence_type {
|
||||||
|
uint32_t size;
|
||||||
|
byte_t data[];
|
||||||
|
};
|
||||||
|
typedef struct sequence_type sequence_type;
|
||||||
|
|
||||||
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
|
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
|
||||||
chunk_t * const chunk)
|
chunk_t * const chunk)
|
||||||
{
|
{
|
||||||
*chunk = chunk_alloc(len);
|
*chunk = chunk_alloc(len);
|
||||||
memcpy(chunk->ptr, first, len);
|
memcpy(chunk->ptr, first, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void chunk_to_sequence(const chunk_t * const chunk, void *sequence)
|
||||||
|
{
|
||||||
|
sequence_type *seq = sequence;
|
||||||
|
seq->size = chunk->len;
|
||||||
|
memcpy(seq->data, chunk->ptr, seq->size);
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,4 +30,12 @@
|
|||||||
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
|
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
|
||||||
chunk_t * const chunk);
|
chunk_t * const chunk);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert chunk to variable-length byte sequence.
|
||||||
|
*
|
||||||
|
* @param chunk pointer to chunk struct
|
||||||
|
* @param sequence pointer to variable-length sequence
|
||||||
|
*/
|
||||||
|
void chunk_to_sequence(const chunk_t * const chunk, void *sequence);
|
||||||
|
|
||||||
#endif /** TKM_UTILS_H_ */
|
#endif /** TKM_UTILS_H_ */
|
||||||
|
|||||||
@@ -36,10 +36,28 @@ START_TEST(test_sequence_to_chunk)
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_chunk_to_sequence)
|
||||||
|
{
|
||||||
|
chunk_t chunk = chunk_from_thing("ABCDEFGH");
|
||||||
|
key_type key;
|
||||||
|
|
||||||
|
chunk_to_sequence(&chunk, &key);
|
||||||
|
fail_if(key.size != chunk.len, "Seq size mismatch");
|
||||||
|
|
||||||
|
uint32_t i;
|
||||||
|
for (i = 0; i < key.size - 1; i++)
|
||||||
|
{
|
||||||
|
fail_if(key.data[i] != 65 + i, "Data mismatch (1)");
|
||||||
|
}
|
||||||
|
fail_if(key.data[key.size - 1] != 0, "Data mismatch (2)");
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
TCase *make_utility_tests(void)
|
TCase *make_utility_tests(void)
|
||||||
{
|
{
|
||||||
TCase *tc = tcase_create("Utility tests");
|
TCase *tc = tcase_create("Utility tests");
|
||||||
tcase_add_test(tc, test_sequence_to_chunk);
|
tcase_add_test(tc, test_sequence_to_chunk);
|
||||||
|
tcase_add_test(tc, test_chunk_to_sequence);
|
||||||
|
|
||||||
return tc;
|
return tc;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user