A kernel mime_table module, so not every fs will bundle its own.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10580 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2005-01-04 10:08:27 +00:00
parent e189e3d779
commit d9574bb892
4 changed files with 325 additions and 0 deletions
@@ -0,0 +1,7 @@
SubDir OBOS_TOP src add-ons kernel generic mime_table ;
R5KernelAddon mime_table : kernel generic :
mime_table.c
module.c
;
@@ -0,0 +1,120 @@
## BeOS Generic Makefile v2.2 ##
## Fill in this file to specify the project being created, and the referenced
## makefile-engine will do all of the hard work for you. This handles both
## Intel and PowerPC builds of the BeOS.
## Application Specific Settings ---------------------------------------------
# specify the name of the binary
NAME= mime_table
# specify the type of binary
# APP: Application
# SHARED: Shared library or add-on
# STATIC: Static library archive
# DRIVER: Kernel Driver
TYPE= DRIVER
# add support for new Pe and Eddie features
# to fill in generic makefile
#%{
# @src->@
# specify the source files to use
# full paths or paths relative to the makefile can be included
# all files, regardless of directory, will have their object
# files created in the common object directory.
# Note that this means this makefile will not work correctly
# if two source files with the same name (source.c or source.cpp)
# are included from different directories. Also note that spaces
# in folder names do not work well with this makefile.
SRCS= mime_table.c module.c
# specify the resource files to use
# full path or a relative path to the resource file can be used.
RSRCS=
# @<-src@
#%}
# end support for Pe and Eddie
# specify additional libraries to link against
# there are two acceptable forms of library specifications
# - if your library follows the naming pattern of:
# libXXX.so or libXXX.a you can simply specify XXX
# library: libbe.so entry: be
#
# - if your library does not follow the standard library
# naming scheme you need to specify the path to the library
# and it's name
# library: my_lib.a entry: my_lib.a or path/my_lib.a
LIBS=
# specify additional paths to directories following the standard
# libXXX.so or libXXX.a naming scheme. You can specify full paths
# or paths relative to the makefile. The paths included may not
# be recursive, so include all of the paths where libraries can
# be found. Directories where source files are found are
# automatically included.
LIBPATHS=
# additional paths to look for system headers
# thes use the form: #include <header>
# source file directories are NOT auto-included here
SYSTEM_INCLUDE_PATHS = ../../../../../headers/os/drivers/
# additional paths to look for local headers
# thes use the form: #include "header"
# source file directories are automatically included
LOCAL_INCLUDE_PATHS =
# specify the level of optimization that you desire
# NONE, SOME, FULL
OPTIMIZE=
# specify any preprocessor symbols to be defined. The symbols will not
# have their values set automatically; you must supply the value (if any)
# to use. For example, setting DEFINES to "DEBUG=1" will cause the
# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG"
# would pass "-DDEBUG" on the compiler's command line.
DEFINES=
# specify special warning levels
# if unspecified default warnings will be used
# NONE = supress all warnings
# ALL = enable all warnings
WARNINGS =
# specify whether image symbols will be created
# so that stack crawls in the debugger are meaningful
# if TRUE symbols will be created
SYMBOLS =
# specify debug settings
# if TRUE will allow application to be run from a source-level
# debugger. Note that this will disable all optimzation.
DEBUGGER =
# specify additional compiler flags for all files
COMPILER_FLAGS =
# specify additional linker flags
LINKER_FLAGS =
# specify the version of this particular item
# (for example, -app 3 4 0 d 0 -short 340 -long "340 "`echo -n -e '\302\251'`"1999 GNU GPL")
# This may also be specified in a resource.
APP_VERSION =
# (for TYPE == DRIVER only) Specify desired location of driver in the /dev
# hierarchy. Used by the driverinstall rule. E.g., DRIVER_PATH = video/usb will
# instruct the driverinstall rule to place a symlink to your driver's binary in
# ~/add-ons/kernel/drivers/dev/video/usb, so that your driver will appear at
# /dev/video/usb when loaded. Default is "misc".
DRIVER_PATH =
## include the makefile-engine
include $(BUILDHOME)/etc/makefile-engine
@@ -0,0 +1,102 @@
/*
Copyright 1999-2001, Be Incorporated. All Rights Reserved.
This file may be used under the terms of the Be Sample Code License.
extended: 2001-12-11 by Marcus Overhagen
*/
#include <mime_table.h>
struct ext_mime mimes[] = {
{ "gz", "application/x-gzip" },
{ "hqx", "application/x-binhex40" },
{ "lha", "application/x-lharc" },
{ "lzh", "application/x-lharc" },
{ "pcl", "application/x-pcl" },
{ "pdf", "application/pdf" },
{ "ps", "application/postscript" },
{ "sit", "application/x-stuff-it" },
{ "tar", "application/x-tar" },
{ "tgz", "application/x-gzip" },
{ "uue", "application/x-uuencode" },
{ "z", "application/x-compress" },
{ "zip", "application/zip" },
{ "zoo", "application/x-zoo" },
{ "pkg", "application/x-scode-UPkg" },
{ "vdwn", "application/x-scode-UPkg" },
{ "proj", "application/x-mw-project" },
{ "swf", "application/x-shockwave-flash" },
{ "clp", "application/x-codeliege-project" },
{ "aif", "audio/x-aiff" },
{ "aifc", "audio/x-aifc" },
{ "aiff", "audio/x-aiff" },
{ "au", "audio/basic" },
{ "mid", "audio/x-midi" },
{ "midi", "audio/x-midi" },
{ "mod", "audio/mod" },
{ "ra", "audio/x-real-audio" },
{ "wav", "audio/x-wav" },
{ "mp2", "audio/x-mpeg" },
{ "mp3", "audio/x-mpeg" },
{ "ogg", "audio/x-vorbis" },
{ "mpc", "audio/x-mpc" },
{ "asf", "application/x-asf" },
{ "riff", "application/x-riff" },
{ "wma", "audio/x-ms-wma" },
{ "bmp", "image/x-bmp" },
{ "fax", "image/g3fax" },
{ "gif", "image/gif" },
{ "iff", "image/x-iff" },
{ "jpg", "image/jpeg" },
{ "jpeg", "image/jpeg" },
{ "pbm", "image/x-portable-bitmap" },
{ "pcx", "image/x-pcx" },
{ "pgm", "image/x-portable-graymap" },
{ "png", "image/png" },
{ "ppm", "image/x-portable-pixmap" },
{ "rgb", "image/x-rgb" },
{ "tga", "image/x-targa" },
{ "tif", "image/tiff" },
{ "tiff", "image/tiff" },
{ "xbm", "image/x-xbitmap" },
{ "txt", "text/plain" },
{ "ini", "text/plain" },
{ "log", "text/plain" },
{ "bat", "text/plain" },
{ "doc", "text/plain" },
{ "cfg", "text/plain" },
{ "inf", "text/plain" },
{ "htm", "text/html" },
{ "html", "text/html" },
{ "rtf", "text/rtf" },
{ "c", "text/x-source-code" },
{ "cc", "text/x-source-code" },
{ "c++", "text/x-source-code" },
{ "h", "text/x-source-code" },
{ "h++", "text/x-source-code" },
{ "hh", "text/x-source-code" },
{ "hpp", "text/x-source-code" },
{ "pl", "text/x-source-code" },
{ "py", "text/x-source-code" },
{ "cxx", "text/x-source-code" },
{ "cpp", "text/x-source-code" },
{ "S", "text/x-source-code" },
{ "asm", "text/x-source-code" },
{ "bas", "text/x-source-code" },
{ "pas", "text/x-source-code" },
{ "java", "text/x-source-code" },
{ "avi", "video/x-msvideo" },
{ "mov", "video/quicktime" },
{ "mpg", "video/mpeg" },
{ "mpeg", "video/mpeg" },
{ "ogm", "video/x-ogm" },
{ "wmv", "video/x-ms-wmv" },
{ "rm", "application/vnd.rn-realmedia" },
{ "rn", "application/vnd.rn-realmedia" },
{ 0, 0 }
};
@@ -0,0 +1,96 @@
/*******************************************************************************
/
/ File: mime_table.c
/
/ Description: Kernel module implementing kernel-space mime_table API
/
/ Copyright 1999, Be Incorporated, All Rights Reserved.
/ This file may be used under the terms of the Be Sample Code License.
/
*******************************************************************************/
#include <Drivers.h>
#include <KernelExport.h>
#include <string.h>
#include <stdlib.h>
#include <mime_table.h>
extern struct ext_mime mimes[];
#if DEBUG > 0
#define ddprintf(x) dprintf x
#else
#define ddprintf(x)
#endif
/* Module static data */
const char mime_table_module_name[] = B_MIME_TABLE_MODULE_NAME;
static status_t
std_ops(int32 op, ...)
{
switch(op) {
case B_MODULE_INIT:
return B_OK;
case B_MODULE_UNINIT:
return B_OK;
default:
/* do nothing */
;
}
return -1;
}
status_t get_table(struct ext_mime **table)
{
if (!table)
return EINVAL;
/* no need to malloc & copy yet */
*table = mimes;
return B_OK;
}
void free_table(struct ext_mime *table)
{
/* do nothing yet */
}
const char *mime_for_ext(const char *ext)
{
int i;
/* should probably be optimized */
for (i = 0; mimes[i].extension; i++) {
if (!strcmp(ext, mimes[i].extension))
return mimes[i].mime;
}
return NULL;
}
const char *ext_for_mime(const char *mime)
{
int i;
/* should probably be optimized */
for (i = 0; mimes[i].mime; i++) {
if (!strcmp(mime, mimes[i].mime))
return mimes[i].extension;
}
return NULL;
}
static mime_table_module_info mime_table = {
{
mime_table_module_name,
0,
std_ops
},
get_table,
free_table,
mime_for_ext,
ext_for_mime
};
_EXPORT mime_table_module_info *modules[] = {
&mime_table,
NULL
};