summaryrefslogtreecommitdiff
path: root/xs_mime.h
diff options
context:
space:
mode:
Diffstat (limited to 'xs_mime.h')
-rw-r--r--xs_mime.h55
1 files changed, 26 insertions, 29 deletions
diff --git a/xs_mime.h b/xs_mime.h
index 96d722b..ef7affe 100644
--- a/xs_mime.h
+++ b/xs_mime.h
@@ -4,14 +4,14 @@
4 4
5#define _XS_MIME 5#define _XS_MIME
6 6
7char *xs_mime_by_ext(const char *file); 7const char *xs_mime_by_ext(const char *file);
8 8
9#ifdef XS_IMPLEMENTATION 9#ifdef XS_IMPLEMENTATION
10 10
11/* intentionally brain-dead simple */ 11/* intentionally brain-dead simple */
12struct _mime_info { 12struct _mime_info {
13 char *type; 13 const char *type;
14 char *ext; 14 const char *ext;
15} mime_info[] = { 15} mime_info[] = {
16 { "application/json", ".json" }, 16 { "application/json", ".json" },
17 { "image/gif", ".gif" }, 17 { "image/gif", ".gif" },
@@ -19,23 +19,23 @@ struct _mime_info {
19 { "image/jpeg", ".jpg" }, 19 { "image/jpeg", ".jpg" },
20 { "image/png", ".png" }, 20 { "image/png", ".png" },
21 { "image/webp", ".webp" }, 21 { "image/webp", ".webp" },
22 { "video/mp4", ".mp4"}, 22 { "video/mp4", ".mp4" },
23 { "video/mp4", ".mpg4"}, 23 { "video/mp4", ".mpg4" },
24 { "video/mp4", ".m4v"}, 24 { "video/mp4", ".m4v" },
25 { "video/webm", ".webm"}, 25 { "video/webm", ".webm" },
26 { "video/quicktime", ".mov"}, 26 { "video/quicktime", ".mov" },
27 { "video/3gpp", ".3gp"}, 27 { "video/3gpp", ".3gp" },
28 { "video/ogg", ".ogv"}, 28 { "video/ogg", ".ogv" },
29 { "video/flv", ".flv"}, 29 { "video/flv", ".flv" },
30 { "audio/mp3", ".mp3"}, 30 { "audio/mp3", ".mp3" },
31 { "audio/ogg", ".ogg"}, 31 { "audio/ogg", ".ogg" },
32 { "audio/ogg", ".oga"}, 32 { "audio/ogg", ".oga" },
33 { "audio/ogg", ".opus"}, 33 { "audio/ogg", ".opus" },
34 { "audio/flac", ".flac"}, 34 { "audio/flac", ".flac" },
35 { "audio/wav", ".wav"}, 35 { "audio/wav", ".wav" },
36 { "audio/wma", ".wma"}, 36 { "audio/wma", ".wma" },
37 { "audio/aac", ".aac"}, 37 { "audio/aac", ".aac" },
38 { "audio/aac", ".m4a"}, 38 { "audio/aac", ".m4a" },
39 { "text/css", ".css" }, 39 { "text/css", ".css" },
40 { "text/html", ".html" }, 40 { "text/html", ".html" },
41 { "text/plain", ".txt" }, 41 { "text/plain", ".txt" },
@@ -46,23 +46,20 @@ struct _mime_info {
46}; 46};
47 47
48 48
49char *xs_mime_by_ext(const char *file) 49const char *xs_mime_by_ext(const char *file)
50/* returns the MIME type by file extension */ 50/* returns the MIME type by file extension */
51{ 51{
52 struct _mime_info *mi = mime_info; 52 struct _mime_info *mi = mime_info;
53 char *p = NULL; 53 xs *lfile = xs_tolower_i(xs_dup(file));
54 54
55 while (p == NULL && mi->type != NULL) { 55 while (mi->type != NULL) {
56 if (xs_endswith(file, mi->ext)) 56 if (xs_endswith(lfile, mi->ext))
57 p = mi->type; 57 return mi->type;
58 58
59 mi++; 59 mi++;
60 } 60 }
61 61
62 if (p == NULL) 62 return "application/octet-stream";
63 p = "application/octet-stream";
64
65 return p;
66} 63}
67 64
68 65