diff options
author | Danny Holman <dholman@gymli.org> | 2023-05-17 01:05:38 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2023-05-17 01:05:38 -0500 |
commit | c0e9790335313adb40435b6be06cc41114c0f2c9 (patch) | |
tree | 1bcdd7fd4eb55f469383655e4a09e60fe7a2869d | |
parent | 9996efa8e2010fd4ccfc357bc7e6240bda2edc69 (diff) |
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 <dholman@gymli.org>
-rw-r--r-- | server/Makefile.am | 2 | ||||
-rw-r--r-- | server/include/util.h | 5 | ||||
-rw-r--r-- | server/src/util.c | 73 |
3 files changed, 79 insertions, 1 deletions
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 <stddef.h> + #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 <util.h> +#include <string.h> +#include <stdlib.h> + +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; +} |