Browse Source

bytestring: Add bytestring_byte() function

Add a bytestring_byte() function to get a single byte / character
from a bytestring.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
David Gibson 11 years ago
parent
commit
c06054cd12
2 changed files with 24 additions and 1 deletions
  1. 15 0
      ccan/bytestring/bytestring.h
  2. 9 1
      ccan/bytestring/test/run.c

+ 15 - 0
ccan/bytestring/bytestring.h

@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <stdlib.h>
 #include <string.h>
 #include <string.h>
 #include <stdbool.h>
 #include <stdbool.h>
+#include <assert.h>
 
 
 #include <ccan/array_size/array_size.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);
 		&& (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_ */
 #endif /* CCAN_BYTESTRING_H_ */

+ 9 - 1
ccan/bytestring/test/run.c

@@ -12,7 +12,7 @@ int main(void)
 	struct bytestring bs, bs1, bs2, bs3, bs4, bs5;
 	struct bytestring bs, bs1, bs2, bs3, bs4, bs5;
 
 
 	/* This is how many tests you plan to run */
 	/* This is how many tests you plan to run */
-	plan_tests(9);
+	plan_tests(16);
 
 
 	bs = bytestring(str1, sizeof(str1) - 1);
 	bs = bytestring(str1, sizeof(str1) - 1);
 	ok1(bs.ptr == str1);
 	ok1(bs.ptr == str1);
@@ -35,6 +35,14 @@ int main(void)
 	ok1(bs5.ptr == NULL);
 	ok1(bs5.ptr == NULL);
 	ok1(bytestring_eq(bs5, bytestring_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 */
 	/* This exits depending on whether all tests passed */
 	return exit_status();
 	return exit_status();
 }
 }