Adding g_strnjoin() with units tests

This commit is contained in:
Alexandre Quesnel
2021-03-28 21:55:19 +00:00
parent baeb2cc479
commit 09174ccd4d
12 changed files with 384 additions and 3 deletions
+48
View File
@@ -30,6 +30,7 @@
#include "log.h"
#include "os_calls.h"
#include "string_calls.h"
#include "defines.h"
unsigned int
g_format_info_string(char *dest, unsigned int len,
@@ -806,3 +807,50 @@ g_strtrim(char *str, int trim_flags)
free(text1);
return 0;
}
/*****************************************************************************/
char *
g_strnjoin(char *dest, int dest_len, const char *joiner, const char *src[], int src_len)
{
int len = 0;
int joiner_len;
int i = 0;
int dest_remaining;
char *dest_pos = dest;
char *dest_end;
if (dest == NULL || dest_len < 1)
{
return dest;
}
if (src == NULL || src_len < 1)
{
dest[0] = '\0';
return dest;
}
dest[0] = '\0';
dest_end = dest + dest_len - 1;
joiner_len = g_strlen(joiner);
for (i = 0; i < src_len - 1 && dest_pos < dest_end; i++)
{
len = g_strlen(src[i]);
dest_remaining = dest_end - dest_pos;
g_strncat(dest_pos, src[i], dest_remaining);
dest_pos += MIN(len, dest_remaining);
if (dest_pos < dest_end)
{
dest_remaining = dest_end - dest_pos;
g_strncat(dest_pos, joiner, dest_remaining);
dest_pos += MIN(joiner_len, dest_remaining);
}
}
if (i == src_len - 1 && dest_pos < dest_end)
{
g_strncat(dest_pos, src[i], dest_end - dest_pos);
}
return dest;
}