static void _eio_file_heavy(void *data, Ecore_Thread *thread) { Eio_File_Char_Ls *async = data; Eina_Iterator *ls; const char *file; Eina_List *pack = NULL; double start; ls = eina_file_ls(async->ls.directory); if (!ls) { eio_file_thread_error(&async->ls.common, thread); return; } eio_file_container_set(&async->ls.common, eina_iterator_container_get(ls)); start = ecore_time_get(); EINA_ITERATOR_FOREACH(ls, file) { Eina_Bool filter = EINA_TRUE; if (async->filter_cb) { filter = async->filter_cb((void*) async->ls.common.data, &async->ls.common, file); } if (filter) { Eio_File_Char *send_fc; send_fc = eio_char_malloc(); if (!send_fc) goto on_error; send_fc->filename = file; send_fc->associated = async->ls.common.worker.associated; async->ls.common.worker.associated = NULL; pack = eina_list_append(pack, send_fc); } else { on_error: eina_stringshare_del(file); if (async->ls.common.worker.associated) { eina_hash_free(async->ls.common.worker.associated); async->ls.common.worker.associated = NULL; } } pack = eio_pack_send(thread, pack, &start); if (ecore_thread_check(thread)) break; }
int main(int argc, char **argv) { Eina_Iterator *it; const char *f_name; const Eina_File_Direct_Info *f_info; eina_init(); eina_file_dir_list("/home/", EINA_FALSE, _print_cb, NULL); it = eina_file_ls("/home/"); EINA_ITERATOR_FOREACH(it, f_name) { printf("%s\n", f_name); eina_stringshare_del(f_name); }
Eina_List * evas_module_engine_list(void) { Evas_Module *em; Eina_List *r = NULL, *l, *ll; Eina_Array_Iterator iterator; Eina_Iterator *it, *it2; unsigned int i; const char *s, *s2; char buf[4096]; EINA_LIST_FOREACH(evas_module_paths, l, s) { snprintf(buf, sizeof(buf), "%s/engines", s); it = eina_file_direct_ls(buf); if (it) { Eina_File_Direct_Info *fi; EINA_ITERATOR_FOREACH(it, fi) { const char *fname = fi->path + fi->name_start; snprintf(buf, sizeof(buf), "%s/engines/%s/%s", s, fname, MODULE_ARCH); it2 = eina_file_ls(buf); if (it2) { EINA_LIST_FOREACH(r, ll, s2) { if (!strcmp(fname, s2)) break; } if (!ll) r = eina_list_append(r, eina_stringshare_add(fname)); eina_iterator_free(it2); } } eina_iterator_free(it); } }
Vector<String> listDirectory(const String& path, const String& filter) { Vector<String> matchingEntries; CString cfilter = filter.utf8(); const char *f_name; Eina_Iterator* it = eina_file_ls(path.utf8().data()); // FIXME: Early return if the iterator is null to avoid error messages from eina_iterator_free(). // This check can be removed once the magic check on _free() removed in Eina. // http://www.mail-archive.com/[email protected]/msg42944.html if (!it) return matchingEntries; EINA_ITERATOR_FOREACH(it, f_name) { if (!fnmatch(cfilter.data(), f_name, 0)) matchingEntries.append(String::fromUTF8(f_name)); eina_stringshare_del(f_name); } eina_iterator_free(it); return matchingEntries; }