63 lines
1.0 KiB
C
63 lines
1.0 KiB
C
#pragma once
|
|
|
|
#include "common.h"
|
|
|
|
_pure_ static inline int
|
|
str_empty(const char *restrict str)
|
|
{
|
|
return !str || !str[0];
|
|
}
|
|
|
|
_pure_ static inline size_t
|
|
str_cmp(const char *restrict sa, const char *restrict sb)
|
|
{
|
|
if (!sa || !sb)
|
|
return 1;
|
|
|
|
size_t i = 0;
|
|
|
|
while (sa[i] == sb[i])
|
|
if (!sa[i++])
|
|
return 0;
|
|
|
|
return i + 1;
|
|
}
|
|
|
|
_pure_ static inline size_t
|
|
str_len(const char *restrict str, size_t len)
|
|
{
|
|
if (!str)
|
|
return 0;
|
|
|
|
return strnlen(str, len);
|
|
}
|
|
|
|
static inline size_t
|
|
str_cat(char *dst, size_t dst_len, const char **src, size_t count)
|
|
{
|
|
if (count && !src)
|
|
return 0;
|
|
|
|
size_t len = 0;
|
|
|
|
for (size_t i = 0; i < count && dst_len > len; i++) {
|
|
size_t n = str_len(src[i], dst_len - len);
|
|
|
|
if (dst && n)
|
|
memmove(&dst[len], src[i], n);
|
|
|
|
len += n;
|
|
}
|
|
|
|
if (dst)
|
|
dst[len] = 0;
|
|
|
|
return len;
|
|
}
|
|
|
|
static inline size_t
|
|
str_cpy(char *dst, size_t dst_len, const char *src)
|
|
{
|
|
return str_cat(dst, dst_len, &src, 1);
|
|
}
|