diff --git a/.dockerignore b/.dockerignore index 9bda86a..4570fd8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,15 +1,4 @@ -* - -!src/ -!include/ - -!lsm/src/ -!lsm/include/ -!lsm/Makefile -!lsm/config.mk - -!thirdparty/include -!thirdparty/src - -!Makefile -!config.mk +data/ +build/ +trie/build/ +.git/ diff --git a/Dockerfile b/Dockerfile index dd4eb42..2b7b000 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,11 @@ -FROM ubuntu:23.10 AS builder +FROM alpine:3.18.0 AS builder ARG DI_VER=1.2.5 -RUN apt update && \ - apt install -y --no-install-recommends \ - curl ca-certificates \ - build-essential \ - musl musl-dev musl-tools +RUN apk add --update --no-cache \ + build-base \ + make \ + curl WORKDIR /app @@ -19,7 +18,7 @@ RUN curl -Lo - "https://github.com/Yelp/dumb-init/archive/refs/tags/v${DI_VER}.t COPY . ./ -RUN make CFLAGS='-O3' LDFLAGS='-flto -static' && \ +RUN make CFLAGS='-O3' LDFLAGS='-static -flto' && \ strip build/lander && \ readelf -d build/lander && \ [ "$(readelf -d build/lander | grep NEEDED | wc -l)" = 0 ] diff --git a/Makefile b/Makefile index 63c35f2..c40c27a 100644 --- a/Makefile +++ b/Makefile @@ -35,11 +35,15 @@ all: $(BIN) .PHONY: objs objs: $(OBJS) +.PHONY: libtrie +libtrie: + $(MAKE) -C trie + .PHONY: liblsm liblsm: $(MAKE) -C lsm -$(BIN): liblsm $(OBJS) +$(BIN): libtrie liblsm $(OBJS) $(CC) -o $@ $(OBJS) $(_LDFLAGS) $(BUILD_DIR)/$(SRC_DIR)/%.c.o: $(SRC_DIR)/%.c @@ -122,14 +126,12 @@ check: --enable=warning,style \ -ithirdparty/* \ -itrie/* \ - --inline-suppr \ - --check-level=exhaustive \ - --quiet \ - -j$(shell nproc) + --quiet .PHONY: clean clean: rm -rf $(BUILD_DIR) + $(MAKE) -C trie clean $(MAKE) -C lsm clean diff --git a/config.mk b/config.mk index 9b22a21..8336cd1 100644 --- a/config.mk +++ b/config.mk @@ -8,8 +8,8 @@ TEST_DIR = test THIRDPARTY_DIR = thirdparty INC_DIRS = include $(THIRDPARTY_DIR)/include trie/include lsm/include -LIBS = m lsm -LIB_DIRS = ./lsm/build +LIBS = trie m lsm +LIB_DIRS = ./trie/build ./lsm/build # -MMD: generate a .d file for every source file. This file can be imported by # make and makes make aware that a header file has been changed, ensuring an diff --git a/landerctl b/landerctl index 28f586f..57ff78f 100755 --- a/landerctl +++ b/landerctl @@ -10,11 +10,11 @@ fi if [ "$1" = g ]; then - exec curl -is "$URL/$2" | + curl -is "$URL/$2" | sed -En 's/^[lL]ocation: (.*)/\1/p' elif [ "$1" = s ] || [ "$1" = sl ]; then - exec curl \ + curl \ --fail \ -w "${URL}%header{location}" \ -XPOST \ @@ -23,7 +23,7 @@ elif [ "$1" = s ] || [ "$1" = sl ]; then "$URL/$1/$3" elif [ "$1" = p ] || [ "$1" = pl ]; then - exec curl \ + curl \ --fail \ -w "${URL}%header{location}" \ -XPOST \ @@ -33,19 +33,18 @@ elif [ "$1" = p ] || [ "$1" = pl ]; then "$URL/$1/$3" elif [ "$1" = f ] || [ "$1" = fl ]; then - exec curl \ + curl \ --fail \ - -v \ -w "${URL}%header{location}" \ -XPOST \ -H "X-Api-Key: $API_KEY" \ -H "X-Lander-Content-Type: ${content_type}" \ -H "X-Lander-Filename: ${filename}" \ - -T "$2" \ + --data-binary @"$2" \ "$URL/$1/$3" elif [ "$1" = d ]; then - exec curl \ + curl \ --fail \ -XDELETE \ -H "X-Api-Key: $API_KEY" \ diff --git a/lsm/src/store/lsm_store.c b/lsm/src/store/lsm_store.c index 8be426b..460350c 100644 --- a/lsm/src/store/lsm_store.c +++ b/lsm/src/store/lsm_store.c @@ -30,9 +30,7 @@ lsm_error lsm_store_init(lsm_store **ptr) { return lsm_error_ok; } -uint64_t lsm_store_size(const lsm_store *store) { - return lsm_trie_size(store->trie); -} +uint64_t lsm_store_size(const lsm_store *store) { return lsm_trie_size(store->trie); } lsm_error lsm_store_open_read(lsm_entry_handle **out, lsm_store *store, lsm_str *key) { diff --git a/src/event_loop/event_loop.c b/src/event_loop/event_loop.c index a01ca37..8129223 100644 --- a/src/event_loop/event_loop.c +++ b/src/event_loop/event_loop.c @@ -25,7 +25,7 @@ event_loop *event_loop_init() { event_loop *el = calloc(sizeof(event_loop), 1); // No idea if this is a good starter value - el->connections = calloc(sizeof(event_loop_conn *), 16); + el->connections = calloc(sizeof(event_loop_conn), 16); el->connection_count = 16; return el; @@ -34,7 +34,7 @@ event_loop *event_loop_init() { int event_loop_put(event_loop *el, event_loop_conn *conn) { if ((size_t)conn->fd >= el->connection_count) { event_loop_conn **resized = - realloc(el->connections, sizeof(event_loop_conn *) * (conn->fd + 1)); + realloc(el->connections, sizeof(event_loop_conn) * (conn->fd + 1)); if (resized == NULL) { return -1; diff --git a/src/http_loop/http_loop_res.c b/src/http_loop/http_loop_res.c index b29550f..fec7cd9 100644 --- a/src/http_loop/http_loop_res.c +++ b/src/http_loop/http_loop_res.c @@ -1,7 +1,6 @@ #include "http_loop.h" #include "log.h" -// cppcheck-suppress syntaxError static const char *http_response_format = "HTTP/1.1 %i %s\n" "Server: lander/" LANDER_VERSION "\n" "Content-Length: %lu\n"; diff --git a/src/http_loop/http_loop_steps.c b/src/http_loop/http_loop_steps.c index c3ff36a..c3c9c0a 100644 --- a/src/http_loop/http_loop_steps.c +++ b/src/http_loop/http_loop_steps.c @@ -104,7 +104,7 @@ bool http_loop_step_body_to_buf(event_loop_conn *conn) { } ctx->req.body.type = http_body_buf; - ctx->req.body.buf = malloc(ctx->req.body.expected_len * sizeof(char)); + ctx->req.body.buf = malloc(ctx->req.body.expected_len * sizeof(uint8_t)); ctx->req.body.len = 0; }