create actions from string in a way that won't crash

This commit is contained in:
Dana Jansens 2007-07-11 18:39:47 +00:00
parent 4f7a70f9fa
commit cfb33de8bc

View file

@ -31,6 +31,7 @@ static void actions_definition_ref(ObActionsDefinition *def);
static void actions_definition_unref(ObActionsDefinition *def); static void actions_definition_unref(ObActionsDefinition *def);
static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state); static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state);
static void actions_interactive_end_act(); static void actions_interactive_end_act();
static ObActionsAct* actions_build_act_from_string(const gchar *name);
static ObActionsAct *interactive_act = NULL; static ObActionsAct *interactive_act = NULL;
static guint interactive_initial_state = 0; static guint interactive_initial_state = 0;
@ -123,7 +124,7 @@ static void actions_definition_unref(ObActionsDefinition *def)
} }
} }
ObActionsAct* actions_parse_string(const gchar *name) ObActionsAct* actions_build_act_from_string(const gchar *name)
{ {
GSList *it; GSList *it;
ObActionsDefinition *def = NULL; ObActionsDefinition *def = NULL;
@ -151,6 +152,17 @@ ObActionsAct* actions_parse_string(const gchar *name)
return act; return act;
} }
ObActionsAct* actions_parse_string(const gchar *name)
{
ObActionsAct *act = NULL;
if ((act = actions_build_act_from_string(name)))
if (act->def->setup)
act->options = act->def->setup(NULL, NULL, NULL);
return act;
}
ObActionsAct* actions_parse(ObParseInst *i, ObActionsAct* actions_parse(ObParseInst *i,
xmlDocPtr doc, xmlDocPtr doc,
xmlNodePtr node) xmlNodePtr node)
@ -159,7 +171,7 @@ ObActionsAct* actions_parse(ObParseInst *i,
ObActionsAct *act = NULL; ObActionsAct *act = NULL;
if (parse_attr_string("name", node, &name)) { if (parse_attr_string("name", node, &name)) {
if ((act = actions_parse_string(name))) if ((act = actions_build_act_from_string(name)))
/* there is more stuff to parse here */ /* there is more stuff to parse here */
if (act->def->setup) if (act->def->setup)
act->options = act->def->setup(i, doc, node->xmlChildrenNode); act->options = act->def->setup(i, doc, node->xmlChildrenNode);