diff options
| author | Soikk | 2025-06-14 02:48:33 +0200 |
|---|---|---|
| committer | Soikk | 2025-06-14 02:48:33 +0200 |
| commit | 02d02ed4ddba4d66d3f1d5ec92bfe9ec4ca182d0 (patch) | |
| tree | 9ac6a83eb11455314946af54f1d3740f015c99c9 /src/mime/mime.c | |
| parent | 4b87e75761cc90d6fe57dff08f8adc5559999508 (diff) | |
| download | soikk-server-02d02ed4ddba4d66d3f1d5ec92bfe9ec4ca182d0.tar.xz soikk-server-02d02ed4ddba4d66d3f1d5ec92bfe9ec4ca182d0.tar.zst | |
Reworked config. Added mime module. Reworked mime related functions in net module.
Diffstat (limited to 'src/mime/mime.c')
| -rw-r--r-- | src/mime/mime.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/mime/mime.c b/src/mime/mime.c new file mode 100644 index 0000000..99250ea --- /dev/null +++ b/src/mime/mime.c @@ -0,0 +1,59 @@ +#include "mime.h" + + +// look into making this a BST or something more efficient +static mime_type *types; + +void add_mime_type(mime_type mt){ + list_push(types, mt); +} + +void read_mime_types(str file){ + if(types == NULL){ + init_nlist(types); + } + int off = 0; + while(off < file.len){ + while(off < file.len && charisspace(file.ptr[off])) off++; + if(file.ptr[off] == '#'){ + while(off < file.len && !charislinebreak(file.ptr[off])) off++; + continue; + } + mime_type mt; + mt.desc = sread_delim_f(file.ptr + off, charisspace, true); + off += mt.desc.len; + while(off < file.len && charisspace(file.ptr[off])) off++; + mt.ext = sread_delim_f(file.ptr + off, charisspace, true); + off += mt.ext.len; + while(off < file.len && !charislinebreak(file.ptr[off])) off++; + if(mt.desc.len == 0 || mt.ext.len == 0){ + continue; + } + add_mime_type(mt); + } +} + +str get_mime_type(str ext){ + int size = list_size(types); + for(int i = 0; i < size; i++){ + if(streq(types[i].ext, ext)){ + return types[i].desc; + } + } + return (str){0}; +} + +void free_mime_types(void){ + list_free(types); +} + +void print_mime_types(void){ + int size = list_size(types); + printf("\t- types: {\n"); + for(int i = 0; i < size; i++){ + printf("\t\t%.*s\t%.*s\n", + types[i].desc.len, types[i].desc.ptr, types[i].ext.len, types[i].ext.ptr); + } + printf("\t}\n"); +} + |
