ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/include/module.h
Revision: 1.2
Committed: Sat Jul 21 01:29:07 2007 UTC (16 years, 10 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.1: +2 -2 lines
Log Message:
- moved to new documentation system
- fixed small build error

File Contents

# User Rev Content
1 pippijn 1.1 /*
2     * Copyright © 2005 William Pitcock, et al.
3 pippijn 1.2 * The rights to this code are as documented in doc/pod/license.pod.
4 pippijn 1.1 *
5     * This file contains data structures concerning modules.
6     *
7 pippijn 1.2 * $Id: module.h,v 1.1 2007-07-19 08:24:50 pippijn Exp $
8 pippijn 1.1 */
9    
10     #ifndef MODULE_H
11     #define MODULE_H
12    
13     #include "privs.h"
14    
15     struct v1_moduleheader_t;
16    
17     struct module_t
18     {
19     char name[BUFSIZE];
20     char modpath[BUFSIZE];
21     v1_moduleheader_t *header;
22    
23     unsigned int mflags;
24    
25     void *address;
26     void *handle;
27    
28     list_t dephost;
29     list_t deplist;
30    
31     list_t symlist; /* MAPIv2 symbol dependencies. */
32     };
33    
34     #define MODTYPE_STANDARD 0
35     #define MODTYPE_CORE 1 /* Can't be unloaded. */
36     #define MODTYPE_FAIL 0x8000 /* modinit failed */
37    
38     #define MAPI_MAGIC 0xdeadbeef
39     #define MAPI_V1 1
40    
41     #define MAX_CMD_PARC 20
42    
43     struct v1_moduleheader_t
44     {
45     unsigned int mod;
46     unsigned int abi_ver;
47     char const *const name;
48     bool norestart;
49     void (*modinit) (module_t *m);
50     void (*deinit) (void);
51     char const *const vendor;
52     char const *const version;
53     };
54    
55     #define DECLARE_MODULE_V1(name, norestart, modinit, deinit, ver, ven) \
56     v1_moduleheader_t _header = { \
57     MAPI_MAGIC, \
58     MAPI_V1, \
59     name, \
60     norestart, \
61     modinit, \
62     deinit, \
63     ven, \
64     ver \
65     }
66    
67     E void _modinit (module_t *m);
68     E void _moddeinit (void);
69    
70     E void modules_init (void);
71     E module_t *module_load (char *filespec);
72     E void module_load_dir (char *dirspec);
73     E void module_load_dir_match (char *dirspec, char *pattern);
74     E void *module_locate_symbol (char *modname, char *sym);
75     E void module_unload (module_t *m);
76     E module_t *module_find (char *name);
77     E module_t *module_find_published (char *name);
78    
79     /* Use this macro in your _modinit() function to use symbols from
80     * other modules. It will abort the _modinit() and unload your module
81     * without calling _moddeinit(). -- jilles */
82     /* XXX this assumes the parameter is called m */
83     #define MODULE_USE_SYMBOL_T(dest, type, modname, sym) \
84     if ((dest = (type *)module_locate_symbol(modname, sym)) == NULL) \
85     { \
86     m->mflags = MODTYPE_FAIL; \
87     return; \
88     }
89    
90     #define MODULE_USE_SYMBOL(dest, modname, sym) \
91     if ((dest = (list_t *)module_locate_symbol(modname, sym)) == NULL) \
92     { \
93     m->mflags = MODTYPE_FAIL; \
94     return; \
95     }
96    
97     #endif