author | Holger Weiß <holger@zedat.fu-berlin.de> |
Sun, 26 Jul 2015 22:45:56 +0200 | |
changeset 2308 | e8c8665c824e |
parent 2268 | f5402d705f67 |
permissions | -rw-r--r-- |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
1 |
/* |
1828
8f7d7c05f275
Small coding style update
Mikael Berthe <mikael@lilotux.net>
parents:
1822
diff
changeset
|
2 |
* modules.c -- Modules handling |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
3 |
* |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
4 |
* Copyright (C) 2010 Myhailo Danylenko <isbear@ukrpost.net> |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
5 |
* |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
6 |
* This program is free software; you can redistribute it and/or modify |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
7 |
* it under the terms of the GNU General Public License as published by |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
8 |
* the Free Software Foundation; either version 2 of the License, or (at |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
9 |
* your option) any later version. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
10 |
* |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
11 |
* This program is distributed in the hope that it will be useful, but |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
12 |
* WITHOUT ANY WARRANTY; without even the implied warranty of |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
14 |
* General Public License for more details. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
15 |
* |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
16 |
* You should have received a copy of the GNU General Public License |
2268
f5402d705f67
Fix FSF addresses in all files
Mikael Berthe <mikael@lilotux.net>
parents:
1831
diff
changeset
|
17 |
* along with this program; if not, see <http://www.gnu.org/licenses/>. |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
18 |
*/ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
19 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
20 |
#include <glib.h> |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
21 |
#include <gmodule.h> |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
22 |
#include <string.h> |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
23 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
24 |
#include "settings.h" |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
25 |
#include "config.h" |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
26 |
#include "modules.h" |
1773
553e7aa88c9f
Set the message flag for /module info output
Mikael Berthe <mikael@lilotux.net>
parents:
1771
diff
changeset
|
27 |
#include "screen.h" |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
28 |
#include "utils.h" |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
29 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
30 |
// Registry of loaded modules |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
31 |
GSList *loaded_modules = NULL; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
32 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
33 |
const gchar *mcabber_branch = MCABBER_BRANCH; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
34 |
const guint mcabber_api_version = MCABBER_API_VERSION; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
35 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
36 |
static gint module_list_comparator(gconstpointer arg1, gconstpointer arg2) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
37 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
38 |
const loaded_module_t *module = arg1; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
39 |
const char *name = arg2; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
40 |
return g_strcmp0(module->name, name); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
41 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
42 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
43 |
// module_load(modulename, manual, force) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
44 |
// Tries to load specified module and any modules, that this module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
45 |
// depends on. Returns NULL on success or constant error string in a |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
46 |
// case of error. Error message not necessarily indicates error. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
47 |
const gchar *module_load(const gchar *arg, gboolean manual, gboolean force) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
48 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
49 |
GModule *mod; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
50 |
module_info_t *info; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
51 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
52 |
if (!arg || !*arg) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
53 |
return "Missing module name"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
54 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
55 |
{ // Check if module is already loaded |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
56 |
GSList *lmod = g_slist_find_custom(loaded_modules, arg, |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
57 |
module_list_comparator); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
58 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
59 |
if (lmod) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
60 |
loaded_module_t *module = lmod->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
61 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
62 |
if (manual) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
63 |
if (!module->locked) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
64 |
module->locked = TRUE; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
65 |
module->refcount += 1; |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
66 |
return force ? NULL : "Module is already automatically loaded, " |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
67 |
"marked as manually loaded"; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
68 |
} else |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
69 |
return force ? NULL : "Module is already loaded"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
70 |
} else { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
71 |
module->refcount += 1; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
72 |
return NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
73 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
74 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
75 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
76 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
77 |
{ // Load module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
78 |
gchar *mdir = expand_filename(settings_opt_get("modules_dir")); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
79 |
gchar *path = g_module_build_path(mdir ? mdir : PKGLIB_DIR, arg); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
80 |
g_free(mdir); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
81 |
mod = g_module_open(path, G_MODULE_BIND_LAZY); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
82 |
g_free(path); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
83 |
if (!mod) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
84 |
return g_module_error(); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
85 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
86 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
87 |
{ // Obtain module information structures list |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
88 |
gchar *varname = g_strdup_printf("info_%s", arg); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
89 |
gpointer var = NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
90 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
91 |
// convert to a valid symbol name |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
92 |
g_strcanon(varname, "abcdefghijklmnopqrstuvwxyz0123456789", '_'); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
93 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
94 |
if (!g_module_symbol(mod, varname, &var)) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
95 |
if (!force) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
96 |
g_free(varname); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
97 |
if(!g_module_close(mod)) |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
98 |
scr_LogPrint(LPRINT_LOGNORM, "Error closing module: %s.", |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
99 |
g_module_error()); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
100 |
return "Module provides no information structure"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
101 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
102 |
|
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
103 |
scr_LogPrint(LPRINT_LOGNORM, "Forced to ignore error: " |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
104 |
"Module provides no information structure."); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
105 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
106 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
107 |
g_free(varname); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
108 |
info = var; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
109 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
110 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
111 |
// Find appropriate info struct |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
112 |
if (info) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
113 |
while (info) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
114 |
if (!info->branch || !*(info->branch)) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
115 |
scr_LogPrint(LPRINT_DEBUG, "No branch name, " |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
116 |
"skipping info chunk."); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
117 |
} else if (strcmp(info->branch, mcabber_branch)) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
118 |
scr_LogPrint(LPRINT_DEBUG, "Unhandled branch %s, " |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
119 |
"skipping info chunk.", info->branch); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
120 |
} else if (info->api > mcabber_api_version || |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
121 |
info->api < MCABBER_API_MIN) { // XXX force? |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
122 |
if(!g_module_close(mod)) |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
123 |
scr_LogPrint(LPRINT_LOGNORM, "Error closing module: %s.", |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
124 |
g_module_error()); |
1771
ffd0f245de40
Minor cosmetic change (api->API)
Mikael Berthe <mikael@lilotux.net>
parents:
1770
diff
changeset
|
125 |
return "Incompatible mcabber API version"; |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
126 |
} else |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
127 |
break; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
128 |
info = info->next; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
129 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
130 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
131 |
if (!info) { // XXX force? |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
132 |
if(!g_module_close(mod)) |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
133 |
scr_LogPrint(LPRINT_LOGNORM, "Error closing module: %s.", |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
134 |
g_module_error()); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
135 |
return "No supported mcabber branch description found"; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
136 |
} |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
137 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
138 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
139 |
// Load dependencies |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
140 |
if (info && info->requires) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
141 |
const gchar **dep; |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
142 |
GSList *deps = NULL; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
143 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
144 |
for (dep = info->requires; *dep; ++dep) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
145 |
const gchar *err = module_load(*dep, FALSE, FALSE); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
146 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
147 |
if (err) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
148 |
GSList *mel; |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
149 |
scr_LogPrint(LPRINT_LOGNORM, "Error loading dependency module %s: %s.", |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
150 |
*dep, err); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
151 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
152 |
// Unload already loaded dependencies |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
153 |
for (mel = deps; mel; mel = mel->next) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
154 |
gchar *ldmname = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
155 |
err = module_unload(ldmname, FALSE, FALSE); |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
156 |
scr_LogPrint(LPRINT_LOGNORM, |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
157 |
"Error unloading dependency module %s: %s.", |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
158 |
ldmname, err); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
159 |
g_free(ldmname); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
160 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
161 |
g_slist_free(deps); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
162 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
163 |
// Unload module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
164 |
if (!g_module_close(mod)) |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
165 |
scr_LogPrint(LPRINT_LOGNORM, "Error unloading module %s: %s.", |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
166 |
arg, g_module_error()); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
167 |
return "Dependency problems"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
168 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
169 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
170 |
deps = g_slist_append(deps, (gpointer) *dep); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
171 |
} |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
172 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
173 |
g_slist_free(deps); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
174 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
175 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
176 |
{ // Register module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
177 |
loaded_module_t *module = g_new(loaded_module_t, 1); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
178 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
179 |
module->refcount = 1; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
180 |
module->locked = manual; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
181 |
module->name = g_strdup(arg); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
182 |
module->module = mod; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
183 |
module->info = info; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
184 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
185 |
loaded_modules = g_slist_prepend(loaded_modules, module); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
186 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
187 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
188 |
// Run initialization routine |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
189 |
if (info && info->init) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
190 |
info->init(); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
191 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
192 |
// XXX Run hk_loaded_module hook (and move this line there) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
193 |
scr_LogPrint(LPRINT_LOGNORM, "Loaded module %s.", arg); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
194 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
195 |
return NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
196 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
197 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
198 |
// module_unload(modulename, manual, force) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
199 |
// Unload specified module and any automatically loaded modules |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
200 |
// that are no more required. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
201 |
const gchar *module_unload(const gchar *arg, gboolean manual, gboolean force) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
202 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
203 |
GSList *lmod; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
204 |
loaded_module_t *module; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
205 |
module_info_t *info; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
206 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
207 |
if (!arg || !*arg) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
208 |
return "Missing module name"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
209 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
210 |
lmod = g_slist_find_custom(loaded_modules, arg, module_list_comparator); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
211 |
if (!lmod) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
212 |
return "Module not found"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
213 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
214 |
module = lmod->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
215 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
216 |
// Check if user can unload this module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
217 |
if (manual) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
218 |
if (!module->locked) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
219 |
if (force) |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
220 |
scr_LogPrint(LPRINT_LOGNORM, "Forced to ignore error: " |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
221 |
"Manually unloading automatically loaded module."); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
222 |
else |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
223 |
return "Module is not loaded manually"; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
224 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
225 |
module->locked = FALSE; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
226 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
227 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
228 |
// Check refcount |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
229 |
module->refcount -= 1; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
230 |
if (module->refcount > 0) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
231 |
if (force) |
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
232 |
scr_LogPrint(LPRINT_LOGNORM, "Forced to ignore error: " |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
233 |
"Refcount is not zero (%u).", module->refcount); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
234 |
else |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
235 |
return manual ? "Module is required by some other modules" : NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
236 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
237 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
238 |
info = module->info; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
239 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
240 |
// Run uninitialization routine |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
241 |
if (info && info->uninit) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
242 |
info->uninit(); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
243 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
244 |
// Unload dependencies |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
245 |
if (info && info->requires) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
246 |
const gchar **dep; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
247 |
for (dep = info->requires; *dep; ++dep) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
248 |
const gchar *err = module_unload(*dep, FALSE, FALSE); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
249 |
if (err) // XXX |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
250 |
scr_LogPrint(LPRINT_LOGNORM, |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
251 |
"Error unloading automatically loaded module %s: %s.", |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
252 |
*dep, err); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
253 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
254 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
255 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
256 |
// XXX Prevent uninitialization routine and dep unloading to be performed again |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
257 |
module->info = NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
258 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
259 |
// Unload module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
260 |
if (!g_module_close(module->module)) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
261 |
return g_module_error(); // XXX destroy structure? |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
262 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
263 |
// Destroy structure |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
264 |
loaded_modules = g_slist_delete_link(loaded_modules, lmod); |
1763
5b497046df40
Fix output of message on module unloading
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1755
diff
changeset
|
265 |
// Output this here, as arg may point to module->name |
5b497046df40
Fix output of message on module unloading
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1755
diff
changeset
|
266 |
scr_LogPrint(LPRINT_LOGNORM, "Unloaded module %s.", module->name); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
267 |
g_free(module->name); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
268 |
g_free(module); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
269 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
270 |
return NULL; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
271 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
272 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
273 |
// module_list_print(void) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
274 |
// Prints into status buffer and log list of the currently loaded |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
275 |
// modules. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
276 |
void module_list_print(void) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
277 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
278 |
GSList *mel; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
279 |
gsize maxlen = 0; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
280 |
gchar *format; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
281 |
GString *message; |
1820
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
282 |
guint module_count = 0; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
283 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
284 |
if (!loaded_modules) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
285 |
scr_LogPrint(LPRINT_LOGNORM, "No modules loaded."); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
286 |
return; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
287 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
288 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
289 |
// Count maximum module name length |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
290 |
for (mel = loaded_modules; mel; mel = mel -> next) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
291 |
loaded_module_t *module = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
292 |
gsize len = strlen(module->name); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
293 |
if (len > maxlen) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
294 |
maxlen = len; |
1820
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
295 |
module_count++; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
296 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
297 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
298 |
// Create format string |
1774 | 299 |
format = g_strdup_printf("%%-%us %%2u (%%c)", (unsigned)maxlen); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
300 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
301 |
// Fill the message to be printed |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
302 |
message = g_string_new("Loaded modules:\n"); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
303 |
for (mel = loaded_modules; mel; mel = mel -> next) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
304 |
loaded_module_t *module = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
305 |
|
1736
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
306 |
g_string_append_printf(message, format, module->name, module->refcount, |
15e1f3957786
Misc. small style changes
Mikael Berthe <mikael@lilotux.net>
parents:
1735
diff
changeset
|
307 |
module->locked ? 'M' : 'A'); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
308 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
309 |
if (module->info) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
310 |
module_info_t *info = module->info; |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
311 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
312 |
// Module version |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
313 |
if (info->version) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
314 |
g_string_append(message, " version: "); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
315 |
g_string_append(message, info->version); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
316 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
317 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
318 |
// Module dependencies |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
319 |
if (info->requires && *(info->requires)) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
320 |
const gchar **dep; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
321 |
g_string_append(message, " depends: "); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
322 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
323 |
for (dep = info->requires; *dep; ++dep) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
324 |
g_string_append(message, *dep); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
325 |
g_string_append(message, ", "); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
326 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
327 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
328 |
// Chop extra ", " |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
329 |
g_string_truncate(message, message->len - 2); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
330 |
} |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
331 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
332 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
333 |
g_string_append_c(message, '\n'); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
334 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
335 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
336 |
// Chop extra "\n" |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
337 |
g_string_truncate(message, message->len - 1); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
338 |
|
1820
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
339 |
scr_LogPrint(LPRINT_NORMAL, "%s", message->str); |
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
340 |
|
1822
f44c375dabf1
Slight change for changeset 0628dcecaddf
Mikael Berthe <mikael@lilotux.net>
parents:
1820
diff
changeset
|
341 |
if (module_count + 1 > scr_getlogwinheight()) { |
1820
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
342 |
scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); |
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
343 |
scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE, |
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
344 |
ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max); |
0628dcecaddf
Set the message flag with module list (when there are several modules)
Mikael Berthe <mikael@lilotux.net>
parents:
1815
diff
changeset
|
345 |
} |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
346 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
347 |
g_string_free(message, TRUE); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
348 |
g_free(format); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
349 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
350 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
351 |
// module_info_print(name) |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
352 |
// Prints info about specific module |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
353 |
void module_info_print(const gchar *name) |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
354 |
{ |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
355 |
GSList *lmod; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
356 |
loaded_module_t *module; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
357 |
module_info_t *info; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
358 |
|
1755
84487d78d0ea
Add a warning when using /module info with no module name
Mikael Berthe <mikael@lilotux.net>
parents:
1749
diff
changeset
|
359 |
if (!name || !name[0]) { |
84487d78d0ea
Add a warning when using /module info with no module name
Mikael Berthe <mikael@lilotux.net>
parents:
1749
diff
changeset
|
360 |
scr_LogPrint(LPRINT_NORMAL, "Please specify a module name."); |
84487d78d0ea
Add a warning when using /module info with no module name
Mikael Berthe <mikael@lilotux.net>
parents:
1749
diff
changeset
|
361 |
return; |
84487d78d0ea
Add a warning when using /module info with no module name
Mikael Berthe <mikael@lilotux.net>
parents:
1749
diff
changeset
|
362 |
} |
84487d78d0ea
Add a warning when using /module info with no module name
Mikael Berthe <mikael@lilotux.net>
parents:
1749
diff
changeset
|
363 |
|
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
364 |
lmod = g_slist_find_custom(loaded_modules, name, module_list_comparator); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
365 |
if (!lmod) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
366 |
scr_LogPrint(LPRINT_NORMAL, "Module %s not found.", name); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
367 |
return; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
368 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
369 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
370 |
module = lmod->data; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
371 |
info = module->info; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
372 |
|
1831
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
373 |
scr_LogPrint(LPRINT_NORMAL, "Module %s", module->name); |
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
374 |
scr_LogPrint(LPRINT_NORMAL, " Location: %s", g_module_name(module->module)); |
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
375 |
scr_LogPrint(LPRINT_NORMAL, " Loaded: %s", |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
376 |
module->locked ? "Manually" : "Automatically"); |
1831
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
377 |
scr_LogPrint(LPRINT_NORMAL, " Reference count: %u", module->refcount); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
378 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
379 |
if (info) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
380 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
381 |
if (info->version) |
1831
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
382 |
scr_LogPrint(LPRINT_NORMAL, " Version: %s", info->version); |
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
383 |
scr_LogPrint(LPRINT_NORMAL, " API: %s:%u", info->branch, info->api); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
384 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
385 |
if (info->requires && *(info->requires)) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
386 |
GString *message = g_string_new("Depends on: "); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
387 |
const gchar **dep; |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
388 |
for (dep = info->requires; *dep; ++dep) { |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
389 |
g_string_append(message, *dep); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
390 |
g_string_append(message, ", "); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
391 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
392 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
393 |
// Chop last ", " |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
394 |
g_string_truncate(message, message->len - 2); |
1831
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
395 |
scr_LogPrint(LPRINT_NORMAL, " %s", message->str); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
396 |
g_string_free(message, TRUE); |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
397 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
398 |
|
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
399 |
if (info->description) |
1831
78616d66a7f2
Make module info output slightly more readable
Mikael Berthe <mikael@lilotux.net>
parents:
1828
diff
changeset
|
400 |
scr_LogPrint(LPRINT_NORMAL, " Description: %s", info->description); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
401 |
} |
1773
553e7aa88c9f
Set the message flag for /module info output
Mikael Berthe <mikael@lilotux.net>
parents:
1771
diff
changeset
|
402 |
scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); |
1815
6abca6000762
Make use of ROSTER_UI_PRIO_STATUS_WIN_MESSAGE
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
403 |
scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE, |
6abca6000762
Make use of ROSTER_UI_PRIO_STATUS_WIN_MESSAGE
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
404 |
ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max); |
1749
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
405 |
} |
7ee390513463
Use api version for module checks
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1736
diff
changeset
|
406 |
|
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
407 |
// modules_init() |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
408 |
// Initializes module system. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
409 |
void modules_init(void) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
410 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
411 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
412 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
413 |
// modules_deinit() |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
414 |
// Unloads all the modules. |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
415 |
void modules_deinit(void) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
416 |
{ |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
417 |
GSList *mel; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
418 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
419 |
// We need only manually loaded modules |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
420 |
for (mel = loaded_modules; mel; mel = mel->next) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
421 |
loaded_module_t *module = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
422 |
if (module->locked) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
423 |
break; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
424 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
425 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
426 |
while (mel) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
427 |
loaded_module_t *module = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
428 |
const gchar *err; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
429 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
430 |
// Find next manually loaded module to treat |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
431 |
for (mel = mel->next; mel; mel = mel->next) { |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
432 |
loaded_module_t *module = mel->data; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
433 |
if (module->locked) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
434 |
break; |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
435 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
436 |
|
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
437 |
// Unload module |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
438 |
scr_LogPrint(LPRINT_LOGNORM, "Unloading module %s.", module->name); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
439 |
err = module_unload(module->name, TRUE, FALSE); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
440 |
if (err) |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
441 |
scr_LogPrint(LPRINT_LOGNORM, "* Module unloading failed: %s.", err); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
442 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
443 |
} |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
444 |
|
1811 | 445 |
/* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2: For Vim users... */ |