1
0
Fork 0
mirror of https://github.com/deltachat/deltachat-core.git synced 2025-10-05 10:39:27 +02:00

add functions to explode/implode strings

This commit is contained in:
B. Petersen 2018-10-26 00:57:05 +02:00
parent f082191f11
commit e3ca3e1f0c
No known key found for this signature in database
GPG key ID: 3B88E92DEA8E9AFC
3 changed files with 77 additions and 0 deletions

View file

@ -552,6 +552,58 @@ char* dc_insert_breaks(const char* in, int break_every, const char* break_chars)
}
// Join clist element to a string.
char* dc_str_from_clist(const clist* list, const char* delimiter)
{
dc_strbuilder_t str;
dc_strbuilder_init(&str, 256);
if (list) {
for (clistiter* cur = clist_begin(list); cur!=NULL ; cur=clist_next(cur)) {
const char* rfc724_mid = clist_content(cur);
if (rfc724_mid) {
if (str.buf[0] && delimiter) {
dc_strbuilder_cat(&str, delimiter);
}
dc_strbuilder_cat(&str, rfc724_mid);
}
}
}
return str.buf;
}
// Split a string by a character.
// If the string is empty or NULL, an empty list is returned.
// The returned clist must be freed using clist_free_content()+clist_free()
// or given eg. to libetpan objects.
clist* dc_str_to_clist(const char* str, const char* delimiter)
{
clist* list = clist_new();
if (list==NULL) {
exit(54);
}
if (str && delimiter && strlen(delimiter)>=1) {
const char* p1 = str;
while (1) {
const char* p2 = strstr(p1, delimiter);
if (p2==NULL) {
clist_append(list, (void*)strdup(p1));
break;
}
else {
clist_append(list, (void*)strndup(p1, p2-p1));
p1 = p2+strlen(delimiter);
}
}
}
return list;
}
/*******************************************************************************
* clist tools
******************************************************************************/