diff options
author | Volker Lendecke <vl@samba.org> | 2017-08-02 17:34:25 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2017-11-29 16:59:16 +0100 |
commit | 71e255fd3d2beb0a2fcb2ff39014a668dd724c13 (patch) | |
tree | def4ae1d2c2c1dde82687d1c35c0e83692f1eea9 /lib/util | |
parent | 8e824ad69700412cedeb758029fdad4d1b5c6bbe (diff) | |
download | samba-71e255fd3d2beb0a2fcb2ff39014a668dd724c13.tar.gz |
lib: Allow parsing a strv from a non-talloc const buf
This will allow parsing a tdb record without having to talloc_memdup it
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
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); |