ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/include/module.h
Revision: 1.3
Committed: Tue Aug 28 17:12:24 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
State: FILE REMOVED
Log Message:
removed old files

File Contents

# Content
1 /*
2 * Copyright © 2005 William Pitcock, et al.
3 * The rights to this code are as documented in doc/pod/license.pod.
4 *
5 * This file contains data structures concerning modules.
6 *
7 * $Id: module.h,v 1.2 2007-07-21 01:29:07 pippijn Exp $
8 */
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