r4088: Get medieval on our ass about malloc.... :-). Take control of all our allocation
[samba.git] / source3 / lib / data_blob.c
index 4056212fc5637247cd40504bc9a8dd829f507de9..a1c3af2d492e8e47a2c6ea96801f0e3e52c103e8 100644 (file)
@@ -47,7 +47,7 @@ DATA_BLOB data_blob(const void *p, size_t length)
        if (p) {
                ret.data = smb_xmemdup(p, length);
        } else {
-               ret.data = smb_xmalloc(length);
+               ret.data = SMB_XMALLOC_ARRAY(char, length);
        }
        ret.length = length;
        ret.free = free_data_blob;
@@ -61,14 +61,20 @@ DATA_BLOB data_blob_talloc(TALLOC_CTX *mem_ctx, const void *p, size_t length)
 {
        DATA_BLOB ret;
 
-       if (!p || !length) {
+       if (!length) {
                ZERO_STRUCT(ret);
                return ret;
        }
 
-       ret.data = talloc_memdup(mem_ctx, p, length);
-       if (ret.data == NULL)
-               smb_panic("data_blob_talloc: talloc_memdup failed.\n");
+       if (p) {
+               ret.data = TALLOC_MEMDUP(mem_ctx, p, length);
+               if (ret.data == NULL)
+                       smb_panic("data_blob_talloc: talloc_memdup failed.\n");
+       } else {
+               ret.data = TALLOC(mem_ctx, length);
+               if (ret.data == NULL)
+                       smb_panic("data_blob_talloc: talloc failed.\n");
+       }
 
        ret.length = length;
        ret.free = NULL;