diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-03-14 10:33:16 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-14 10:33:16 -0400 |
| commit | dbecefb6c6eac3ad9d798e66ae2a8c572590c0bd (patch) | |
| tree | bb9e0e202ba7921fde81e5e775e51187a925769a | |
| parent | e5848deedf01f77194b3cff457dc462230c257da (diff) | |
| parent | 2586c4c3edeab982d65071e5d90329ba47189af4 (diff) | |
Merge pull request #18383 from LabNConsulting/chopps/fix-oper-state-list-query-bug
Fix bug with oper-state queries including list node
| -rw-r--r-- | lib/darr.h | 17 | ||||
| -rw-r--r-- | lib/northbound_oper.c | 1 | ||||
| -rw-r--r-- | tests/lib/test_darr.c | 4 |
3 files changed, 22 insertions, 0 deletions
diff --git a/lib/darr.h b/lib/darr.h index 084c2a103a..4638b904d1 100644 --- a/lib/darr.h +++ b/lib/darr.h @@ -62,6 +62,7 @@ * - darr_strdup * - darr_strdup_cap * - darr_strlen + * - darr_strlen_fixup * - darr_strnul * - darr_sprintf, darr_vsprintf */ @@ -753,6 +754,22 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt); }) /** + * 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. * * Args: diff --git a/lib/northbound_oper.c b/lib/northbound_oper.c index ad495b6f9c..c27fe3c019 100644 --- a/lib/northbound_oper.c +++ b/lib/northbound_oper.c @@ -407,6 +407,7 @@ static enum nb_error nb_op_xpath_to_trunk(const char *xpath_in, char **xpath_out ret = yang_xpath_pop_node(xpath); if (ret != NB_OK) break; + darr_strlen_fixup(xpath); } if (ret == NB_OK) *xpath_out = xpath; diff --git a/tests/lib/test_darr.c b/tests/lib/test_darr.c index 87f9e3e564..be319db1c1 100644 --- a/tests/lib/test_darr.c +++ b/tests/lib/test_darr.c @@ -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); |
