aboutsummaryrefslogtreecommitdiff
path: root/general_network.c
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-06-12 19:04:16 -0400
committerTest_User <hax@andrewyu.org>2024-06-12 19:04:16 -0400
commita785916b1840dca3acec39d17f454a00975282a0 (patch)
tree338109f8ab63dfa6787ccf65a9557fd39a13776d /general_network.c
parent47d7e30f6acb1c170c8e5e15f2656b89a33384f7 (diff)
downloadhaxircd-a785916b1840dca3acec39d17f454a00975282a0.tar.gz
haxircd-a785916b1840dca3acec39d17f454a00975282a0.zip
str_clone finally, as well as some other stuff
Diffstat (limited to 'general_network.c')
-rw-r--r--general_network.c117
1 files changed, 47 insertions, 70 deletions
diff --git a/general_network.c b/general_network.c
index 6df6ba8..4012687 100644
--- a/general_network.c
+++ b/general_network.c
@@ -35,6 +35,8 @@
#include "config.h"
#include "general_network.h"
+#include "haxstring.h"
+#include "haxstring_utils.h"
#ifdef USE_PLAINTEXT
#include "plaintext_network.h"
@@ -144,49 +146,20 @@ int init_general_network(void) {
struct server_info *own_info;
own_info = malloc(sizeof(*own_info));
- if (!own_info) {
- free(server_list.array);
- return 1;
- }
+ if (!own_info)
+ goto init_general_network_free_server_list;
- own_info->sid.data = malloc(SID.len);
- if (!own_info->sid.data) {
- free(server_list.array);
- free(own_info);
- return 1;
- }
- memcpy(own_info->sid.data, SID.data, SID.len);
- own_info->sid.len = SID.len;
-
- own_info->name.data = malloc(SERVER_NAME.len);
- if (!own_info->name.data) {
- free(server_list.array);
- free(own_info->sid.data);
- free(own_info);
- return 1;
- }
- memcpy(own_info->name.data, SERVER_NAME.data, SERVER_NAME.len);
- own_info->name.len = SERVER_NAME.len;
-
- own_info->fullname.data = malloc(SERVER_FULLNAME.len);
- if (!own_info->fullname.data) {
- free(server_list.array);
- free(own_info->name.data);
- free(own_info->sid.data);
- free(own_info);
- return 1;
- }
- memcpy(own_info->fullname.data, SERVER_FULLNAME.data, SERVER_FULLNAME.len);
- own_info->fullname.len = SERVER_FULLNAME.len;
-
- if (set_table_index(&server_list, SID, own_info) != 0) {
- free(server_list.array);
- free(own_info->fullname.data);
- free(own_info->name.data);
- free(own_info->sid.data);
- free(own_info);
- return 1;
- }
+ if (str_clone(&(own_info->sid), SID) != 0)
+ goto init_general_network_free_own_info;
+
+ if (str_clone(&(own_info->name), SERVER_NAME) != 0)
+ goto init_general_network_free_sid;
+
+ if (str_clone(&(own_info->fullname), SERVER_FULLNAME) != 0)
+ goto init_general_network_free_name;
+
+ if (set_table_index(&server_list, SID, own_info) != 0)
+ goto init_general_network_free_fullname;
own_info->next = SID;
own_info->connected_to = (struct table){.array = malloc(0), .len = 0};
@@ -198,6 +171,19 @@ int init_general_network(void) {
user_list.array = malloc(0);
return 0;
+
+ init_general_network_free_fullname:
+ free(own_info->fullname.data);
+ init_general_network_free_name:
+ free(own_info->name.data);
+ init_general_network_free_sid:
+ free(own_info->sid.data);
+ init_general_network_free_own_info:
+ free(own_info);
+ init_general_network_free_server_list:
+ free(server_list.array);
+
+ return 1;
}
int add_user(struct string from, struct string attached_to, struct string uid, struct string nick, struct string fullname, struct string ident, struct string vhost, struct string host, struct string address, size_t user_ts, size_t nick_ts, void *handle, size_t protocol, size_t net) {
@@ -222,47 +208,32 @@ int add_user(struct string from, struct string attached_to, struct string uid, s
new_info->server = attached->sid;
- new_info->uid.data = malloc(uid.len);
- if (!new_info->uid.data)
+ if (unsigned_to_str(user_ts, &(new_info->user_ts_str)) != 0)
goto add_user_free_info;
- memcpy(new_info->uid.data, uid.data, uid.len);
- new_info->uid.len = uid.len;
- new_info->nick.data = malloc(nick.len);
- if (!new_info->nick.data)
+ if (unsigned_to_str(nick_ts, &(new_info->nick_ts_str)) != 0)
+ goto add_user_free_user_ts;
+
+ if (str_clone(&(new_info->uid), uid) != 0)
+ goto add_user_free_nick_ts;
+
+ if (str_clone(&(new_info->nick), nick) != 0)
goto add_user_free_uid;
- memcpy(new_info->nick.data, nick.data, nick.len);
- new_info->nick.len = nick.len;
- new_info->fullname.data = malloc(fullname.len);
- if (!new_info->fullname.data && fullname.len != 0)
+ if (str_clone(&(new_info->fullname), fullname) != 0)
goto add_user_free_nick;
- memcpy(new_info->fullname.data, fullname.data, fullname.len);
- new_info->fullname.len = fullname.len;
- new_info->ident.data = malloc(ident.len);
- if (!new_info->ident.data)
+ if (str_clone(&(new_info->ident), ident) != 0)
goto add_user_free_fullname;
- memcpy(new_info->ident.data, ident.data, ident.len);
- new_info->ident.len = ident.len;
- new_info->vhost.data = malloc(vhost.len);
- if (!new_info->vhost.data)
+ if (str_clone(&(new_info->vhost), vhost) != 0)
goto add_user_free_ident;
- memcpy(new_info->vhost.data, vhost.data, vhost.len);
- new_info->vhost.len = vhost.len;
- new_info->host.data = malloc(host.len);
- if (!new_info->host.data)
+ if (str_clone(&(new_info->host), host) != 0)
goto add_user_free_vhost;
- memcpy(new_info->host.data, host.data, host.len);
- new_info->host.len = host.len;
- new_info->address.data = malloc(address.len);
- if (!new_info->address.data)
+ if (str_clone(&(new_info->address), address) != 0)
goto add_user_free_host;
- memcpy(new_info->address.data, address.data, address.len);
- new_info->address.len = address.len;
if (set_table_index(&user_list, uid, new_info) != 0)
goto add_user_free_address;
@@ -300,6 +271,10 @@ int add_user(struct string from, struct string attached_to, struct string uid, s
free(new_info->nick.data);
add_user_free_uid:
free(new_info->uid.data);
+ add_user_free_nick_ts:
+ free(new_info->nick_ts_str.data);
+ add_user_free_user_ts:
+ free(new_info->user_ts_str.data);
add_user_free_info:
free(new_info);
@@ -329,6 +304,8 @@ void remove_user(struct string from, struct user_info *user, struct string reaso
clear_table(&(user->channel_list));
free(user->channel_list.array);
+ free(user->user_ts_str.data);
+ free(user->nick_ts_str.data);
free(user->uid.data);
free(user->nick.data);
free(user->fullname.data);