mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
xmalloc: remove delim param from xstrjoin() and add separate xstrjoin3()
This avoids the need for an unused third argument for most xstrjoin() calls and replaces the cases where it's needed with a more flexible function. Code generation is the same in both cases, when there are 2 string params and a compile-time known delimiter. This commit also converts 4 uses of xasprintf() to use xstrjoin*(). See also: https://godbolt.org/z/xsjrhv9b6
This commit is contained in:
parent
62b0b65d47
commit
f87c9bb9f7
7 changed files with 44 additions and 31 deletions
25
xmalloc.h
25
xmalloc.h
|
|
@ -25,16 +25,25 @@ xmemdup(const void *ptr, size_t size)
|
|||
}
|
||||
|
||||
static inline char *
|
||||
xstrjoin(const char *s1, const char *s2, char delim)
|
||||
xstrjoin(const char *s1, const char *s2)
|
||||
{
|
||||
size_t n1 = strlen(s1);
|
||||
size_t n2 = delim > 0 ? 1 : 0;
|
||||
size_t n3 = strlen(s2);
|
||||
|
||||
char *joined = xmalloc(n1 + n2 + n3 + 1);
|
||||
size_t n2 = strlen(s2);
|
||||
char *joined = xmalloc(n1 + n2 + 1);
|
||||
memcpy(joined, s1, n1);
|
||||
if (delim > 0)
|
||||
joined[n1] = delim;
|
||||
memcpy(joined + n1 + n2, s2, n3 + 1);
|
||||
memcpy(joined + n1, s2, n2 + 1);
|
||||
return joined;
|
||||
}
|
||||
|
||||
static inline char *
|
||||
xstrjoin3(const char *s1, const char *s2, const char *s3)
|
||||
{
|
||||
size_t n1 = strlen(s1);
|
||||
size_t n2 = strlen(s2);
|
||||
size_t n3 = strlen(s3);
|
||||
char *joined = xmalloc(n1 + n2 + n3 + 1);
|
||||
memcpy(joined, s1, n1);
|
||||
memcpy(joined + n1, s2, n2);
|
||||
memcpy(joined + n1 + n2, s3, n3 + 1);
|
||||
return joined;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue