Commit c06054cd authored by David Gibson's avatar David Gibson

bytestring: Add bytestring_byte() function

Add a bytestring_byte() function to get a single byte / character
from a bytestring.
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 40b45c4c
......@@ -5,6 +5,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <assert.h>
#include <ccan/array_size/array_size.h>
......@@ -80,4 +81,18 @@ static inline bool bytestring_eq(struct bytestring a, struct bytestring b)
&& (memcmp(a.ptr, b.ptr, a.len) == 0);
}
/**
* bytestring_byte - get a byte from a bytestring
* @s: bytestring
* @n: index
*
* Return the @n-th byte from @s. Aborts (via assert) if @n is out of
* range for the length of @s.
*/
static inline char bytestring_byte(struct bytestring s, size_t n)
{
assert(n < s.len);
return s.ptr[n];
}
#endif /* CCAN_BYTESTRING_H_ */
......@@ -12,7 +12,7 @@ int main(void)
struct bytestring bs, bs1, bs2, bs3, bs4, bs5;
/* This is how many tests you plan to run */
plan_tests(9);
plan_tests(16);
bs = bytestring(str1, sizeof(str1) - 1);
ok1(bs.ptr == str1);
......@@ -35,6 +35,14 @@ int main(void)
ok1(bs5.ptr == NULL);
ok1(bytestring_eq(bs5, bytestring_NULL));
ok1(bytestring_byte(bs2, 0) == 'a');
ok1(bytestring_byte(bs2, 1) == 'b');
ok1(bytestring_byte(bs2, 2) == 'c');
ok1(bytestring_byte(bs2, 3) == '\0');
ok1(bytestring_byte(bs2, 4) == 'd');
ok1(bytestring_byte(bs2, 5) == 'e');
ok1(bytestring_byte(bs2, 6) == 'f');
/* This exits depending on whether all tests passed */
return exit_status();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment