aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspl3g <spleefer6@yandex.ru>2025-03-19 18:09:27 +0300
committerspl3g <spleefer6@yandex.ru>2025-03-19 18:11:15 +0300
commit7a9d112ffa5b954baa43f2eddaa50ec1bd88f96f (patch)
tree29cef1d399035470b2b85d45a1c138d5f21cf862
parent269014e7843fabf395fca10c3364e50825f0fe20 (diff)
make const string actually const
-rw-r--r--lib/arena_strings.c12
-rw-r--r--lib/const_strings.c4
-rw-r--r--lib/const_strings.h6
-rw-r--r--lib/http.c20
4 files changed, 24 insertions, 18 deletions
diff --git a/lib/arena_strings.c b/lib/arena_strings.c
index af933a5..3497c2e 100644
--- a/lib/arena_strings.c
+++ b/lib/arena_strings.c
@@ -25,29 +25,29 @@ const_string arena_cs_concat(arena *a, const_string_da strings, const_string sep
return *strings.data;
}
- volatile int len = sep.len * (strings.len - 1);
+ int len = sep.len * (strings.len - 1);
for (size_t i = 0; i < strings.len; i++) {
len += (strings.data + i)->len;
};
- const_string str = arena_cs_init(a, len);
+ char* str = arena_alloc(a, len);
int offset = 0;
for (size_t i = 0; i < strings.len; i++) {
int curr_strlen = (strings.data + i)->len;
- memcpy(str.data + offset,
+ memcpy(str + offset,
(strings.data + i)->data,
curr_strlen);
offset += curr_strlen;
if (i != strings.len - 1) {
- memcpy(str.data + offset,
+ memcpy(str + offset,
sep.data, sep.len);
offset += sep.len;
}
};
- *(str.data + len + 1) = '\0';
+ *(str + len + 1) = '\0';
- return str;
+ return (const_string){str, len};
};
diff --git a/lib/const_strings.c b/lib/const_strings.c
index 0c0da41..837b138 100644
--- a/lib/const_strings.c
+++ b/lib/const_strings.c
@@ -1,6 +1,6 @@
#include "const_strings.h"
-const_string cs_from_parts(char* data, int len) {
+const_string cs_from_parts(const char* data, int len) {
const_string str;
str.data = data;
str.len = len;
@@ -8,7 +8,7 @@ const_string cs_from_parts(char* data, int len) {
return str;
}
-const_string cs_from_cstr(char* cstr) {
+const_string cs_from_cstr(const char* cstr) {
return cs_from_parts(cstr, strlen(cstr));
}
diff --git a/lib/const_strings.h b/lib/const_strings.h
index bac629e..aaafd81 100644
--- a/lib/const_strings.h
+++ b/lib/const_strings.h
@@ -6,13 +6,13 @@
#include <stdbool.h>
typedef struct {
- char* data;
+ const char* data;
int len;
} const_string;
-const_string cs_from_parts(char* data, int len);
-const_string cs_from_cstr(char* cstr);
+const_string cs_from_parts(const char* data, int len);
+const_string cs_from_cstr(const char* cstr);
const_string cs_slice(const_string src, int from, int to);
const_string cs_chop_delim(const_string *src, char delim);
bool cs_try_chop_delim(const_string *str, char delim, const_string *dst);
diff --git a/lib/http.c b/lib/http.c
index ae0aabc..4c6bd7e 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -103,16 +103,22 @@ void resp_set_code(struct response* resp, response_code code) {
}
void resp_set_json(arena *arena, struct response* resp, const_string json) {
- const_string len_str = arena_cs_init(arena, snprintf(NULL, 0, "%d", json.len+2));
- sprintf(len_str.data, "%d", json.len+2);
- arena_da_append(arena, &resp->headers, ((KV){CS("Content-Length"), len_str}));
+ int num_str_len = snprintf(NULL, 0, "%d", json.len+2);
+ char* len_str = arena_alloc(arena, snprintf(NULL, 0, "%d", json.len+2));
+ sprintf(len_str, "%d", json.len+2);
+ const_string len_cs = {len_str, num_str_len};
+
+ arena_da_append(arena, &resp->headers, ((KV){CS("Content-Length"), len_cs}));
arena_da_append(arena, &resp->headers, ((KV){CS("Content-Type"), CS("application/json")}));
resp->body = json;
}
void resp_set_body(arena *arena, struct response* resp, const_string body) {
- const_string len_str = arena_cs_init(arena, snprintf(NULL, 0, "%d", body.len));
- sprintf(len_str.data, "%d", body.len);
- arena_da_append(arena, &resp->headers, ((KV){CS("Content-Length"), len_str}));
+ int num_str_len = snprintf(NULL, 0, "%d", body.len+2);
+ char* len_str = arena_alloc(arena, snprintf(NULL, 0, "%d", body.len+2));
+ sprintf(len_str, "%d", body.len+2);
+ const_string len_cs = {len_str, num_str_len};
+
+ arena_da_append(arena, &resp->headers, ((KV){CS("Content-Length"), len_cs}));
arena_da_append(arena, &resp->headers, ((KV){CS("Content-Type"), CS("application/text")}));
resp->body = body;
}
@@ -393,7 +399,7 @@ void process_request(struct server *serv, size_t inc_fd) {
compose_response(&req_arena, &resp);
}
- char *resp_cstr = resp.string.data;
+ const char *resp_cstr = resp.string.data;
int resp_len = resp.string.len;
int sent = send(inc_fd, resp_cstr, resp_len, 0);