From 1dd64341d801d9adc66aa6432dc3afb64644e29b Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 17 Jul 2014 15:05:30 +0000 Subject: messaging4: Change irpc_servers_by_name to NTSTATUS For me, counted arrays are easier to deal with than NULL-terminated ones. Here we also had a "server_id_is_disconnection" convention, which was not really obvious. Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher Autobuild-User(master): Volker Lendecke Autobuild-Date(master): Mon Jul 21 20:28:53 CEST 2014 on sn-devel-104 --- source4/lib/messaging/messaging.c | 43 ++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'source4/lib/messaging/messaging.c') diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index 00cff1210d..137d859f2b 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -951,32 +951,38 @@ NTSTATUS irpc_add_name(struct imessaging_context *msg_ctx, const char *name) /* return a list of server ids for a server name */ -struct server_id *irpc_servers_byname(struct imessaging_context *msg_ctx, - TALLOC_CTX *mem_ctx, - const char *name) +NTSTATUS irpc_servers_byname(struct imessaging_context *msg_ctx, + TALLOC_CTX *mem_ctx, const char *name, + unsigned *num_servers, + struct server_id **servers) { struct tdb_wrap *t = msg_ctx->names_db; TDB_DATA rec; - int count, i; + unsigned count; struct server_id *ret; rec = tdb_fetch_bystring(t->tdb, name); if (rec.dptr == NULL) { - return NULL; + enum TDB_ERROR err = tdb_error(t->tdb); + return map_nt_error_from_tdb(err); } + count = rec.dsize / sizeof(struct server_id); - ret = talloc_array(mem_ctx, struct server_id, count+1); + if (count == 0) { + return NT_STATUS_NOT_FOUND; + } + + ret = talloc_array(mem_ctx, struct server_id, count); if (ret == NULL) { free(rec.dptr); - return NULL; - } - for (i=0;i