static struct mi_root* ds_mi_list(struct mi_root* cmd_tree, void* param) { struct mi_root* rpl_tree; struct mi_node* part_node; int flags = 0; if (cmd_tree->node.kids){ if(cmd_tree->node.kids->value.len == 4 && memcmp(cmd_tree->node.kids->value.s,"full",4)==0) flags |= MI_FULL_LISTING; else return init_mi_tree(400, MI_SSTR(MI_BAD_PARM_S)); } rpl_tree = init_mi_tree(200, MI_OK_S, MI_OK_LEN); if (rpl_tree==NULL) return 0; rpl_tree->node.flags |= MI_IS_ARRAY; ds_partition_t *part_it; for (part_it = partitions; part_it; part_it = part_it->next) { part_node = add_mi_node_child(&rpl_tree->node, MI_IS_ARRAY,"PARTITION", 9, part_it->name.s, part_it->name.len); if (part_node == NULL || ds_print_mi_list(part_node, part_it, flags) < 0) { LM_ERR("failed to add node\n"); free_mi_tree(rpl_tree); return 0; } } return rpl_tree; }
static struct mi_root* ds_mi_list(struct mi_root* cmd_tree, void* param) { struct mi_root* rpl_tree; rpl_tree = init_mi_tree(200, MI_OK_S, MI_OK_LEN); if (rpl_tree==NULL) return 0; if( ds_print_mi_list(&rpl_tree->node)< 0 ) { LM_ERR("failed to add node\n"); free_mi_tree(rpl_tree); return 0; } return rpl_tree; }