eio: add an internal function for getting xattr in bulk.
authorCedric BAIL <cedric@osg.samsung.com>
Wed, 7 Sep 2016 23:20:23 +0000 (16:20 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Thu, 8 Sep 2016 22:16:43 +0000 (15:16 -0700)
src/lib/eio/eio_private.h
src/lib/eio/eio_xattr.c

index 69a73d3..dece4c1 100644 (file)
@@ -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);
index 0dfec5b..fdfb899 100644 (file)
@@ -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,
@@ -341,6 +350,31 @@ eio_file_xattr(const char *path,
 }
 
 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,
                   Eio_Done_Data_Cb done_cb,