Here is a simple example that implement a stupidly simple recursive ls that display file size:

#include <Eina.h>
#include <Ecore.h>
#include <Eio.h>
static Eina_Bool
_test_filter_cb(void *data, Eio_File *handler, Eina_File_Direct_Info *info)
{
Eina_Stat *buffer;
Eina_Bool isdir;
isdir = info->type == EINA_FILE_DIR;
buffer = malloc(sizeof (Eina_Stat));
if (eina_file_statat(eio_file_container_get(handler), info, buffer))
{
free(buffer);
return EINA_FALSE;
}
if (!isdir && info->type == EINA_FILE_DIR)
{
struct stat st;
if (lstat(info->path, &st) == 0)
{
if (S_ISLNK(st.st_mode))
}
}
eio_file_associate_direct_add(handler, "stat", buffer, free);
fprintf(stdout, "ACCEPTING: %s\n", info->path);
return EINA_TRUE;
}
static void
_test_main_cb(void *data, Eio_File *handler, const Eina_File_Direct_Info *info)
{
struct stat *buffer;
buffer = eio_file_associate_find(handler, "stat");
fprintf(stdout, "PROCESS: %s of size %li\n", info->path, buffer->st_size);
}
static void
_test_done_cb(void *data, Eio_File *handler)
{
printf("ls done\n");
}
static void
_test_error_cb(void *data, Eio_File *handler, int error)
{
fprintf(stdout, "error: [%s]\n", strerror(error));
}
int
main(int argc, char **argv)
{
Eio_File *cp;
if (argc != 2)
{
fprintf(stdout, "eio_ls directory\n");
return -1;
}
cp = eio_dir_direct_ls(argv[1],
_test_filter_cb,
_test_main_cb,
_test_done_cb,
_test_error_cb,
NULL);
return 0;
}