From dc5c9fd10aa6ba4d1e5581cc1d5d2f0414b6efcd Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Sat, 26 Oct 2024 16:26:34 +0200 Subject: Use dynamic limits for buffers Use arenas where possible to have growable buffers - Use of bufArena in server and client for receiving&sending messages - Use of inputArena in client Also organized code --- send.c | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) (limited to 'send.c') diff --git a/send.c b/send.c index c12c55f..def9e0b 100644 --- a/send.c +++ b/send.c @@ -3,10 +3,11 @@ #include #include #include -#include #include +#include #include +#include "arena.h" #include "common.h" int main(int argc, char **argv) @@ -29,33 +30,34 @@ int main(int argc, char **argv) err = connect(serverfd, (struct sockaddr *)&address, sizeof(address)); assert(err == 0); - { - u32 author_len = strlen(argv[1]) + 1; // add 1 for null terminator - assert(author_len <= AUTHOR_LEN); + u32 author_len = strlen(argv[1]); // add 1 for null terminator + assert(author_len + 1 <= AUTHOR_LEN); - // convert text to wide string - u32 text_len = strlen(argv[2]) + 1; - wchar_t text_wide[text_len]; - u32 size = mbstowcs(text_wide, argv[2], text_len - 1); - assert(size == text_len - 1); - // null terminate - text_wide[text_len - 1] = 0; + // convert text to wide string + u32 text_len = strlen(argv[2]) + 1; + wchar_t text_wide[text_len]; + u32 size = mbstowcs(text_wide, argv[2], text_len - 1); + assert(size == text_len - 1); + // null terminate + text_wide[text_len - 1] = 0; - u8 buf[STREAM_BUF] = {0}; - Message *m = (Message *)buf; + Arena *bufArena = ArenaAlloc(); + u8 *buf = ArenaPush(bufArena, (text_len - 1) * sizeof(*text_wide)); + Message *mbuf = (Message *)buf; - memcpy(m->author, argv[1], author_len - 1); - message_timestamp(m->timestamp); - m->text_len = text_len; - memcpy(&m->text, text_wide, m->text_len * sizeof(wchar_t)); + memcpy(mbuf->author, argv[1], author_len); + message_timestamp(mbuf->timestamp); + mbuf->text_len = text_len; + memcpy(&mbuf->text, text_wide, mbuf->text_len * sizeof(wchar_t)); - nsend = send(serverfd, buf, MESSAGELENP(m), 0); + nsend = send(serverfd, buf, MESSAGELENP(mbuf), 0); - assert(nsend >= 0); + assert(nsend >= 0); - printf("text_len: %d\n", text_len); - fprintf(stdout, "Sent %d bytes.\n", nsend); - } + printf("text_len: %d\n", text_len); + fprintf(stdout, "Sent %d bytes.\n", nsend); + + ArenaRelease(bufArena); return 0; } -- cgit v1.2.3