mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
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>
This commit is contained in:
parent
8e824ad697
commit
71e255fd3d
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user