1 /*
2  * libmowgli: A collection of useful routines for programming.
3  * module.h: Loadable modules.
4  *
5  * Copyright (c) 2007, 2014 William Pitcock <william@dereferenced.org>
6  *
7  * Permission to use, copy, modify, and/or distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice is present in all copies.
10  *
11  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
12  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
13  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
14  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
15  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
16  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
17  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
18  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
19  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
20  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
21  * POSSIBILITY OF SUCH DAMAGE.
22  */
23 
24 #ifndef __MOWGLI_MODULE_H__
25 #define __MOWGLI_MODULE_H__
26 
27 typedef void *mowgli_module_t;
28 
29 extern mowgli_module_t mowgli_module_open(const char *path);
30 extern void *mowgli_module_symbol(mowgli_module_t module, const char *symbol);
31 extern void mowgli_module_close(mowgli_module_t module);
32 
33 typedef void mowgli_interface_t;
34 
35 typedef struct {
36 	const char *id;
37 	uint32_t abirev;
38 } mowgli_interface_base_t;
39 
40 extern void mowgli_interface_register(mowgli_interface_t *iface);
41 extern void mowgli_interface_unregister(mowgli_interface_t *iface);
42 extern mowgli_interface_t *mowgli_interface_get(const char *id, uint32_t abirev);
43 
44 #endif
45