Add QCBOREncode_Tell and QCBOREncode_SubString (#251)
* QCBOREncode_Tell and QCBOREncode_SubString
* Test and documentation improvements
* test, doc, back out error checks that didn't work
* more tests; tidiness
* Small documentation improvement
* Add RetreiveUndecodedInput
* Proper factoring for UsefulOutBuf Storage
* nits
---------
Co-authored-by: Laurence Lundblade <lgl@securitytheory.com>
diff --git a/src/UsefulBuf.c b/src/UsefulBuf.c
index f90790b..4a7970f 100644
--- a/src/UsefulBuf.c
+++ b/src/UsefulBuf.c
@@ -44,6 +44,7 @@
when who what, where, why
-------- ---- ---------------------------------------------------
+ 08/08/2024 llundblade Add UsefulOutBuf_SubString().
21/05/2024 llundblade Comment formatting and some code tidiness.
19/12/2022 llundblade Don't pass NULL to memmove when adding empty data.
4/11/2022 llundblade Add GetOutPlace and Advance to UsefulOutBuf
@@ -413,6 +414,35 @@
}
+/*
+ * Public function -- see UsefulBuf.h
+ *
+ * Code Reviewers: THIS FUNCTION DOES POINTER MATH
+ */
+UsefulBufC UsefulOutBuf_SubString(UsefulOutBuf *pMe,
+ const size_t uStart,
+ const size_t uLen)
+{
+ const UsefulBufC Tmp = UsefulOutBuf_OutUBuf(pMe);
+
+ if(UsefulBuf_IsNULLC(Tmp)) {
+ return NULLUsefulBufC;
+ }
+
+ if(uStart > Tmp.len) {
+ return NULLUsefulBufC;
+ }
+
+ if(Tmp.len - uStart < uLen) {
+ return NULLUsefulBufC;
+ }
+
+ UsefulBufC SubString;
+ SubString.ptr = (const uint8_t *)Tmp.ptr + uStart;
+ SubString.len = uLen;
+
+ return SubString;
+}
/*