diff options
Diffstat (limited to 'xs_mime.h')
| -rw-r--r-- | xs_mime.h | 55 |
1 files changed, 26 insertions, 29 deletions
| @@ -4,14 +4,14 @@ | |||
| 4 | 4 | ||
| 5 | #define _XS_MIME | 5 | #define _XS_MIME |
| 6 | 6 | ||
| 7 | char *xs_mime_by_ext(const char *file); | 7 | const 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 */ |
| 12 | struct _mime_info { | 12 | struct _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 | ||
| 49 | char *xs_mime_by_ext(const char *file) | 49 | const 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 | ||