First patch is for removing expired TODO item, just resending it. Second patch is new, for dpid.c. Function fill_services_list has a bug: on line 463 there is a check *services_list != NULL. If it is true, then -1 is returned, but dpidrc_stream is not closed. Error message on line 456 says "popen failed", should be "fopen failed". fill_services_list checks for availability of user_dpidir and sys_dpidir, but after line 449 these variables are not used. They are just dFreed in the end. Looks like code was just copypasted from register_all. fill_services_list is only called from main.c:248 and dpid.c:807 of dpid.c. register_all is called from main.c:235 and dpid.c:806. So fill_services_list is always called after register_all and doing the same check is useless. On line 503 there is a conversion of services_alpha_comp to type (dCompareFunc). I changed the function services_alpha_comp to the usual style of writing comparison functions so no conversion is required. In the current state it is undefined behaviour. [1] [1] http://stackoverflow.com/questions/559581/casting-a-function-pointer-to-anot...