void stp_xml_preinit(void) { static int xml_is_preinitialized = 0; if (!xml_is_preinitialized) { stpi_xml_registry = stp_list_create(); stp_list_set_freefunc(stpi_xml_registry, xml_registry_freefunc); stp_list_set_namefunc(stpi_xml_registry, xml_registry_namefunc); stpi_xml_preloads = stp_list_create(); stp_list_set_freefunc(stpi_xml_preloads, xml_preload_freefunc); stp_list_set_namefunc(stpi_xml_preloads, xml_preload_namefunc); } }
stp_list_t * stp_list_copy(const stp_list_t *list) { stp_list_t *ret; stp_node_copyfunc copyfunc = stp_list_get_copyfunc(list); stp_list_item_t *item = list->start; check_list(list); ret = stp_list_create(); stp_list_set_copyfunc(ret, stp_list_get_copyfunc(list)); /* If we use default (shallow) copy, we can't free the elements of it */ if (stp_list_get_copyfunc(list)) stp_list_set_freefunc(ret, stp_list_get_freefunc(list)); stp_list_set_namefunc(ret, stp_list_get_namefunc(list)); stp_list_set_long_namefunc(ret, stp_list_get_long_namefunc(list)); stp_list_set_sortfunc(ret, stp_list_get_sortfunc(list)); while (item) { void *data = item->data; if (copyfunc) stp_list_item_create (ret, NULL, (*copyfunc)(data)); else stp_list_item_create(ret, NULL, data); item = stp_list_item_next(item); } return ret; }
stp_string_list_t * stp_string_list_create(void) { stp_list_t *ret = stp_list_create(); stp_list_set_freefunc(ret, free_list_element); stp_list_set_namefunc(ret, namefunc); stp_list_set_copyfunc(ret, copyfunc); stp_list_set_long_namefunc(ret, long_namefunc); return (stp_string_list_t *) ret; }