summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2023-05-17 01:05:38 -0500
committerDanny Holman <dholman@gymli.org>2023-05-17 01:05:38 -0500
commitc0e9790335313adb40435b6be06cc41114c0f2c9 (patch)
tree1bcdd7fd4eb55f469383655e4a09e60fe7a2869d /server
parent9996efa8e2010fd4ccfc357bc7e6240bda2edc69 (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>
Diffstat (limited to 'server')
-rw-r--r--server/Makefile.am2
-rw-r--r--server/include/util.h5
-rw-r--r--server/src/util.c73
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;
+}