mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
lib: add darr_strlen_fixup()
to update len based on NUL term
Signed-off-by: Christian Hopps <chopps@labn.net>
This commit is contained in:
parent
2ab8cce2e1
commit
d58a8f473b
17
lib/darr.h
17
lib/darr.h
|
@ -62,6 +62,7 @@
|
|||
* - darr_strdup
|
||||
* - darr_strdup_cap
|
||||
* - darr_strlen
|
||||
* - darr_strlen_fixup
|
||||
* - darr_strnul
|
||||
* - darr_sprintf, darr_vsprintf
|
||||
*/
|
||||
|
@ -752,6 +753,22 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt);
|
|||
__size; \
|
||||
})
|
||||
|
||||
/**
|
||||
* Fixup darr_len (and thus darr_strlen) for `S` based on its strlen(S)
|
||||
* (i.e., scan for NUL byte). The dynamic array length will be set to strlen(S) + 1.
|
||||
*
|
||||
* Args:
|
||||
* S: The dynamic array with a NUL terminated string, cannot be NULL.
|
||||
*
|
||||
* Return:
|
||||
* The calculated strlen() value.
|
||||
*/
|
||||
#define darr_strlen_fixup(S) \
|
||||
({ \
|
||||
_darr_len(S) = strlen(S) + 1; \
|
||||
darr_strlen(S); \
|
||||
})
|
||||
|
||||
/**
|
||||
* darr_vsprintf() - vsprintf into a new dynamic array.
|
||||
*
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
* [x] - darr_strdup
|
||||
* [x] - darr_strdup_cap
|
||||
* [x] - darr_strlen
|
||||
* [x] - darr_strlen_fixup
|
||||
* [x] - darr_strnul
|
||||
* [ ] - darr_vsprintf
|
||||
*/
|
||||
|
@ -406,6 +407,9 @@ static void test_string(void)
|
|||
assert(!strcmp(da1, "0123456789: DEADBEEF"));
|
||||
assert(darr_strlen(da1) == 20);
|
||||
assert(darr_cap(da1) == 128);
|
||||
|
||||
da1[5] = 0;
|
||||
assert(darr_strlen_fixup(da1) == 5);
|
||||
darr_free(da1);
|
||||
|
||||
da1 = darr_sprintf("0123456789: %08x", 0xDEADBEEF);
|
||||
|
|
Loading…
Reference in a new issue