aboutsummaryrefslogtreecommitdiff
path: root/src/net/util.c
diff options
context:
space:
mode:
authoramelia squires <[email protected]>2024-09-29 02:49:05 -0500
committeramelia squires <[email protected]>2024-09-29 02:49:05 -0500
commite29d3ea86551380ace8e2c86c9f1f63e901941e1 (patch)
tree526d2f71581e2584c9de2b958fd89b6ce0fb0ac1 /src/net/util.c
parent1feb3c40514a7c1726f29502ce37966c308bea79 (diff)
docs n stuff
Diffstat (limited to 'src/net/util.c')
-rw-r--r--src/net/util.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/net/util.c b/src/net/util.c
index 2dd9a7f..44a525b 100644
--- a/src/net/util.c
+++ b/src/net/util.c
@@ -356,3 +356,65 @@ parray_t* route_match(parray_t* paths, char* request, larray_t** _params){
*_params = params;
return out;
}
+
+map_t* mime_type = NULL;
+void parse_mimetypes(){
+ mime_type = map_init();
+ FILE* fp = fopen(MIMETYPES, "r");
+ char* buffer = calloc(1024, sizeof * buffer);
+
+ for(;fgets(buffer, 1024, fp); memset(buffer, 0, 1024)){
+ int i;
+ for(i = 0; buffer[i] == ' '; i++);
+ if(buffer[i] == '#') continue;
+
+ //printf("s: '%s'\n",buffer + i);
+ char* type = calloc(512, sizeof * type);
+ int type_len = 0;
+ for(; buffer[i + type_len] != ' ' && buffer[i + type_len] != '\t'; type_len++){
+ //printf("%c", buffer[i + type_len]);
+ type[type_len] = buffer[i + type_len];
+ if(buffer[i + type_len] == '\0' || buffer[i + type_len] == '\n') break;
+ }
+ type[type_len] = '\0';
+
+ //check if the type has an associated file type
+ if(buffer[i + type_len] == '\0' || buffer[i + type_len] == '\n'){
+ free(type);
+ continue;
+ }
+ type = realloc(type, (type_len + 1) * sizeof * type);
+
+
+ int file_type_len = 0;
+ char* file_type = calloc(512, sizeof * file_type);
+ i += type_len;
+
+ for(;buffer[i] == ' ' || buffer[i] == '\t'; i++);
+
+ int used = 0;
+ for(;;){
+ if(buffer[i + file_type_len] == ' ' || buffer[i + file_type_len] == '\n' || buffer[i + file_type_len] == '\0'){
+ used = 1;
+ file_type[file_type_len] = '\0';
+ file_type = realloc(file_type, (file_type_len + 1) * sizeof * file_type);
+ //printf("set %s to %s\n",file_type, type);
+ map_set(&mime_type, file_type, type);
+ file_type = calloc(512, sizeof * file_type);
+ if(buffer[i + file_type_len] != ' ') break;
+ i += file_type_len + 1;
+ file_type_len = 0;
+ //printf("finish\n");
+ } else {
+ file_type[file_type_len] = buffer[i + file_type_len];
+ file_type_len++;
+ }
+ }
+ free(file_type);
+
+ //printf("e: '%s'\n", type);
+ if(!used)free(type);
+ }
+ //printf("done\n");
+
+}