]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/tal.c
tal: make tal_free() return NULL
[ccan] / ccan / tal / tal.c
index dce9d233a076733f636f42fbc2e02f0956cd364a..5ab6cb682cd5349b060b8731e99d9f18c45bb15e 100644 (file)
@@ -493,18 +493,17 @@ static struct tal_hdr *remove_node(struct tal_hdr *t)
        return NULL;
 }
 
-void tal_free(const tal_t *ctx)
+void *tal_free(const tal_t *ctx)
 {
-        struct tal_hdr *t;
-       int saved_errno = errno;
-
-        if (!ctx)
-                return;
-
-        t = debug_tal(to_tal_hdr(ctx));
-        remove_node(t);
-        del_tree(t);
-       errno = saved_errno;
+        if (ctx) {
+               struct tal_hdr *t;
+               int saved_errno = errno;
+               t = debug_tal(to_tal_hdr(ctx));
+               remove_node(t);
+               del_tree(t);
+               errno = saved_errno;
+       }
+       return NULL;
 }
 
 void *tal_steal_(const tal_t *new_parent, const tal_t *ctx)
@@ -757,14 +756,10 @@ void *tal_dup_(const tal_t *ctx, const void *p, size_t n, size_t extra,
        if (taken(p)) {
                if (unlikely(!p))
                        return NULL;
-               if (unlikely(!tal_resize_((void **)&p, n + extra))) {
-                       tal_free(p);
-                       return NULL;
-               }
-               if (unlikely(!tal_steal(ctx, p))) {
-                       tal_free(p);
-                       return NULL;
-               }
+               if (unlikely(!tal_resize_((void **)&p, n + extra)))
+                       return tal_free(p);
+               if (unlikely(!tal_steal(ctx, p)))
+                       return tal_free(p);
                return (void *)p;
        }
        ret = tal_alloc_(ctx, n + extra, false, label);
@@ -806,10 +801,8 @@ char *tal_vasprintf(const tal_t *ctx, const char *fmt, va_list ap)
 
                if (ret < max)
                        break;
-               if (!tal_resize(&buf, max *= 2)) {
-                       tal_free(buf);
-                       buf = NULL;
-               }
+               if (!tal_resize(&buf, max *= 2))
+                       buf = tal_free(buf);
        }
        if (taken(fmt))
                tal_free(fmt);