* @param[in] _dbuff to reserve bytes in.
* @param[in] _max The maximum number of bytes the caller is allowed to write to.
*/
-#define FR_DBUFF_MAX(_dbuff, _max) (fr_dbuff_remaining(_dbuff) > (_max)) ? \
- FR_DBUFF_RESERVE(_dbuff, fr_dbuff_remaining(_dbuff) - (_max)) : \
+#define FR_DBUFF_MAX(_dbuff, _max) ((fr_dbuff_remaining(_dbuff) > (_max)) ? \
+ &FR_DBUFF_RESERVE(_dbuff, fr_dbuff_remaining(_dbuff) - (_max)) : \
_dbuff)
/** Does the actual work of initialising a dbuff
TEST_CHECK(dbuff.parent == NULL);
}
+static void test_dbuff_max(void)
+{
+ uint8_t const in[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
+ fr_dbuff_t dbuff;
+ fr_dbuff_t *max_dbuff;
+
+ TEST_CASE("Confirm max constrains available space");
+ fr_dbuff_init(&dbuff, in, sizeof(in));
+
+ max_dbuff = FR_DBUFF_MAX(&dbuff, 4);
+ TEST_CHECK(fr_dbuff_remaining(max_dbuff) == 4);
+
+ max_dbuff = FR_DBUFF_MAX(&dbuff, 2 * sizeof(in));
+ TEST_CHECK(fr_dbuff_remaining(max_dbuff) == sizeof(in));
+}
+
+
/** Test the various dbuff_net_encode() functions and macros
*
* @note Passing constants to fr_dbuff_in() as it is written results in
*/
{ "fr_dbuff_init", test_dbuff_init },
{ "fr_dbuff_init_no_parent", test_dbuff_init_no_parent },
+ { "fr_dbuff_max", test_dbuff_max },
{ "fr_dbuff_in", test_dbuff_net_encode },
{ NULL }