X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_entry.c;h=32f272ec189b8fdff80cd6593cd9e72c3675b58c;hb=f5a51141c5f33b6a816b36fe3adcedb53df818b9;hp=0c812de00adbd6bec3672098d5b4565e334c52f3;hpb=52e57c880aba9c5e89f59d962eb9af75670b76e0;p=silc.git diff --git a/lib/silcclient/client_entry.c b/lib/silcclient/client_entry.c index 0c812de0..32f272ec 100644 --- a/lib/silcclient/client_entry.c +++ b/lib/silcclient/client_entry.c @@ -85,13 +85,8 @@ SilcDList silc_client_get_clients_local_ext(SilcClient client, if (!silc_client_nickname_parse(client, conn, (char *)nick, &parsed)) return NULL; - if (!get_all && parsed) + if (!get_all) format = (char *)nick; - if (!parsed) { - parsed = silc_memdup(nick, strlen(nick)); - if (!parsed) - return NULL; - } SILC_LOG_DEBUG(("Find clients by nickname %s", parsed)); @@ -124,7 +119,7 @@ SilcDList silc_client_get_clients_local_ext(SilcClient client, } silc_list_start(list); - if (!format && get_all) { + if (get_all) { /* Take all without any further checking */ while ((id_cache = silc_list_get(list))) { entry = id_cache->context; @@ -517,7 +512,6 @@ SilcUInt16 silc_client_get_clients_by_list(SilcClient client, SilcUInt32 *res_argv_lens = NULL, *res_argv_types = NULL, res_argc = 0; SilcUInt16 idp_len, cmd_ident; SilcID id; - va_list tmp; int i; SILC_LOG_DEBUG(("Resolve clients from Client ID list")); @@ -585,7 +579,7 @@ SilcUInt16 silc_client_get_clients_by_list(SilcClient client, /* We have the clients in cache, get them and call the completion */ silc_client_get_clients_list_cb(client, conn, SILC_COMMAND_WHOIS, - SILC_STATUS_OK, SILC_STATUS_OK, in, tmp); + SILC_STATUS_OK, SILC_STATUS_OK, in, NULL); return 0; err: @@ -791,7 +785,7 @@ SilcClientEntry silc_client_add_client(SilcClient client, return NULL; silc_rwlock_alloc(&client_entry->internal.lock); - silc_atomic_init8(&client_entry->internal.refcnt, 0); + silc_atomic_init16(&client_entry->internal.refcnt, 0); client_entry->id = *id; client_entry->mode = mode; client_entry->realname = userinfo ? strdup(userinfo) : NULL; @@ -810,8 +804,8 @@ SilcClientEntry silc_client_add_client(SilcClient client, client_entry->hostname, sizeof(client_entry->hostname)); - client_entry->channels = silc_hash_table_alloc(1, silc_hash_ptr, NULL, NULL, - NULL, NULL, NULL, TRUE); + client_entry->channels = silc_hash_table_alloc(NULL, 1, silc_hash_ptr, NULL, + NULL, NULL, NULL, NULL, TRUE); if (!client_entry->channels) { silc_free(client_entry->realname); silc_free(client_entry); @@ -995,7 +989,7 @@ void silc_client_del_client_entry(SilcClient client, silc_client_ftp_session_free_client(client, client_entry); if (client_entry->internal.ke) silc_client_abort_key_agreement(client, conn, client_entry); - silc_atomic_uninit8(&client_entry->internal.refcnt); + silc_atomic_uninit16(&client_entry->internal.refcnt); silc_rwlock_free(client_entry->internal.lock); silc_free(client_entry); } @@ -1010,7 +1004,7 @@ SilcBool silc_client_del_client(SilcClient client, SilcClientConnection conn, if (!client_entry) return FALSE; - if (silc_atomic_sub_int8(&client_entry->internal.refcnt, 1) > 0) + if (silc_atomic_sub_int16(&client_entry->internal.refcnt, 1) > 0) return FALSE; SILC_LOG_DEBUG(("Deleting client %p", client_entry)); @@ -1072,10 +1066,10 @@ SilcClientEntry silc_client_ref_client(SilcClient client, SilcClientConnection conn, SilcClientEntry client_entry) { - silc_atomic_add_int8(&client_entry->internal.refcnt, 1); + silc_atomic_add_int16(&client_entry->internal.refcnt, 1); SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry, - silc_atomic_get_int8(&client_entry->internal.refcnt) - 1, - silc_atomic_get_int8(&client_entry->internal.refcnt))); + silc_atomic_get_int16(&client_entry->internal.refcnt) - 1, + silc_atomic_get_int16(&client_entry->internal.refcnt))); return client_entry; } @@ -1086,8 +1080,8 @@ void silc_client_unref_client(SilcClient client, SilcClientConnection conn, { if (client_entry) { SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry, - silc_atomic_get_int8(&client_entry->internal.refcnt), - silc_atomic_get_int8(&client_entry->internal.refcnt) - 1)); + silc_atomic_get_int16(&client_entry->internal.refcnt), + silc_atomic_get_int16(&client_entry->internal.refcnt) - 1)); silc_client_del_client(client, conn, client_entry); } } @@ -1299,7 +1293,7 @@ SilcBool silc_client_nickname_parse(SilcClient client, int len; if (!client->internal->params->nickname_format[0]) { - *ret_nick = NULL; + *ret_nick = silc_strdup(nickname); return TRUE; } @@ -1643,7 +1637,7 @@ SilcChannelEntry silc_client_add_channel(SilcClient client, return NULL; } - channel->user_list = silc_hash_table_alloc(1, silc_hash_ptr, NULL, NULL, + channel->user_list = silc_hash_table_alloc(NULL, 1, silc_hash_ptr, NULL, NULL, NULL, NULL, NULL, TRUE); if (!channel->user_list) { silc_rwlock_free(channel->internal.lock); @@ -1721,6 +1715,7 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn, return FALSE; silc_client_empty_channel(client, conn, channel); + silc_client_del_channel_private_keys(client, conn, channel); silc_hash_table_free(channel->user_list); silc_free(channel->channel_name); silc_free(channel->topic); @@ -1747,7 +1742,6 @@ SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn, if (channel->channel_pubkeys) silc_argument_list_free(channel->channel_pubkeys, SILC_ARGUMENT_PUBLIC_KEY); - silc_client_del_channel_private_keys(client, conn, channel); silc_atomic_uninit16(&channel->internal.refcnt); silc_rwlock_free(channel->internal.lock); silc_schedule_task_del_by_context(conn->client->schedule, channel);