void main(int argc, char* argv[]) { list * l; list_iter it; intptr_t i; char* sv[] = { "fff", "zzz", "rrr", "bbb", "ggg", "hhh", "lll", "ttt" }; //list test l = list_new(); for (i=0; i<10; ++i) { (i%2 ? list_append(l, (void*)i): list_prepend(l, (void*)i)); } list_insert_at(l, (void*)20,9); list_append(l, (void*)22); list_delete_item(l, (void*)22); list_delete_at(l, 10); list_dump(l, "%d\n"); list_free(l); //string list test l = list_new_full(free); for(i=0; i<8; ++i) list_append(l, strdup(sv[i])); list_prepend(l, strdup("nine")); list_delete_item_comp(l, strdup("seven"), (list_comparator)strcmp); list_delete_item_comp(l, "eee", (list_comparator)strcmp); list_dump(l, "%s\n"); list_free(l); l = list_new(); for(i=0; i<8; ++i) list_insert_sorted_comp(l, sv[i], (list_comparator)strcmp); list_dump(l, "%s\n"); list_free(l); }
boxdir * boxtree_add_folder(const char * path, const char * id, jobj * folder) { boxdir * aDir; boxfile * aFile, * part; list_iter it, pit; jobj * obj, *item; char * type; aDir = boxdir_create(); aDir->id = strdup(id); if(options.verbose) syslog(LOG_DEBUG, "Adding %s", path); obj = jobj_get(folder, "entries"); it = list_get_iter(obj->children); for(; it; it = list_iter_next(it)) { item = list_iter_getval(it); aFile = obj_to_file(item); type = jobj_getval(item, "type"); if(!strcmp(type,"folder")) list_append(aDir->folders, aFile); else { if(options.splitfiles && ends_with(aFile->name, PART_SUFFIX)) list_insert_sorted_comp(aDir->pieces, aFile, filename_compare); else list_append(aDir->files, aFile); } free(type); } if(options.splitfiles) { it = list_get_iter(aDir->files); pit = list_get_iter(aDir->pieces); for(; pit; pit = list_iter_next(pit)) { part = (boxfile*)list_iter_getval(pit); find_file_for_part(part->name, &it); if(it) { aFile = (boxfile*)list_iter_getval(it); aFile->size+=part->size; } else { syslog(LOG_WARNING, "Stale file part %s found", part->name ); it = list_get_iter(aDir->files); } } } xmlHashAddEntry(allDirs, path, aDir); return aDir; }