1 /* 2 Copyright 1999-2001, Be Incorporated. All Rights Reserved. 3 This file may be used under the terms of the Be Sample Code License. 4 */ 5 6 #include <SupportDefs.h> 7 8 #include <string.h> 9 10 #include <file_systems/mime_ext_table.h> 11 12 13 struct ext_mime { 14 char *extension; 15 char *mime; 16 }; 17 18 static struct ext_mime mimes[] = { 19 { "gz", "application/x-gzip" }, 20 { "hqx", "application/x-binhex40" }, 21 { "lha", "application/x-lharc" }, 22 { "pcl", "application/x-pcl" }, 23 { "pdf", "application/pdf" }, 24 { "ps", "application/postscript" }, 25 { "sit", "application/x-stuff-it" }, 26 { "tar", "application/x-tar" }, 27 { "tgz", "application/x-gzip" }, 28 { "uue", "application/x-uuencode" }, 29 { "z", "application/x-compress" }, 30 { "zip", "application/zip" }, 31 { "zoo", "application/x-zoo" }, 32 { "rar", "application/x-rar" }, 33 { "pkg", "application/x-scode-UPkg" }, 34 { "7z", "application/x-7z-compressed" }, 35 { "bz2", "application/x-bzip2" }, 36 { "xz", "application/x-xz" }, 37 38 { "jar", "application/x-jar" }, 39 40 { "aif", "audio/x-aiff" }, 41 { "aiff", "audio/x-aiff" }, 42 { "au", "audio/basic" }, 43 { "mid", "audio/x-midi" }, 44 { "midi", "audio/x-midi" }, 45 { "mod", "audio/mod" }, 46 { "ra", "audio/x-real-audio" }, 47 { "wav", "audio/x-wav" }, 48 { "mp3", "audio/x-mpeg" }, 49 { "ogg", "audio/x-vorbis" }, 50 { "flac", "audio/x-flac" }, 51 { "wma", "audio/x-ms-wma" }, 52 53 { "avi", "video/x-msvideo" }, 54 { "mov", "video/quicktime" }, 55 { "qt", "video/quicktime" }, 56 { "mpg", "video/mpeg" }, 57 { "mpeg", "video/mpeg" }, 58 { "flv", "video/x-flv" }, 59 { "mp4", "video/mp4" }, 60 { "mkv", "video/x-matroska" }, 61 { "asf", "application/x-asf" }, 62 { "rm", "video/vnd.rn-realvideo" }, 63 { "wmv", "video/x-ms-wmv" }, 64 65 { "bmp", "image/x-bmp" }, 66 { "fax", "image/g3fax" }, 67 { "gif", "image/gif" }, 68 { "iff", "image/x-iff" }, 69 { "jpg", "image/jpeg" }, 70 { "jpeg", "image/jpeg" }, 71 { "pbm", "image/x-portable-bitmap" }, 72 { "pcx", "image/x-pcx" }, 73 { "pgm", "image/x-portable-graymap" }, 74 { "png", "image/png" }, 75 { "ppm", "image/x-portable-pixmap" }, 76 { "rgb", "image/x-rgb" }, 77 { "tga", "image/x-targa" }, 78 { "tif", "image/tiff" }, 79 { "tiff", "image/tiff" }, 80 { "xbm", "image/x-xbitmap" }, 81 { "djvu", "image/x-djvu" }, 82 { "svg", "image/svg+xml" }, 83 { "ico", "image/vnd.microsoft.icon" }, 84 85 { "doc", "application/msword" }, 86 { "xls", "application/vnd.ms-excel" }, 87 { "xls", "application/vnd.ms-excel" }, 88 { "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, 89 { "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, 90 { "ppt", "application/vnd.ms-powerpoint" }, 91 { "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation" }, 92 { "chm", "application/x-chm" }, 93 94 { "txt", "text/plain" }, 95 { "xml", "text/plain" }, 96 { "htm", "text/html" }, 97 { "html", "text/html" }, 98 { "rtf", "text/rtf" }, 99 { "c", "text/x-source-code" }, 100 { "cc", "text/x-source-code" }, 101 { "c++", "text/x-source-code" }, 102 { "h", "text/x-source-code" }, 103 { "hh", "text/x-source-code" }, 104 { "hpp", "text/x-source-code" }, 105 { "cxx", "text/x-source-code" }, 106 { "cpp", "text/x-source-code" }, 107 { "S", "text/x-source-code" }, 108 { "java", "text/x-source-code" }, 109 { "ini", "text/plain" }, 110 { "inf", "text/plain" }, 111 112 { "ttf", "application/x-truetype" }, 113 114 { NULL, NULL } 115 }; 116 117 118 const char* kAttrMimeTypeName = "BEOS:TYPE"; 119 120 static const char* kFailBackMime = "application/octet-stream"; 121 static const char* kDirectoryMime = "application/x-vnd.Be-directory"; 122 123 124 status_t 125 set_mime(const char** mime, const char* filename) 126 { 127 struct ext_mime *p; 128 int32 namelen; 129 int32 ext_len; 130 *mime = NULL; 131 132 if (filename == NULL) { 133 *mime = kDirectoryMime; 134 return B_NO_ERROR; 135 } 136 namelen = strlen(filename); 137 138 for (p = mimes; p->extension; p++) { 139 ext_len = strlen(p->extension); 140 141 if (namelen <= ext_len) 142 continue; 143 144 if (filename[namelen-ext_len-1] != '.') 145 continue; 146 147 if (!strcasecmp(filename + namelen - ext_len, p->extension)) 148 break; 149 } 150 if(p->mime == NULL) 151 *mime = kFailBackMime; 152 else 153 *mime = p->mime; 154 155 return B_NO_ERROR; 156 } 157