r9794: r11627@blu: tridge | 2005-08-30 22:55:27 +1000
[jra/samba/.git] / source4 / lib / data_blob.c
index 15518799335f57ebd296bcff683d96b672e7da18..049210e8eeea73691495031cc43c9e0b4ffef1e1 100644 (file)
@@ -29,7 +29,7 @@ DATA_BLOB data_blob_named(const void *p, size_t length, const char *name)
 {
        DATA_BLOB ret;
 
-       if (length == 0) {
+       if (p == NULL && length == 0) {
                ZERO_STRUCT(ret);
                return ret;
        }
@@ -37,7 +37,7 @@ DATA_BLOB data_blob_named(const void *p, size_t length, const char *name)
        if (p) {
                ret.data = talloc_memdup(NULL, p, length);
        } else {
-               ret.data = talloc(NULL, length);
+               ret.data = talloc_size(NULL, length);
        }
        if (ret.data == NULL) {
                ret.length = 0;
@@ -150,7 +150,7 @@ char *data_blob_hex_string(TALLOC_CTX *mem_ctx, DATA_BLOB *blob)
        int i;
        char *hex_string;
 
-       hex_string = talloc_array_p(mem_ctx, char, (blob->length*2)+1);
+       hex_string = talloc_array(mem_ctx, char, (blob->length*2)+1);
        if (!hex_string) {
                return NULL;
        }
@@ -173,3 +173,23 @@ DATA_BLOB data_blob_string_const(const char *str)
        return blob;
 }
 
+DATA_BLOB data_blob_const(const void *p, size_t length)
+{
+       DATA_BLOB blob;
+       blob.data = discard_const(p);
+       blob.length = length;
+       return blob;
+}
+
+
+/*
+  append some data to a data blob
+*/
+NTSTATUS data_blob_append(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, void *p, size_t length)
+{
+       blob->data = talloc_realloc_size(mem_ctx, blob->data, blob->length + length);
+       NT_STATUS_HAVE_NO_MEMORY(blob->data);   
+       memcpy(blob->data + blob->length, p, length);
+       blob->length += length;
+       return NT_STATUS_OK;
+}