void mime_magic( char *filename, char *key ) { struct obj_mime *tuple = NULL; magic_t magic = NULL; const char *mime = NULL; if( ! file_isreg( filename) ) { return; } if( (magic = magic_open( MAGIC_ERROR|MAGIC_MIME)) == NULL ) { return; } if( magic_load( magic,NULL) != 0 ) { magic_close( magic ); return; } if( (mime = magic_file( magic, filename)) == NULL ) { magic_close( magic ); return; } /* Cache mime type in memory */ mutex_block( _main->mime->mutex ); tuple = mime_add( key, mime ); mutex_unblock( _main->mime->mutex ); /* Clear handle */ magic_close( magic ); info( NULL, 0, "New MIME: \"%s\" -> \"%s\"", tuple->key, tuple->val ); }
/* add mime line */ int mime_add_line(MIME_MAP *mime_map, char *p, char *end) { int n = 0; char *s = NULL; if(mime_map && p && end) { while(p < end) { while(p < end && (*p == 0x20 || *p == '\t' || *p == '\r' || *p == '\n') ) ++p; s = p; while(p < end && (*p != ',' && *p != ';' && *p != 0x20 && *p != '\t'))++p; if((n = (p - s)) > 0) { mime_add(mime_map, s, n); } ++p; } return 0; } return -1; }
void mime_load( void ) { mime_add( "___", "application/octet-stream; charset=binary" ); mime_add( "7z", "application/x-7z-compressed; charset=binary" ); mime_add( "asf", "video/x-ms-asf; charset=binary" ); mime_add( "asx", "video/x-ms-asf; charset=binary" ); mime_add( "avi", "video/x-msvideo; charset=binary" ); mime_add( "bz2", "application/x-bzip2; charset=binary" ); mime_add( "css", "text/css" ); mime_add( "deb", "application/x-debian-package; charset=binary" ); mime_add( "divx", "video/x-msvideo; charset=binary" ); mime_add( "dsc", "text/plain; charset=utf-8" ); mime_add( "gif", "image/gif; charset=binary" ); mime_add( "gpg", "application/pgp-signature; charset=utf-8" ); mime_add( "gz", "application/x-gzip; charset=binary" ); mime_add( "html", "text/html; charset=utf-8" ); mime_add( "ico", "image/x-ico; charset=binary" ); mime_add( "iso", "application/x-iso9660-image; charset=binary" ); mime_add( "js", "application/x-javascript" ); mime_add( "jpg", "image/jpeg; charset=binary" ); mime_add( "jpeg", "image/jpeg; charset=binary" ); mime_add( "m3u", "text/plain; charset=utf-8" ); mime_add( "m4v", "video/mp4; charset=binary" ); mime_add( "mkv", "video/x-matroska; charset=binary" ); mime_add( "mov", "video/quicktime; charset=binary" ); mime_add( "mp3", "audio/mpeg; charset=binary" ); mime_add( "mp4", "video/mp4; charset=binary" ); mime_add( "mpeg", "video/mpeg; charset=binary" ); mime_add( "mpg", "video/mpeg; charset=binary" ); mime_add( "nfo", "text/plain; charset=utf-8" ); mime_add( "ogg", "application/ogg; charset=binary" ); mime_add( "ogm", "application/ogg; charset=binary" ); mime_add( "pdf", "application/pdf; charset=binary" ); mime_add( "pl", "text/x-perl; charset=utf-8" ); mime_add( "png", "image/png; charset=binary" ); mime_add( "rar", "application/x-rar; charset=binary" ); mime_add( "rss", "application/rss+xml; charset=utf-8" ); mime_add( "txt", "text/plain; charset=utf-8" ); mime_add( "wmv", "video/x-ms-asf; charset=binary" ); mime_add( "woff", "application/font-woff" ); mime_add( "xml", "application/xml; charset=utf-8" ); mime_add( "zip", "application/zip; charset=binary" ); }