diff options
| author | spl3g <spleefer6@yandex.ru> | 2025-03-19 18:09:27 +0300 |
|---|---|---|
| committer | spl3g <spleefer6@yandex.ru> | 2025-03-19 18:11:15 +0300 |
| commit | 7a9d112ffa5b954baa43f2eddaa50ec1bd88f96f (patch) | |
| tree | 29cef1d399035470b2b85d45a1c138d5f21cf862 | |
| parent | 269014e7843fabf395fca10c3364e50825f0fe20 (diff) | |
make const string actually const
| -rw-r--r-- | lib/arena_strings.c | 12 | ||||
| -rw-r--r-- | lib/const_strings.c | 4 | ||||
| -rw-r--r-- | lib/const_strings.h | 6 | ||||
| -rw-r--r-- | lib/http.c | 20 |
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); @@ -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); |
