xref: /haiku/src/add-ons/kernel/generic/mime_table/module.c (revision ed24eb5ff12640d052171c6a7feba37fab8a75d1)
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
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 
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 
52 void free_table(struct ext_mime *table)
53 {
54 	/* do nothing yet */
55 }
56 
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 
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