+static xmlNode *options_module_captive_to_xml
+ (xmlNode *dest_xml_parent,const struct captive_options_module *src_options_module_captive)
+{
+ g_return_val_if_fail(dest_xml_parent!=NULL,NULL);
+ g_return_val_if_fail(src_options_module_captive!=NULL,NULL);
+
+ { xmlNode *module=xmlNewTextChild(dest_xml_parent,NULL,"module",NULL);
+ const gchar *type_string,*basename,*cgs;
+
+ basename=src_options_module_captive->pathname_utf8;
+ if ((cgs=strrchr(basename,'/')))
+ basename=cgs+1;
+ xmlNewProp(module,"basename",basename);
+ switch (src_options_module_captive->type) {
+ case CAPTIVE_OPTIONS_MODULE_TYPE_PE32:
+ type_string="PE32";
+ xmlNewProp(module,"length",captive_printf_alloca("%lu",(unsigned long)src_options_module_captive->u.pe32.length));
+ xmlNewProp(module,"md5" ,src_options_module_captive->u.pe32.md5);
+ break;
+ case CAPTIVE_OPTIONS_MODULE_TYPE_GMODULE:
+ type_string="gmodule";
+ break;
+ default: g_assert_not_reached();
+ }
+ xmlNewProp(module,"type",type_string); /* AFTER the 'switch' to set 'type_string'! */
+ return module;
+ }
+}
+
+
+static void sandbox_parent_bug_doc_make(CaptiveVfsObject *captive_vfs_object)
+{
+ { xmlDoc *doc=xmlNewDoc("1.0");
+ captive_vfs_object->corba_bug_doc=doc;
+ { xmlNode *bug=xmlNewDocNode(captive_vfs_object->corba_bug_doc,NULL,"bug",NULL);
+ xmlDocSetRootElement(captive_vfs_object->corba_bug_doc,bug);
+ captive_vfs_object->corba_bug=bug;
+ { xmlNode *bug_captive=xmlNewTextChild(bug,NULL,"captive",NULL);
+ xmlNewProp(bug_captive,"version",VERSION);
+ }
+ { xmlNode *bug_filesystem=xmlNewTextChild(bug,NULL,"filesystem",NULL);
+ options_module_captive_to_xml(bug_filesystem,&captive_vfs_object->options.filesystem);
+ }
+ { xmlNode *bug_load_module=xmlNewTextChild(bug,NULL,"load_module",NULL);
+ guint load_moduleui;
+ struct captive_options_module *options_module;
+ GList *load_module_node;
+
+ for (load_moduleui=0,load_module_node=captive_vfs_object->options.load_module;
+ load_module_node;
+ load_moduleui++,load_module_node=load_module_node->next) {
+ options_module=load_module_node->data;
+ options_module_captive_to_xml(bug_load_module,options_module);
+ }
+ }
+ { xmlNode *bug_action=xmlNewTextChild(bug,NULL,"action",NULL);
+ captive_vfs_object->corba_bug_action=bug_action;
+ }
+ { xmlNode *bug_log=xmlNewTextChild(bug,NULL,"log",NULL);
+ captive_vfs_object->corba_bug_log=bug_log;
+ }
+ }
+ }
+}
+
+