From c6bcdb0c46a5e07fa6483e4581c5dbfe5184ca27 Mon Sep 17 00:00:00 2001 From: horwitz Date: Mon, 30 Jun 2008 23:26:43 +0000 Subject: [PATCH] Core:Fix:Use attr_list in plugins_add_path git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@1181 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/navit/attr_def.h | 2 ++ navit/navit/plugin.c | 57 ++++++++++++++++++++++++++++++++++++++----------- navit/navit/plugin.h | 5 +++-- navit/navit/xmlconfig.c | 13 +++-------- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/navit/navit/attr_def.h b/navit/navit/attr_def.h index 73ea239..ef84098 100644 --- a/navit/navit/attr_def.h +++ b/navit/navit/attr_def.h @@ -78,6 +78,7 @@ ATTR(mkdir) ATTR(predraw) ATTR(postdraw) ATTR(button) +ATTR(ondemand) ATTR2(0x0002ffff,type_int_end) ATTR2(0x00030000,type_string_begin) ATTR(type) @@ -126,6 +127,7 @@ ATTR(gpsd_query) ATTR(on_eof) ATTR(command) ATTR(src) +ATTR(path) ATTR2(0x0003ffff,type_string_end) ATTR(order_limit) ATTR2(0x00050000,type_double_start) diff --git a/navit/navit/plugin.c b/navit/navit/plugin.c index ec4ed68..b548027 100644 --- a/navit/navit/plugin.c +++ b/navit/navit/plugin.c @@ -17,6 +17,7 @@ * Boston, MA 02110-1301, USA. */ +#include #include #include #include "config.h" @@ -24,10 +25,13 @@ #include "file.h" #define PLUGIN_C #include "plugin.h" +#include "item.h" +#include "debug.h" struct plugin { int active; int lazy; + int ondemand; char *name; GModule *mod; void (*init)(void); @@ -102,6 +106,18 @@ plugin_set_lazy(struct plugin *pl, int lazy) pl->lazy=lazy; } +static int +plugin_get_ondemand(struct plugin *pl) +{ + return pl->ondemand; +} + +static void +plugin_set_ondemand(struct plugin *pl, int ondemand) +{ + pl->ondemand=ondemand; +} + void plugin_call_init(struct plugin *pl) { @@ -130,15 +146,32 @@ plugins_new(void) } void -plugins_add_path(struct plugins *pls, const char *path, int active, int lazy) -{ +plugins_add_path(struct plugins *pls, struct attr **attrs) { + struct attr *path_attr, *attr; struct file_wordexp *we; + int active=1; // default active + int lazy=0, ondemand=0; int i, count; char **array; char *name; struct plugin *pl; - we=file_wordexp_new(path); + if (! (path_attr=attr_search(attrs, NULL, attr_path))) { + dbg(0,"missing path\n"); + return; + } + if ( (attr=attr_search(attrs, NULL, attr_active))) { + active=attr->u.num; + } + if ( (attr=attr_search(attrs, NULL, attr_lazy))) { + lazy=attr->u.num; + } + if ( (attr=attr_search(attrs, NULL, attr_ondemand))) { + ondemand=attr->u.num; + } + dbg(1, "path=\"%s\", active=%d, lazy=%d, ondemand=%d\n",path_attr->u.str, active, lazy, ondemand); + + we=file_wordexp_new(path_attr->u.str); count=file_wordexp_get_count(we); array=file_wordexp_get_array(we); for (i = 0 ; i < count ; i++) { @@ -157,6 +190,7 @@ plugins_add_path(struct plugins *pls, const char *path, int active, int lazy) } plugin_set_active(pl, active); plugin_set_lazy(pl, lazy); + plugin_set_ondemand(pl, ondemand); } file_wordexp_destroy(we); } @@ -171,16 +205,13 @@ plugins_init(struct plugins *pls) l=pls->list; while (l) { pl=l->data; - if (plugin_get_active(pl)) - if (!plugin_load(pl)) - plugin_set_active(pl, 0); - l=g_list_next(l); - } - l=pls->list; - while (l) { - pl=l->data; - if (plugin_get_active(pl)) - plugin_call_init(pl); + if (! plugin_get_ondemand(pl)) { + if (plugin_get_active(pl)) + if (!plugin_load(pl)) + plugin_set_active(pl, 0); + if (plugin_get_active(pl)) + plugin_call_init(pl); + } l=g_list_next(l); } #endif diff --git a/navit/navit/plugin.h b/navit/navit/plugin.h index ad44ec9..572c1ab 100644 --- a/navit/navit/plugin.h +++ b/navit/navit/plugin.h @@ -130,9 +130,10 @@ void *plugin_get_##type##_type(const char *name); #define plugin_init plugin_module_cat(module_,_init) #endif -void plugin_init(void); +struct attr; /* prototypes */ +void plugin_init(void); struct plugin *plugin_new(char *plugin); int plugin_load(struct plugin *pl); char *plugin_get_name(struct plugin *pl); @@ -143,7 +144,7 @@ void plugin_call_init(struct plugin *pl); void plugin_unload(struct plugin *pl); void plugin_destroy(struct plugin *pl); struct plugins *plugins_new(void); -void plugins_add_path(struct plugins *pls, const char *path, int active, int lazy); +void plugins_add_path(struct plugins *pls, struct attr ** attrs); void plugins_init(struct plugins *pls); void plugins_destroy(struct plugins *pls); void *plugin_get_type(enum plugin_type type, const char *name); diff --git a/navit/navit/xmlconfig.c b/navit/navit/xmlconfig.c index 251e138..85ef621 100644 --- a/navit/navit/xmlconfig.c +++ b/navit/navit/xmlconfig.c @@ -210,16 +210,9 @@ xmlconfig_config(struct xmlstate *state) static int xmlconfig_plugin(struct xmlstate *state) { - const char *path; - int active,lazy; - - state->element_attr.u.data=state->parent->element_attr.u.data; - path=find_attribute(state, "path", 1); - if (! path) - return 0; - active=find_boolean(state, "active", 1, 0); - lazy=find_boolean(state, "lazy", 1, 0); - plugins_add_path(state->parent->element_attr.u.data, path, active, lazy); + struct attr **attrs; + attrs=convert_to_attrs(state); + plugins_add_path(state->parent->element_attr.u.data, attrs); return 1; } -- 2.7.4