From da3ee2790089e771689afbebef021a8c8c776306 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 2 Jun 2009 17:25:47 +1000 Subject: add NT_STATUS_HAVE_NO_MEMORY_AND_FREE() In many places we use NT_STATUS_HAVE_NO_MEMORY() to auto-return when a memory allocation fails. In quite a few places where we use this, we end up leaving a tmp_ctx behind, which creates a memory leak. This macro takes a memory context to free when returning the error --- libcli/util/ntstatus.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libcli/util') diff --git a/libcli/util/ntstatus.h b/libcli/util/ntstatus.h index a97ef5337e..dc1fcc41a4 100644 --- a/libcli/util/ntstatus.h +++ b/libcli/util/ntstatus.h @@ -651,6 +651,15 @@ extern bool ntstatus_check_dos_mapping; }\ } while (0) +/* This varient is for when you want to free a local + temporary memory context in the error path */ +#define NT_STATUS_HAVE_NO_MEMORY_AND_FREE(x, ctx) do { \ + if (!(x)) {\ + talloc_free(ctx); \ + return NT_STATUS_NO_MEMORY;\ + }\ +} while (0) + #define NT_STATUS_IS_OK_RETURN(x) do { \ if (NT_STATUS_IS_OK(x)) {\ return x;\ -- cgit