1 /*******************************************************************************
2 /
3 / File: mime_table.c
4 /
5 / Description: Kernel module implementing kernel-space mime_table API
6 /
7 / Copyright 2004, François Revol.
8 /
9 *******************************************************************************/
10
11 #include <Drivers.h>
12 #include <KernelExport.h>
13 #include <string.h>
14 #include <stdlib.h>
15
16 #include <mime_table.h>
17 extern struct ext_mime mimes[];
18
19 #if DEBUG > 0
20 #define ddprintf(x) dprintf x
21 #else
22 #define ddprintf(x)
23 #endif
24
25 /* Module static data */
26 const char mime_table_module_name[] = B_MIME_TABLE_MODULE_NAME;
27
28 static status_t
std_ops(int32 op,...)29 std_ops(int32 op, ...)
30 {
31 switch(op) {
32 case B_MODULE_INIT:
33 return B_OK;
34 case B_MODULE_UNINIT:
35 return B_OK;
36 default:
37 /* do nothing */
38 ;
39 }
40 return -1;
41 }
42
get_table(struct ext_mime ** table)43 status_t get_table(struct ext_mime **table)
44 {
45 if (!table)
46 return EINVAL;
47 /* no need to malloc & copy yet */
48 *table = mimes;
49 return B_OK;
50 }
51
free_table(struct ext_mime * table)52 void free_table(struct ext_mime *table)
53 {
54 /* do nothing yet */
55 }
56
mime_for_ext(const char * ext)57 const char *mime_for_ext(const char *ext)
58 {
59 int i;
60 /* should probably be optimized */
61 for (i = 0; mimes[i].extension; i++) {
62 if (!strcmp(ext, mimes[i].extension))
63 return mimes[i].mime;
64 }
65 return NULL;
66 }
67
ext_for_mime(const char * mime)68 const char *ext_for_mime(const char *mime)
69 {
70 int i;
71 /* should probably be optimized */
72 for (i = 0; mimes[i].mime; i++) {
73 if (!strcmp(mime, mimes[i].mime))
74 return mimes[i].extension;
75 }
76 return NULL;
77 }
78
79 static mime_table_module_info mime_table = {
80 {
81 mime_table_module_name,
82 0,
83 std_ops
84 },
85 get_table,
86 free_table,
87 mime_for_ext,
88 ext_for_mime
89 };
90
91 _EXPORT mime_table_module_info *modules[] = {
92 &mime_table,
93 NULL
94 };
95
96