diff options
author | Andreas Schneider <asn@samba.org> | 2011-07-01 14:36:31 +0200 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2011-08-01 08:50:35 +0200 |
commit | 9cc6f904240897c81caf78b2c228b776b553ce63 (patch) | |
tree | c9c85c2bd2233c15d63f47865d5f9ff05b07eacc /source3/librpc | |
parent | 169d0c431265651996f3063c3de6503f84894720 (diff) | |
download | samba-9cc6f904240897c81caf78b2c228b776b553ce63.tar.gz samba-9cc6f904240897c81caf78b2c228b776b553ce63.tar.bz2 samba-9cc6f904240897c81caf78b2c228b776b553ce63.zip |
s3-librpc: Add dcerpc_binding_vector_dup().
Diffstat (limited to 'source3/librpc')
-rw-r--r-- | source3/librpc/rpc/dcerpc_ep.c | 33 | ||||
-rw-r--r-- | source3/librpc/rpc/dcerpc_ep.h | 12 |
2 files changed, 45 insertions, 0 deletions
diff --git a/source3/librpc/rpc/dcerpc_ep.c b/source3/librpc/rpc/dcerpc_ep.c index 520460a853..d73c43dc64 100644 --- a/source3/librpc/rpc/dcerpc_ep.c +++ b/source3/librpc/rpc/dcerpc_ep.c @@ -243,6 +243,39 @@ NTSTATUS dcerpc_binding_vector_add_unix(const struct ndr_interface_table *iface, return NT_STATUS_OK; } +struct dcerpc_binding_vector *dcerpc_binding_vector_dup(TALLOC_CTX *mem_ctx, + const struct dcerpc_binding_vector *bvec) +{ + struct dcerpc_binding_vector *v; + uint32_t i; + + v = talloc(mem_ctx, struct dcerpc_binding_vector); + if (v == NULL) { + return NULL; + } + + v->bindings = talloc_array(v, struct dcerpc_binding, bvec->allocated); + if (v->bindings == NULL) { + talloc_free(v); + return NULL; + } + v->allocated = bvec->allocated; + + for (i = 0; i < bvec->count; i++) { + struct dcerpc_binding *b; + + b = dcerpc_binding_dup(v->bindings, &bvec->bindings[i]); + if (b == NULL) { + talloc_free(v); + return NULL; + } + v->bindings[i] = *b; + } + v->count = bvec->count; + + return v; +} + NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx, const struct ndr_interface_table *iface, uint16_t port, diff --git a/source3/librpc/rpc/dcerpc_ep.h b/source3/librpc/rpc/dcerpc_ep.h index 421038f0ad..c982ff853c 100644 --- a/source3/librpc/rpc/dcerpc_ep.h +++ b/source3/librpc/rpc/dcerpc_ep.h @@ -83,6 +83,18 @@ NTSTATUS dcerpc_binding_vector_add_unix(const struct ndr_interface_table *iface, struct dcerpc_binding_vector *bvec, const char *name); +/** + * @brief Duplicate a dcerpc_binding_vector. + * + * @param[in] mem_ctx The memory context to create the duplicate on. + * + * @param[in] bvec The binding vector to duplicate. + * + * @return The duplicated binding vector or NULL on error. + */ +struct dcerpc_binding_vector *dcerpc_binding_vector_dup(TALLOC_CTX *mem_ctx, + const struct dcerpc_binding_vector *bvec); + NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx, const struct ndr_interface_table *iface, uint16_t port, |