diff options
author | Pavel Březina <pbrezina@redhat.com> | 2017-01-24 14:02:51 +0100 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-02-01 14:22:29 +0100 |
commit | b1afef0bc8d98c389a7f71307bee8ef9fc991ced (patch) | |
tree | 7ca8cc2addf970215847251340b3196b141f91b5 | |
parent | ea872f140a04419fba3f2b9722da74d7fd1ca1ee (diff) | |
download | sssd-b1afef0bc8d98c389a7f71307bee8ef9fc991ced.tar.gz sssd-b1afef0bc8d98c389a7f71307bee8ef9fc991ced.tar.xz sssd-b1afef0bc8d98c389a7f71307bee8ef9fc991ced.zip |
SBUS: use sss_ptr_hash for signals table
This patch reuses sss_ptr_hash module introduced in NSS patches in sbus code.
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
-rw-r--r-- | src/sbus/sssd_dbus_connection.c | 4 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_private.h | 5 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_signals.c | 58 |
3 files changed, 18 insertions, 49 deletions
diff --git a/src/sbus/sssd_dbus_connection.c b/src/sbus/sssd_dbus_connection.c index 5e493fb03..de134f2f2 100644 --- a/src/sbus/sssd_dbus_connection.c +++ b/src/sbus/sssd_dbus_connection.c @@ -177,8 +177,8 @@ int sbus_init_connection(TALLOC_CTX *ctx, return EIO; } - ret = sbus_incoming_signal_hash_init(conn, &conn->incoming_signals); - if (ret != EOK) { + conn->incoming_signals = sbus_incoming_signal_hash_init(conn); + if (conn->incoming_signals == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Cannot create incoming singals " "hash table\n"); talloc_free(conn); diff --git a/src/sbus/sssd_dbus_private.h b/src/sbus/sssd_dbus_private.h index a5a2d47f4..a3d4bae16 100644 --- a/src/sbus/sssd_dbus_private.h +++ b/src/sbus/sssd_dbus_private.h @@ -180,9 +180,8 @@ sbus_signal_handler(DBusConnection *conn, DBusMessage *message, void *handler_data); -errno_t -sbus_incoming_signal_hash_init(TALLOC_CTX *mem_ctx, - hash_table_t **_table); +hash_table_t * +sbus_incoming_signal_hash_init(TALLOC_CTX *mem_ctx); void sbus_register_common_signals(struct sbus_connection *conn, void *pvt); diff --git a/src/sbus/sssd_dbus_signals.c b/src/sbus/sssd_dbus_signals.c index 3f463e603..be1c8527e 100644 --- a/src/sbus/sssd_dbus_signals.c +++ b/src/sbus/sssd_dbus_signals.c @@ -23,6 +23,7 @@ #include <dhash.h> #include "util/util.h" +#include "util/sss_ptr_hash.h" #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_private.h" @@ -60,11 +61,10 @@ struct sbus_incoming_signal_data { void *handler_data; }; -errno_t -sbus_incoming_signal_hash_init(TALLOC_CTX *mem_ctx, - hash_table_t **_table) +hash_table_t * +sbus_incoming_signal_hash_init(TALLOC_CTX *mem_ctx) { - return sss_hash_create(mem_ctx, 10, _table); + return sss_ptr_hash_create(mem_ctx, NULL, NULL); } static errno_t @@ -76,30 +76,20 @@ sbus_incoming_signal_hash_add(hash_table_t *table, { TALLOC_CTX *tmp_ctx; struct sbus_incoming_signal_data *data; - hash_key_t key; - hash_value_t value; + char *key; errno_t ret; - bool has_key; - int hret; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { return ENOMEM; } - key.type = HASH_KEY_STRING; - key.str = talloc_asprintf(tmp_ctx, "%s.%s", iface, a_signal); - if (key.str == NULL) { + key = talloc_asprintf(tmp_ctx, "%s.%s", iface, a_signal); + if (key == NULL) { ret = ENOMEM; goto done; } - has_key = hash_has_key(table, &key); - if (has_key) { - ret = EEXIST; - goto done; - } - data = talloc_zero(tmp_ctx, struct sbus_incoming_signal_data); if (data == NULL) { ret = ENOMEM; @@ -109,16 +99,11 @@ sbus_incoming_signal_hash_add(hash_table_t *table, data->handler_data = handler_data; data->handler_fn = handler_fn; - value.type = HASH_VALUE_PTR; - value.ptr = data; - - hret = hash_enter(table, &key, &value); - if (hret != HASH_SUCCESS) { - ret = EIO; + ret = sss_ptr_hash_add(table, key, data, struct sbus_incoming_signal_data); + if (ret != EOK) { goto done; } - talloc_steal(table, key.str); talloc_steal(table, data); ret = EOK; @@ -134,31 +119,16 @@ sbus_incoming_signal_hash_lookup(hash_table_t *table, const char *a_signal) { struct sbus_incoming_signal_data *data; - hash_key_t key; - hash_value_t value; - int hret; + char *key; - key.type = HASH_KEY_STRING; - key.str = talloc_asprintf(NULL, "%s.%s", iface, a_signal); - if (key.str == NULL) { + key = talloc_asprintf(NULL, "%s.%s", iface, a_signal); + if (key == NULL) { return NULL; } - hret = hash_lookup(table, &key, &value); - if (hret == HASH_ERROR_KEY_NOT_FOUND) { - data = NULL; - goto done; - } else if (hret != HASH_SUCCESS) { - DEBUG(SSSDBG_OP_FAILURE, - "Unable to search hash table: hret=%d\n", hret); - data = NULL; - goto done; - } - - data = talloc_get_type(value.ptr, struct sbus_incoming_signal_data); + data = sss_ptr_hash_lookup(table, key, struct sbus_incoming_signal_data); + talloc_free(key); -done: - talloc_free(key.str); return data; } |