libgnunetchat

library for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit e3f5660405064de9114153f2326befc83ab93fc0
parent b3c45b010e65a1ba08b6cc64d12bf5e720f2df30
Author: Jacki <jacki@thejackimonster.de>
Date:   Wed, 28 Feb 2024 18:30:31 +0100

Change nick from being a statically sized array to a dynamic allocation

Signed-off-by: Jacki <jacki@thejackimonster.de>

Diffstat:
Msrc/gnunet_chat_context.c | 31+++++++++++++++++++++++--------
Msrc/gnunet_chat_context.h | 4+++-
Msrc/gnunet_chat_lib.c | 4++--
3 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/src/gnunet_chat_context.c b/src/gnunet_chat_context.c @@ -33,6 +33,7 @@ #include <gnunet/gnunet_messenger_service.h> #include <gnunet/gnunet_namestore_service.h> #include <gnunet/gnunet_scheduler_lib.h> +#include <string.h> static const unsigned int initial_map_size_of_room = 8; static const unsigned int initial_map_size_of_contact = 4; @@ -43,7 +44,8 @@ init_new_context (struct GNUNET_CHAT_Context *context, { GNUNET_assert(context); - context->nick[0] = '\0'; + context->flags = 0; + context->nick = NULL; context->topic = NULL; context->deleted = GNUNET_NO; @@ -226,12 +228,13 @@ context_update_nick (struct GNUNET_CHAT_Context *context, { GNUNET_assert(context); - size_t len = nick? strlen(nick) : 0; - if (len >= sizeof(context->nick)) - len = sizeof(context->nick) - 1; + if (context->nick) + GNUNET_free(context->nick); - GNUNET_memcpy(context->nick, nick, len); - context->nick[len] = '\0'; + if (nick) + context->nick = GNUNET_strdup(nick); + else + context->nick = NULL; if (!(context->handle)) return; @@ -281,6 +284,7 @@ context_read_records (struct GNUNET_CHAT_Context *context, } } + context->flags = flags; context_update_nick(context, nick); if (nick) @@ -397,6 +401,8 @@ context_write_records (struct GNUNET_CHAT_Context *context) ); struct GNUNET_MESSENGER_RoomDetailsRecord room_details; + memset(room_details.name, 0, sizeof(room_details.name)); + const char *topic = context->topic; if (topic) @@ -426,8 +432,17 @@ context_write_records (struct GNUNET_CHAT_Context *context) if (context->nick) { - GNUNET_memcpy(room_details.name, context->nick, sizeof(room_details.name)); - room_details.flags = 0; + size_t name_len = strlen(context->nick); + if (name_len >= sizeof(room_details.name)) + name_len = sizeof(room_details.name) - 1; + + GNUNET_memcpy(room_details.name, context->nick, name_len); + room_details.name[name_len] = '\0'; + } + + if ((context->nick) || (context->flags != 0)) + { + room_details.flags = context->flags; data[count].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS; data[count].data = &room_details; diff --git a/src/gnunet_chat_context.h b/src/gnunet_chat_context.h @@ -29,6 +29,7 @@ #include <gnunet/gnunet_gnsrecord_lib.h> #include <gnunet/gnunet_messenger_service.h> #include <gnunet/gnunet_util_lib.h> +#include <stdint.h> #include "gnunet_chat_util.h" @@ -40,7 +41,8 @@ struct GNUNET_CHAT_Context struct GNUNET_CHAT_Handle *handle; enum GNUNET_CHAT_ContextType type; - char nick [256 + 1]; + uint32_t flags; + char *nick; char *topic; int deleted; diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c @@ -856,7 +856,7 @@ GNUNET_CHAT_contact_get_name (const struct GNUNET_CHAT_Contact *contact) return NULL; if ((contact->context) && (! contact->context->topic) && - (contact->context->nick[0])) + (contact->context->nick)) return contact->context->nick; return GNUNET_MESSENGER_contact_get_name(contact->member); @@ -1105,7 +1105,7 @@ GNUNET_CHAT_group_get_name (const struct GNUNET_CHAT_Group *group) if ((!group) || (!(group->context))) return NULL; - if (group->context->nick[0]) + if (group->context->nick) return group->context->nick; return group->context->topic;