summaryrefslogtreecommitdiffstats
path: root/server/util/memory.c
blob: e73fd0169fdc2837740b75e93abdec8af1b05852 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "util/util.h"

/*
 * talloc_takeover
 * This function will take a non-talloc pointer and add it to a talloc
 * memory context. It will accept a destructor for the original pointer
 * so that when the parent memory context is freed, the non-talloc
 * pointer will also be freed properly.
 */
TALLOC_CTX *talloc_takeover(TALLOC_CTX *mem_ctx, void *ptr, int (*destructor)(void **)) {
    void **handle;
    
    if (ptr == NULL) {
        return NULL;
    }
    
    handle = talloc_named_const(mem_ctx, sizeof(void *), "void *");
    if (handle == NULL) {
        return NULL;
    }
    
    *handle = ptr;
    talloc_set_destructor(handle,destructor);
    
    return handle;
}