Implement chunk_to_sequence function

This function converts a given chunk to a variable-length byte sequence.
This commit is contained in:
Reto Buerki 2012-08-24 12:58:47 +02:00 committed by Tobias Brunner
parent 53232d5883
commit 0327fac6b6
3 changed files with 40 additions and 0 deletions

View File

@ -16,9 +16,23 @@
#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,
chunk_t * const chunk)
{
*chunk = chunk_alloc(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);
}

View File

@ -30,4 +30,12 @@
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
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_ */

View File

@ -36,10 +36,28 @@ START_TEST(test_sequence_to_chunk)
}
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 *tc = tcase_create("Utility tests");
tcase_add_test(tc, test_sequence_to_chunk);
tcase_add_test(tc, test_chunk_to_sequence);
return tc;
}