X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftal%2Fstr%2Fstr.c;h=771c07c24ee69ddd2bac49c408f62766768f4c67;hb=4710a92838fc03ffa54ce2bc60cf0e214c97a199;hp=b7df54c42af704eee6e1fbd9d941205ec54a2235;hpb=5582b011948769779b0d839d35873c2bc557f9cb;p=ccan diff --git a/ccan/tal/str/str.c b/ccan/tal/str/str.c index b7df54c4..771c07c2 100644 --- a/ccan/tal/str/str.c +++ b/ccan/tal/str/str.c @@ -40,19 +40,19 @@ char *tal_strndup(const tal_t *ctx, const char *p, size_t n) return ret; } -char *tal_asprintf(const tal_t *ctx, const char *fmt, ...) +char *tal_fmt(const tal_t *ctx, const char *fmt, ...) { va_list ap; char *ret; va_start(ap, fmt); - ret = tal_vasprintf(ctx, fmt, ap); + ret = tal_vfmt(ctx, fmt, ap); va_end(ap); return ret; } -char *tal_vasprintf(const tal_t *ctx, const char *fmt, va_list ap) +char *tal_vfmt(const tal_t *ctx, const char *fmt, va_list ap) { size_t max; char *buf; @@ -81,6 +81,31 @@ char *tal_vasprintf(const tal_t *ctx, const char *fmt, va_list ap) return buf; } +char *tal_strcat(const tal_t *ctx, const char *s1, const char *s2) +{ + size_t len1, len2; + char *ret; + + if (unlikely(!s2) && taken(s2)) { + if (taken(s1)) + tal_free(s1); + return NULL; + } + /* We have to let through NULL for take(). */ + len1 = s1 ? strlen(s1) : 0; + len2 = strlen(s2); + + /* We use tal_dup_ here to avoid attaching a length property. */ + ret = tal_dup_(ctx, s1, 1, len1, len2 + 1, false, + TAL_LABEL(char, "[]")); + if (likely(ret)) + memcpy(ret + len1, s2, len2 + 1); + + if (taken(s2)) + tal_free(s2); + return ret; +} + char **tal_strsplit(const tal_t *ctx, const char *string, const char *delims, enum strsplit flags) {