chunk: Skip all leading zero bytes in chunk_skip_zero() not just the first

This commit is contained in:
Tobias Brunner
2016-04-04 15:39:42 +02:00
parent 85597f2983
commit b82b5f6398
2 changed files with 18 additions and 14 deletions
+16 -12
View File
@@ -316,11 +316,11 @@ START_TEST(test_chunk_skip)
foobar = chunk_from_str("foobar");
a = foobar;
a = chunk_skip(a, 0);
ck_assert(chunk_equals(a, foobar));
ck_assert_chunk_eq(a, foobar);
a = chunk_skip(a, 1);
ck_assert(chunk_equals(a, chunk_from_str("oobar")));
ck_assert_chunk_eq(a, chunk_from_str("oobar"));
a = chunk_skip(a, 2);
ck_assert(chunk_equals(a, chunk_from_str("bar")));
ck_assert_chunk_eq(a, chunk_from_str("bar"));
a = chunk_skip(a, 3);
assert_chunk_empty(a);
@@ -338,20 +338,24 @@ START_TEST(test_chunk_skip_zero)
{
chunk_t foobar, a;
a = chunk_empty;
a = chunk_skip_zero(a);
a = chunk_skip_zero(chunk_empty);
assert_chunk_empty(a);
foobar = chunk_from_str("foobar");
a = foobar;
a = chunk_skip_zero(a);
ck_assert(chunk_equals(a, foobar));
a = chunk_skip_zero(foobar);
ck_assert_chunk_eq(a, foobar);
a = chunk_from_chars(0x00, 0xaa, 0xbb, 0xcc);
foobar = chunk_from_chars(0x00);
a = chunk_skip_zero(foobar);
ck_assert_chunk_eq(a, foobar);
a = chunk_skip_zero(chunk_from_chars(0x00, 0xaa, 0xbb, 0xcc));
ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
a = chunk_skip_zero(a);
ck_assert(chunk_equals(a, chunk_from_chars(0xaa, 0xbb, 0xcc)));
a = chunk_skip_zero(a);
ck_assert(chunk_equals(a, chunk_from_chars(0xaa, 0xbb, 0xcc)));
ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
a = chunk_skip_zero(chunk_from_chars(0x00, 0x00, 0xaa, 0xbb, 0xcc));
ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
}
END_TEST
+2 -2
View File
@@ -280,11 +280,11 @@ static inline chunk_t chunk_skip(chunk_t chunk, size_t bytes)
}
/**
* Skip a leading zero-valued byte
* Skip any leading zero-valued bytes
*/
static inline chunk_t chunk_skip_zero(chunk_t chunk)
{
if (chunk.len > 1 && *chunk.ptr == 0x00)
while (chunk.len > 1 && *chunk.ptr == 0x00)
{
chunk.ptr++;
chunk.len--;