fix: (str) null checks

This commit is contained in:
thetek 2023-02-14 12:15:05 +01:00
parent 12b9bf1762
commit 60845b521c
2 changed files with 13 additions and 6 deletions

View File

@ -12,8 +12,8 @@ typedef struct
void str_new (str_t *str);
void str_new_cap (str_t *str, size_t want_cap);
void str_new_from (str_t *str, const char *src);
void str_new_from_len (str_t *str, const char *src, size_t len);
int str_new_from (str_t *str, const char *src);
int str_new_from_len (str_t *str, const char *src, size_t len);
void str_free (str_t *str);
#endif // CUTILS_STR_H_

View File

@ -24,26 +24,33 @@ str_new_cap (str_t *str, size_t want_cap)
str->cap = cap;
}
inline void
inline int
str_new_from (str_t *str, const char *src)
{
str_new_from_len (str, src, strlen (src));
if (src)
return str_new_from_len (str, src, strlen (src)), 0;
else
return errno = EINVAL, -1;
}
void
int
str_new_from_len (str_t *str, const char *src, size_t len)
{
size_t cap;
if (!src)
return errno = EINVAL, -1;
cap = max (next_pow_of_two (len + 1), STR_MIN_ALLOC);
str->str = smalloc (cap * sizeof (char));
str->len = len;
str->cap = cap;
strcpy (str->str, src);
return 0;
}
inline void
str_free (str_t *str)
{
free (str->str);
if (str)
free (str->str);
}