return ret;
}
+static void silc_server_inviteban_dummy_dest(void *key, void *context,
+ void *user_context)
+{
+ /* Nothing */
+}
+
/* Process invite or ban information */
void silc_server_inviteban_process(SilcServer server, SilcHashTable list,
char *string = NULL;
silc_hash_table_find(list, (void *)1,
NULL, (void **)&string);
- silc_hash_table_del(list, (void *)1);
+ silc_hash_table_del_ext(list, (void *)1, NULL, NULL, NULL, NULL,
+ silc_server_inviteban_dummy_dest, NULL);
if (!string)
string = silc_calloc(len + 2, sizeof(*string));
else
char *string = NULL, *start, *end, *n;
if (silc_hash_table_find(list, (void *)1, NULL, (void **)&string)) {
- silc_hash_table_del(list, (void *)1);
-
if (!strncmp(string, tmp, strlen(string) - 1)) {
- silc_free(string);
+ silc_hash_table_del(list, (void *)1);
string = NULL;
} else {
start = strstr(string, tmp);
n = silc_calloc(strlen(string) - len, sizeof(*n));
strncat(n, string, start - string);
strncat(n, end + 1, ((string + strlen(string)) - end) - 1);
- silc_free(string);
+ silc_hash_table_del(list, (void *)1);
string = n;
}
}
while (silc_hash_table_get(&htl, (void **)&type, (void **)&tmp2)) {
if (type == 2 && !memcmp(tmp2->data, tmp, len)) {
silc_hash_table_del_by_context(list, (void *)2, tmp2);
- silc_buffer_free(tmp2);
break;
}
}
while (silc_hash_table_get(&htl, (void **)&type, (void **)&tmp2)) {
if (type == 3 && !memcmp(tmp2->data, tmp, len)) {
silc_hash_table_del_by_context(list, (void *)3, tmp2);
- silc_buffer_free(tmp2);
break;
}
}
}
}
}
+
+/* Destructor for invite or ban list entrys */
+
+void silc_server_inviteban_destruct(void *key, void *context,
+ void *user_context)
+{
+ switch ((SilcUInt32)key) {
+ case 1:
+ /* Invite string */
+ silc_free(context);
+ break;
+ case 2:
+ case 3:
+ /* Public key/Channel ID SilcBuffer */
+ silc_buffer_free(context);
+ break;
+ default:
+ break;
+ }
+}