From b38f39fc9a4f14a9c96ccbf4b1f5c6297b678eaa Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 15 Jul 2025 15:36:22 +0200 Subject: [PATCH] lib/strutils: add ul_optstr_get_value() Signed-off-by: Karel Zak --- include/strutils.h | 1 + lib/strutils.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/strutils.h b/include/strutils.h index 2ee7c3e53..add042d8f 100644 --- a/include/strutils.h +++ b/include/strutils.h @@ -476,5 +476,6 @@ extern int ul_stralnumcmp(const char *p1, const char *p2); extern int ul_optstr_next(char **optstr, char **name, size_t *namesz, char **value, size_t *valsz); extern int ul_optstr_is_valid(const char *optstr); +extern char *ul_optstr_get_value(const char *optstr, const char *key); #endif diff --git a/lib/strutils.c b/lib/strutils.c index c27d645c2..1ecc0c398 100644 --- a/lib/strutils.c +++ b/lib/strutils.c @@ -1290,6 +1290,25 @@ int ul_optstr_is_valid(const char *optstr) return rc < 0 ? 0 : 1; } +char *ul_optstr_get_value(const char *optstr, const char *key) +{ + size_t sz, namesz = 0, valsz = 0; + char *name = NULL, *value = NULL; + char *p = (char *) optstr; + + if (!optstr || !key || !*key) + return NULL; + + sz = strlen(key); + while (ul_optstr_next(&p, &name, &namesz, &value, &valsz) == 0) { + if (namesz != sz || !valsz) + continue; + if (strncmp(name, key, namesz) == 0) + return strndup(value, valsz); + } + return NULL; +} + #ifdef TEST_PROGRAM_STRUTILS #include "cctype.h" -- 2.47.3