diff --git a/src/lib/eio/eio_map.c b/src/lib/eio/eio_map.c index 9f913e1d74..194b338516 100644 --- a/src/lib/eio/eio_map.c +++ b/src/lib/eio/eio_map.c @@ -44,7 +44,7 @@ static void _eio_file_open_free(Eio_File_Map *map) { if (map->name) eina_stringshare_del(map->name); - free(map); + eio_file_free((Eio_File*)map); } static void @@ -144,7 +144,7 @@ _eio_file_map_end(void *data, Ecore_Thread *thread EINA_UNUSED) Eio_File_Map_Rule *map = data; map->map_cb((void*) map->common.data, &map->common, map->result, map->length); - free(map); + eio_file_free((Eio_File*)map); } static void @@ -153,7 +153,7 @@ _eio_file_map_cancel(void *data, Ecore_Thread *thread EINA_UNUSED) Eio_File_Map_Rule *map = data; eio_file_error(&map->common); - free(map); + eio_file_free((Eio_File*)map); } /** diff --git a/src/tests/eio/eio_test_file.c b/src/tests/eio/eio_test_file.c index 5513e9013a..d4c71cd11d 100644 --- a/src/tests/eio/eio_test_file.c +++ b/src/tests/eio/eio_test_file.c @@ -118,6 +118,15 @@ _error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error) ecore_main_loop_quit(); } +static void +_open_done_cb(void *data, Eio_File *handler EINA_UNUSED, Eina_File *file) +{ + Eina_Bool *opened = (Eina_Bool *)data; + *opened = EINA_TRUE; + eina_file_close(file); + ecore_main_loop_quit(); +} + Eina_Tmpstr* get_full_path(const char* tmpdirname, const char* filename) { @@ -368,9 +377,47 @@ START_TEST(eio_file_test_file) } END_TEST +START_TEST(eio_file_test_open) +{ + Eina_Bool opened_file; + int ret; + + ret = ecore_init(); + fail_if(ret < 1); + ret = eio_init(); + fail_if(ret < 1); + ret = eina_init(); + fail_if(ret < 1); + ret = ecore_file_init(); + fail_if(ret < 1); + + + Eina_Tmpstr *test_dirname = get_eio_test_file_tmp_dir(); + Eina_Tmpstr *nested_dirname = create_test_dirs(test_dirname); + Eina_Tmpstr *nested_filename = get_full_path(test_dirname, files[3]); + + opened_file = EINA_FALSE; + eio_file_open(nested_filename, EINA_FALSE, _open_done_cb, _error_cb, &opened_file); + ecore_main_loop_begin(); + fail_if(!opened_file); + + // Cleanup + fail_if(!ecore_file_recursive_rm(test_dirname)); + + eina_tmpstr_del(nested_dirname); + eina_tmpstr_del(test_dirname); + eina_tmpstr_del(nested_filename); + ecore_file_shutdown(); + eina_shutdown(); + eio_shutdown(); + ecore_shutdown(); +} +END_TEST + void eio_test_file(TCase *tc) { tcase_add_test(tc, eio_file_test_ls); tcase_add_test(tc, eio_file_test_file); + tcase_add_test(tc, eio_file_test_open); }