diff --git a/util/str.c b/util/str.c index a5777cd..71df5ea 100644 --- a/util/str.c +++ b/util/str.c @@ -1,10 +1,34 @@ +#include #include #include +#include #include #include #include "util/str.h" +int str_dup(char **out, const char *src) { + size_t len; + char *dest; + + assert(out != NULL); + assert(src != NULL); + + *out = NULL; + + len = strlen(src) + 1; + dest = malloc(len); + + if (dest == NULL) { + return -ENOMEM; + } + + memcpy(dest, src, len); + *out = dest; + + return 0; +} + bool str_eq(const char *lhs, const char *rhs) { if (lhs == NULL || rhs == NULL) { return lhs == rhs; diff --git a/util/str.h b/util/str.h index 1112b7a..d89f507 100644 --- a/util/str.h +++ b/util/str.h @@ -12,8 +12,8 @@ struct strbuf { size_t pos; }; +int str_dup(char **dest, const char *src); bool str_eq(const char *lhs, const char *rhs); - int str_printf(char **out, const char *fmt, ...) gcc_attribute((format(printf, 2, 3))); int str_vprintf(char **out, const char *fmt, va_list ap);