From c06054cd124670216d147c2e0660aab3c3fa683c Mon Sep 17 00:00:00 2001 From: David Gibson Date: Sun, 19 Oct 2014 12:20:14 +0200 Subject: [PATCH] bytestring: Add bytestring_byte() function Add a bytestring_byte() function to get a single byte / character from a bytestring. Signed-off-by: David Gibson --- ccan/bytestring/bytestring.h | 15 +++++++++++++++ ccan/bytestring/test/run.c | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ccan/bytestring/bytestring.h b/ccan/bytestring/bytestring.h index 63472fe2..bd525601 100644 --- a/ccan/bytestring/bytestring.h +++ b/ccan/bytestring/bytestring.h @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -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_ */ diff --git a/ccan/bytestring/test/run.c b/ccan/bytestring/test/run.c index 9423b9a0..2d86926d 100644 --- a/ccan/bytestring/test/run.c +++ b/ccan/bytestring/test/run.c @@ -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(); } -- 2.39.2