diff options
Diffstat (limited to 'lib/util')
-rw-r--r-- | lib/util/strv.c | 26 | ||||
-rw-r--r-- | lib/util/strv.h | 2 |
2 files changed, 19 insertions, 9 deletions
diff --git a/lib/util/strv.c b/lib/util/strv.c index 328f561722b..83d84d92528 100644 --- a/lib/util/strv.c +++ b/lib/util/strv.c @@ -86,29 +86,37 @@ static bool strv_valid_entry(const char *strv, size_t strv_len, return true; } -char *strv_next(char *strv, const char *entry) +const char *strv_len_next(const char *strv, size_t strv_len, + const char *entry) { - size_t len = talloc_array_length(strv); size_t entry_len; - char *result; if (entry == NULL) { - if (strv_valid_entry(strv, len, strv, NULL)) { + if (strv_valid_entry(strv, strv_len, strv, NULL)) { return strv; } return NULL; } - if (!strv_valid_entry(strv, len, entry, &entry_len)) { + if (!strv_valid_entry(strv, strv_len, entry, &entry_len)) { return NULL; } - result = &strv[entry - strv]; /* avoid const problems with this stmt */ - result += entry_len + 1; - if (result >= (strv + len)) { + entry += entry_len+1; + + if (entry >= (strv + strv_len)) { return NULL; } - return result; + return entry; +} + +char *strv_next(char *strv, const char *entry) +{ + size_t len = talloc_array_length(strv); + const char *result; + + result = strv_len_next(strv, len, entry); + return discard_const_p(char, result); } size_t strv_count(char *strv) diff --git a/lib/util/strv.h b/lib/util/strv.h index 398e8ead171..89f04023e44 100644 --- a/lib/util/strv.h +++ b/lib/util/strv.h @@ -26,6 +26,8 @@ int strv_add(TALLOC_CTX *mem_ctx, char **strv, const char *string); int strv_addn(TALLOC_CTX *mem_ctx, char **strv, const char *src, size_t srclen); int strv_append(TALLOC_CTX *mem_ctx, char **strv, const char *src); char *strv_next(char *strv, const char *entry); +const char *strv_len_next(const char *strv, size_t strv_len, + const char *entry); char *strv_find(char *strv, const char *entry); size_t strv_count(char *strv); void strv_delete(char **strv, char *entry); |