c-aries / utt-wubi

Universal Typing Training - Chinese Wubi
GNU General Public License v3.0
1 stars 1 forks source link

utt module bug #19

Closed c-aries closed 11 years ago

c-aries commented 11 years ago

(gdb) p utt->modules->first_node $6 = {node_name = 0x80861d0 "wubi", module = 0x0, module_dl_handle = 0x0, children = 0x80861e0, sibling = 0x8075788} (gdb) p utt->modules->first_node $7 = (struct utt_module_tree_node ) 0x80861b8 (gdb) p utt->im_node $8 = (struct utt_module_tree_node ) 0x8075788 (gdb) p utt->modules->first_node->sibling $9 = {node_name = 0x80868c0 "wubi", module = 0xb71cb62c, module_dl_handle = 0x80865a0, children = 0x0, sibling = 0x8086c30} (gdb) p utt->modules->first_node->sibling->sibling $10 = {node_name = 0x8086c48 "pinyin", module = 0xb71c962c, module_dl_handle = 0x8086900, children = 0x0, sibling = 0x8086fc8} (gdb) p utt->modules->first_node->sibling->sibling->sibling $11 = {node_name = 0x8086fe0 "english", module = 0x0, module_dl_handle = 0x0, children = 0x8086ff0, sibling = 0x8087378} (gdb) p *utt->modules->first_node->sibling->sibling->sibling->sibling $12 = {node_name = 0x8075450 "english", module = 0xb71c562c, module_dl_handle = 0x8087048, children = 0x0, sibling = 0x0} (gdb)

c-aries commented 11 years ago

new function static void insert_node (struct utt_module_tree_node _children, gchar _node_name, struct utt_module module, void module_dl_handle) { struct utt_module_tree_node new_node; struct utt_module_tree_node last_node = NULL; struct utt_module_tree_node iter_node = children;

if (node_name == NULL || _node_name == NULL || children == NULL) { return; } while (iter_node) { if (g_strcmp0 (iter_node->node_name, nodename) == 0) { if ((node_name + 1) == NULL) { iter_node->module = module; iter_node->module_dl_handle = module_dl_handle; break; } insert_node (&iter_node->children, node_name + 1, module, module_dl_handle); return; } last_node = iter_node; iter_node = iter_node->sibling; } if (iter_node == NULL) { new_node = g_new0 (struct utt_module_tree_node, 1); if (last_node) { last_node->sibling = new_node; } else { _children = new_node; } new_node->node_name = g_strdup (_nodename); if ((nodename + 1) == NULL) { / FIXME: need to deal with old value(e.g. dlclose(), free()) / new_node->module = module; new_node->module_dl_handle = module_dl_handle; } else { insert_node (&new_node->children, node_name + 1, module, module_dl_handle); } return; } }