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"); foobar = chunk_from_str("foobar");
a = foobar; a = foobar;
a = chunk_skip(a, 0); a = chunk_skip(a, 0);
ck_assert(chunk_equals(a, foobar)); ck_assert_chunk_eq(a, foobar);
a = chunk_skip(a, 1); 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); 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); a = chunk_skip(a, 3);
assert_chunk_empty(a); assert_chunk_empty(a);
@@ -338,20 +338,24 @@ START_TEST(test_chunk_skip_zero)
{ {
chunk_t foobar, a; chunk_t foobar, a;
a = chunk_empty; a = chunk_skip_zero(chunk_empty);
a = chunk_skip_zero(a);
assert_chunk_empty(a); assert_chunk_empty(a);
foobar = chunk_from_str("foobar"); foobar = chunk_from_str("foobar");
a = foobar; a = chunk_skip_zero(foobar);
a = chunk_skip_zero(a); ck_assert_chunk_eq(a, foobar);
ck_assert(chunk_equals(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); 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(a);
ck_assert(chunk_equals(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 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) 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.ptr++;
chunk.len--; chunk.len--;