summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@sernet.de>2008-09-09 14:34:28 +0200
committerVolker Lendecke <vl@samba.org>2008-09-09 17:37:34 +0200
commitce47a2b2e3b76edb77673efeb14c4dd0c8cd7aa5 (patch)
tree81203dd5c4cea5f5669d188abdb96d4f594d93c5
parent6061b3fa6464c43f0f78a84d75a811ee8fb6ba92 (diff)
downloadsamba-ce47a2b2e3b76edb77673efeb14c4dd0c8cd7aa5.tar.gz
samba-ce47a2b2e3b76edb77673efeb14c4dd0c8cd7aa5.tar.bz2
samba-ce47a2b2e3b76edb77673efeb14c4dd0c8cd7aa5.zip
Add a utility function to append a DATA_BLOB to a talloc object
(This used to be commit d8259cbe666d96cc468203a64fb208c02a64849f)
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/lib/util.c26
2 files changed, 27 insertions, 0 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index e94a2178c0..8d033f1837 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1354,6 +1354,7 @@ bool mask_match_list(const char *string, char **list, int listLen, bool is_case_
bool unix_wild_match(const char *pattern, const char *string);
bool name_to_fqdn(fstring fqdn, const char *name);
void *talloc_check_name_abort(const void *ptr, const char *name);
+void *talloc_append_blob(TALLOC_CTX *mem_ctx, void *buf, DATA_BLOB blob);
uint32 map_share_mode_to_deny_mode(uint32 share_access, uint32 private_options);
pid_t procid_to_pid(const struct server_id *proc);
void set_my_vnn(uint32 vnn);
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 201d87aeb5..ec43ea7037 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -2990,6 +2990,32 @@ void *talloc_check_name_abort(const void *ptr, const char *name)
return NULL;
}
+/**********************************************************************
+ Append a DATA_BLOB to a talloc'ed object
+***********************************************************************/
+
+void *talloc_append_blob(TALLOC_CTX *mem_ctx, void *buf, DATA_BLOB blob)
+{
+ size_t old_size = 0;
+ char *result;
+
+ if (blob.length == 0) {
+ return buf;
+ }
+
+ if (buf != NULL) {
+ old_size = talloc_get_size(buf);
+ }
+
+ result = (char *)TALLOC_REALLOC(mem_ctx, buf, old_size + blob.length);
+ if (result == NULL) {
+ return NULL;
+ }
+
+ memcpy(result + old_size, blob.data, blob.length);
+ return result;
+}
+
uint32 map_share_mode_to_deny_mode(uint32 share_access, uint32 private_options)
{
switch (share_access & ~FILE_SHARE_DELETE) {