Author: metze Date: 2005-01-11 15:19:32 +0000 (Tue, 11 Jan 2005) New Revision: 4686
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4686 Log: cerate a function to create a socket by specifying an socket_ops struct metze Modified: branches/SAMBA_4_0/source/lib/socket/socket.c Changeset: Modified: branches/SAMBA_4_0/source/lib/socket/socket.c =================================================================== --- branches/SAMBA_4_0/source/lib/socket/socket.c 2005-01-11 15:18:18 UTC (rev 4685) +++ branches/SAMBA_4_0/source/lib/socket/socket.c 2005-01-11 15:19:32 UTC (rev 4686) @@ -32,27 +32,23 @@ return 0; } -NTSTATUS socket_create(const char *name, enum socket_type type, struct socket_context **new_sock, uint32_t flags) +NTSTATUS socket_create_with_ops(TALLOC_CTX *mem_ctx, const struct socket_ops *ops, struct socket_context **new_sock, uint32_t flags) { NTSTATUS status; - (*new_sock) = talloc_p(NULL, struct socket_context); + (*new_sock) = talloc(mem_ctx, struct socket_context); if (!(*new_sock)) { return NT_STATUS_NO_MEMORY; } - (*new_sock)->type = type; + (*new_sock)->type = ops->type; (*new_sock)->state = SOCKET_STATE_UNDEFINED; (*new_sock)->flags = flags; (*new_sock)->fd = -1; (*new_sock)->private_data = NULL; - (*new_sock)->ops = socket_getops_byname(name, type); - if (!(*new_sock)->ops) { - talloc_free(*new_sock); - return NT_STATUS_INVALID_PARAMETER; - } + (*new_sock)->ops = ops; status = (*new_sock)->ops->fn_init((*new_sock)); if (!NT_STATUS_IS_OK(status)) { @@ -73,6 +69,18 @@ return NT_STATUS_OK; } +NTSTATUS socket_create(const char *name, enum socket_type type, struct socket_context **new_sock, uint32_t flags) +{ + const struct socket_ops *ops; + + ops = socket_getops_byname(name, type); + if (!ops) { + return NT_STATUS_INVALID_PARAMETER; + } + + return socket_create_with_ops(NULL, ops, new_sock, flags); +} + void socket_destroy(struct socket_context *sock) { /* the close is handled by the destructor */
