BLI_string_utils: add BLI_string_join_array_by_sep_char

Utility to join strings into a fixed size buffer.
This commit is contained in:
Campbell Barton 2020-03-04 15:12:06 +11:00
parent 38ed95fe8d
commit 0baae18375
2 changed files with 28 additions and 0 deletions

@ -48,6 +48,11 @@ char *BLI_string_join_array(char *result,
size_t result_len,
const char *strings[],
uint strings_len) ATTR_NONNULL();
char *BLI_string_join_array_by_sep_char(char *result,
size_t result_len,
char sep,
const char *strings[],
uint strings_len) ATTR_NONNULL();
char *BLI_string_join_arrayN(const char *strings[], uint strings_len) ATTR_WARN_UNUSED_RESULT
ATTR_NONNULL();

@ -434,6 +434,29 @@ char *BLI_string_join_array(char *result,
return c;
}
/**
* A version of #BLI_string_join that takes a separator which can be any character including '\0'.
*/
char *BLI_string_join_array_by_sep_char(
char *result, size_t result_len, char sep, const char *strings[], uint strings_len)
{
char *c = result;
char *c_end = &result[result_len - 1];
for (uint i = 0; i < strings_len; i++) {
if (i != 0) {
if (c < c_end) {
*c++ = sep;
}
}
const char *p = strings[i];
while (*p && (c < c_end)) {
*c++ = *p++;
}
}
*c = '\0';
return c;
}
/**
* Join an array of strings into a newly allocated, null terminated string.
*/