From c6e145da2df8f607708effa31ddd5f5131878b54 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 7 Sep 2016 16:20:23 -0700 Subject: [PATCH] eio: add an internal function for getting xattr in bulk. --- src/lib/eio/eio_private.h | 5 ++++ src/lib/eio/eio_xattr.c | 56 +++++++++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/lib/eio/eio_private.h b/src/lib/eio/eio_private.h index 69a73d3020..dece4c1811 100644 --- a/src/lib/eio/eio_private.h +++ b/src/lib/eio/eio_private.h @@ -545,6 +545,11 @@ Eio_File * _eio_dir_stat_ls(const char *dir, Eio_Done_Cb done_cb, Eio_Error_Cb error_cb, const void *data); +Eio_File * _eio_file_xattr(const char *path, + Eio_Array_Cb main_internal_cb, + Eio_Done_Cb done_cb, + Eio_Error_Cb error_cb, + const void *data); // Sharing notifier between recursive and non recursive code. void _eio_string_notify(void *data, Ecore_Thread *thread EINA_UNUSED, void *msg_data); diff --git a/src/lib/eio/eio_xattr.c b/src/lib/eio/eio_xattr.c index 0dfec5b367..fdfb8990a6 100644 --- a/src/lib/eio/eio_xattr.c +++ b/src/lib/eio/eio_xattr.c @@ -305,27 +305,36 @@ _eio_file_xattr_setup_set(Eio_File_Xattr *async, * API * *============================================================================*/ -EAPI Eio_File * -eio_file_xattr(const char *path, - Eio_Filter_Cb filter_cb, - Eio_Main_Cb main_cb, - Eio_Done_Cb done_cb, - Eio_Error_Cb error_cb, - const void *data) +static Eio_File * +_eio_file_internal_xattr(const char *path, + Eio_Filter_Cb filter_cb, + Eio_Main_Cb main_cb, + Eio_Array_Cb main_internal_cb, + Eio_Done_Cb done_cb, + Eio_Error_Cb error_cb, + const void *data) { Eio_File_Char_Ls *async; EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(main_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); - async = calloc(1, sizeof (Eio_File_Char_Ls)); + async = eio_common_alloc(sizeof (Eio_File_Char_Ls)); EINA_SAFETY_ON_NULL_RETURN_VAL(async, NULL); - async->filter_cb = filter_cb; - async->main_cb = main_cb; async->ls.directory = eina_stringshare_add(path); + async->filter_cb = filter_cb; + + if (main_internal_cb) + { + async->main_internal_cb = main_internal_cb; + async->ls.gather = EINA_TRUE; + } + else + { + async->main_cb = main_cb; + } if (!eio_long_file_set(&async->ls.common, done_cb, @@ -340,6 +349,31 @@ eio_file_xattr(const char *path, return &async->ls.common; } +EAPI Eio_File * +eio_file_xattr(const char *path, + Eio_Filter_Cb filter_cb, + Eio_Main_Cb main_cb, + Eio_Done_Cb done_cb, + Eio_Error_Cb error_cb, + const void *data) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(main_cb, NULL); + + return _eio_file_internal_xattr(path, filter_cb, main_cb, NULL, done_cb, error_cb, data); +} + +Eio_File * +_eio_file_xattr(const char *path, + Eio_Array_Cb main_internal_cb, + Eio_Done_Cb done_cb, + Eio_Error_Cb error_cb, + const void *data) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(main_internal_cb, NULL); + + return _eio_file_internal_xattr(path, NULL, NULL, main_internal_cb, done_cb, error_cb, data); +} + EAPI Eio_File * eio_file_xattr_get(const char *path, const char *attribute,