From c0e9790335313adb40435b6be06cc41114c0f2c9 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Wed, 17 May 2023 01:05:38 -0500 Subject: server: create utility functions Create a new file for utility functions, including those that strip whitespace from and break apart strings. Signed-off-by: Danny Holman --- server/Makefile.am | 2 +- server/include/util.h | 5 ++++ server/src/util.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 server/src/util.c diff --git a/server/Makefile.am b/server/Makefile.am index 3ecc941..613cd6d 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -1,3 +1,3 @@ bin_PROGRAMS = mratd -mratd_SOURCES = src/mini-rat.c src/server.c src/logging.c src/session.c +mratd_SOURCES = src/mini-rat.c src/server.c src/logging.c src/session.c src/util.c mratd_LDADD = -lpthread diff --git a/server/include/util.h b/server/include/util.h index edadc5a..39c130b 100644 --- a/server/include/util.h +++ b/server/include/util.h @@ -1,8 +1,13 @@ #ifndef MRAT_UTIL_H #define MRAT_UTIL_H +#include + #define container_of(ptr, type, member) ({ \ const typeof(((type*)0)->member)*__mptr = (ptr); \ (type*)((char*)__mptr - offsetof(type, member)); }) +char* str_strip(char *str); +char** str_split(char *str, const char *delim); + #endif diff --git a/server/src/util.c b/server/src/util.c new file mode 100644 index 0000000..068da0a --- /dev/null +++ b/server/src/util.c @@ -0,0 +1,73 @@ +#include +#include +#include + +char* str_rstrip(char *str) { + size_t len = strlen(str) - 1; + int brakes = 1; + while (brakes) { + switch (str[len]) { + case '\n': + str[len] = '\0'; + len--; + break; + case '\t': + str[len] = '\0'; + len--; + break; + case ' ': + str[len] = '\0'; + len--; + break; + default: + brakes = 0; + break; + } + } + return str; +} + +char* str_lstrip(char *str) { + int brakes = 1; + while (brakes) { + switch (str[0]) { + case '\n': + str[0] = '\0'; + str++; + break; + case '\t': + str[0] = '\0'; + str++; + break; + case ' ': + str[0] = '\0'; + str++; + break; + default: + brakes = 0; + break; + } + } + return str; +} + +char* str_strip(char *str) { + str_rstrip(str); + str_lstrip(str); + return str; +} + +char** str_split(char *str, const char *delim) { + char *saveptr; + char *token = strtok_r(str, delim, &saveptr); + token = str_strip(token); + char **ret = NULL; + int count = -1; + while (token != NULL) { + count++; + ret = realloc(ret, sizeof(char*) * (count+1)); + ret[count] = token; + token = strtok_r(NULL, delim, &saveptr); + } + return ret; +} -- cgit v1.2.3