From d207a91c3fd67632c4c1f0026bd370e768d62d8c Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Fri, 6 May 2022 19:05:01 -0400 Subject: [PATCH] start using bdwgc --- Makefile | 4 ++++ bin/httpsrv | Bin 21912 -> 0 bytes lib/file.h | 4 ++-- lib/log.h | 13 +++++-------- src/main.c | 2 ++ src/srv.c | 14 ++++++++++++-- 6 files changed, 25 insertions(+), 12 deletions(-) delete mode 100755 bin/httpsrv diff --git a/Makefile b/Makefile index cd46336..8393bfc 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,10 @@ CC_FLAGS ?= CC_FLAGS := ${CC_FLAGS} -Ilib DESTDIR ?= / +ifndef NO_GC +CC_FLAGS := ${CC_FLAGS} -lgc +endif + .PHONY: all debug clean build-release install all: @$(shell mkdir -p bin) diff --git a/bin/httpsrv b/bin/httpsrv deleted file mode 100755 index abbe8412d062a17d21505d8037c5c6e9f9da2a3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21912 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 diff --git a/lib/file.h b/lib/file.h index 848ade6..fbbb0d3 100644 --- a/lib/file.h +++ b/lib/file.h @@ -3,6 +3,7 @@ #include #include #include +#include char* readFile(char* path) { path++; @@ -22,11 +23,10 @@ char* readFile(char* path) { int length = ftell(fp); rewind(fp); - buf = (char*)malloc(sizeof(char) * (length + 1)); + buf = (char*)GC_MALLOC(sizeof(char) * (length + 1)); fread(buf, sizeof(char), length, fp); buf[length] = '\0'; char* tmp = buf; - free(buf); return tmp; } diff --git a/lib/log.h b/lib/log.h index 0ada7e9..e35af6d 100644 --- a/lib/log.h +++ b/lib/log.h @@ -2,50 +2,47 @@ #include #include #include +#include #include "color.h" void info(char* ustr, ...) { char* tstr = GRN "INFO: " CRESET; - char* str = malloc(strlen(tstr) + strlen(ustr) + 1); + char* str = GC_MALLOC(strlen(tstr) + strlen(ustr) + 1); sprintf(str, "%s%s", tstr, ustr); //strcat(str, ustr); va_list lst; va_start(lst, ustr); vprintf(str, lst); - free(str); } void warn(char* ustr, ...) { char* tstr = YEL "WARN: " CRESET; - char* str = malloc(strlen(tstr) + strlen(ustr) + 1); + char* str = GC_MALLOC(strlen(tstr) + strlen(ustr) + 1); sprintf(str, "%s%s", tstr, ustr); va_list lst; va_start(lst, ustr); vprintf(str, lst); - free(str); } void error(char* ustr, ...) { char* tstr = RED "ERR: " CRESET; - char* str = malloc(strlen(tstr) + strlen(ustr) + 1); + char* str = GC_MALLOC(strlen(tstr) + strlen(ustr) + 1); sprintf(str, "%s%s", tstr, ustr); va_list lst; va_start(lst, ustr); vprintf(str, lst); - free(str); } void reqlog(char* ustr, ...) { char* tstr = WHT "REQ: " CRESET; - char* str = malloc(strlen(tstr) + strlen(ustr) + 1); + char* str = GC_MALLOC(strlen(tstr) + strlen(ustr) + 1); sprintf(str, "%s%s", tstr, ustr); va_list lst; va_start(lst, ustr); vprintf(str, lst); - free(str); } diff --git a/src/main.c b/src/main.c index 9c2deea..115bc30 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #define _GNU_SOURCE #include #include +#include #include "srv.c" @@ -17,6 +18,7 @@ void help(char* exe) { } int main(int argc, char** argv) { + GC_INIT(); char* ADDR = DEFAULT_ADDR; int PORT = DEFAULT_PORT; diff --git a/src/srv.c b/src/srv.c index d5f4204..1dd092f 100644 --- a/src/srv.c +++ b/src/srv.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -7,12 +8,20 @@ #include #include #include +#include #include "resHeader.h" #include "reqHeader.h" #include "file.h" #include "log.h" + +void safeExit(int sig) { + info("Exiting...\n"); + GC_gcollect(); + exit(0); +} + int srv(char* ADDR, int PORT) { int srvSocket; struct sockaddr_in srvAddr; @@ -37,6 +46,8 @@ int srv(char* ADDR, int PORT) { return 1; } + signal(SIGINT, safeExit); + info("Server (probably) listening on http://%s:%d\n", ADDR, PORT); while(1) { @@ -93,11 +104,10 @@ funy: { reqlog("%d %s\n", rawHeader.status, request.path); char tmpHeader[1024]; makeHeader(tmpHeader, &rawHeader); - char* resHeader = malloc(strlen(tmpHeader) + strlen(file) + 1); //= "HTTP/1.1 200 OK\r\n\nHello, world!"; + char* resHeader = GC_MALLOC(strlen(tmpHeader) + strlen(file) + 1); //= "HTTP/1.1 200 OK\r\n\nHello, world!"; sprintf(resHeader, "%s%s", (char*)tmpHeader, file); send(client, resHeader, strlen(resHeader), 0); close(client); - free(resHeader); } } }