Eio.h
1 /* EIO - EFL data type library
2  * Copyright (C) 2010 Enlightenment Developers:
3  * Cedric Bail <cedric.bail@free.fr>
4  * Vincent "caro" Torri <vtorri at univ-evry dot fr>
5  * Stephen "okra" Houston <unixtitan@gmail.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library;
19  * if not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef EIO_H__
23 # define EIO_H__
24 
25 #include <sys/types.h>
26 #include <sys/stat.h>
27 #include <unistd.h>
28 
29 #include <Eina.h>
30 #include <Eet.h>
31 
32 #ifdef EAPI
33 # undef EAPI
34 #endif
35 
36 #ifdef _WIN32
37 # ifdef EFL_EIO_BUILD
38 # ifdef DLL_EXPORT
39 # define EAPI __declspec(dllexport)
40 # else
41 # define EAPI
42 # endif /* ! DLL_EXPORT */
43 # else
44 # define EAPI __declspec(dllimport)
45 # endif /* ! EFL_EIO_BUILD */
46 #else
47 # ifdef __GNUC__
48 # if __GNUC__ >= 4
49 # define EAPI __attribute__ ((visibility("default")))
50 # else
51 # define EAPI
52 # endif
53 # else
54 # define EAPI
55 # endif
56 #endif /* ! _WIN32 */
57 
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 #define EIO_VERSION_MAJOR 1
64 #define EIO_VERSION_MINOR 7
65 
70  typedef struct _Eio_Version
71  {
72  int major;
73  int minor;
74  int micro;
75  int revision;
76  } Eio_Version;
77 
78  EAPI extern Eio_Version *eio_version;
79 
103 {
115 };
116 
122 
127 typedef struct _Eio_File Eio_File;
128 
134 
135 typedef Eina_Bool (*Eio_Filter_Cb)(void *data, Eio_File *handler, const char *file);
136 typedef void (*Eio_Main_Cb)(void *data, Eio_File *handler, const char *file);
137 
138 typedef Eina_Bool (*Eio_Filter_Direct_Cb)(void *data, Eio_File *handler, const Eina_File_Direct_Info *info);
139 typedef Eina_Bool (*Eio_Filter_Dir_Cb)(void *data, Eio_File *handler, Eina_File_Direct_Info *info);
140 typedef void (*Eio_Main_Direct_Cb)(void *data, Eio_File *handler, const Eina_File_Direct_Info *info);
141 
142 typedef void (*Eio_Stat_Cb)(void *data, Eio_File *handler, const Eina_Stat *stat);
143 typedef void (*Eio_Progress_Cb)(void *data, Eio_File *handler, const Eio_Progress *info);
144 
145 typedef void (*Eio_Eet_Open_Cb)(void *data, Eio_File *handler, Eet_File *file);
146 typedef void (*Eio_Open_Cb)(void *data, Eio_File *handler, Eina_File *file);
147 typedef Eina_Bool (*Eio_Filter_Map_Cb)(void *data, Eio_File *handler, void *map, size_t length);
148 typedef void (*Eio_Map_Cb)(void *data, Eio_File *handler, void *map, size_t length);
149 
150 typedef void (*Eio_Done_Data_Cb)(void *data, Eio_File *handler, const char *read_data, unsigned int size);
151 typedef void (*Eio_Done_String_Cb)(void *data, Eio_File *handler, const char *xattr_string);
152 typedef void (*Eio_Done_Double_Cb)(void *data, Eio_File *handler, double xattr_double);
153 typedef void (*Eio_Done_Int_Cb)(void *data, Eio_File *handler, int i);
154 
155 typedef void (*Eio_Done_ERead_Cb)(void *data, Eio_File *handler, void *decoded);
156 typedef void (*Eio_Done_Read_Cb)(void *data, Eio_File *handler, void *read_data, unsigned int size);
157 typedef void (*Eio_Done_Cb)(void *data, Eio_File *handler);
158 typedef void (*Eio_Error_Cb)(void *data, Eio_File *handler, int error);
159 typedef void (*Eio_Eet_Error_Cb)(void *data, Eio_File *handler, Eet_Error err);
160 
166 {
167  Eio_File_Op op;
169  long long current;
170  long long max;
171  float percent;
173  const char *source;
174  const char *dest;
175 };
176 
193 EAPI Eio_File *eio_file_ls(const char *dir,
194  Eio_Filter_Cb filter_cb,
195  Eio_Main_Cb main_cb,
196  Eio_Done_Cb done_cb,
197  Eio_Error_Cb error_cb,
198  const void *data);
199 
216 EAPI Eio_File *eio_file_direct_ls(const char *dir,
217  Eio_Filter_Direct_Cb filter_cb,
218  Eio_Main_Direct_Cb main_cb,
219  Eio_Done_Cb done_cb,
220  Eio_Error_Cb error_cb,
221  const void *data);
222 
238 EAPI Eio_File *eio_file_stat_ls(const char *dir,
239  Eio_Filter_Direct_Cb filter_cb,
240  Eio_Main_Direct_Cb main_cb,
241  Eio_Done_Cb done_cb,
242  Eio_Error_Cb error_cb,
243  const void *data);
244 
262 EAPI Eio_File *eio_dir_stat_ls(const char *dir,
263  Eio_Filter_Direct_Cb filter_cb,
264  Eio_Main_Direct_Cb main_cb,
265  Eio_Done_Cb done_cb,
266  Eio_Error_Cb error_cb,
267  const void *data);
268 
285 EAPI Eio_File *eio_dir_direct_ls(const char *dir,
286  Eio_Filter_Dir_Cb filter_cb,
287  Eio_Main_Direct_Cb main_cb,
288  Eio_Done_Cb done_cb,
289  Eio_Error_Cb error_cb,
290  const void *data);
291 
302 EAPI Eio_File *eio_file_direct_stat(const char *path,
303  Eio_Stat_Cb done_cb,
304  Eio_Error_Cb error_cb,
305  const void *data);
306 
319 EAPI Eio_File *eio_file_chmod(const char *path,
320  mode_t mode,
321  Eio_Done_Cb done_cb,
322  Eio_Error_Cb error_cb,
323  const void *data);
324 
338 EAPI Eio_File *eio_file_chown(const char *path,
339  const char *user,
340  const char *group,
341  Eio_Done_Cb done_cb,
342  Eio_Error_Cb error_cb,
343  const void *data);
344 
355 EAPI Eio_File *eio_file_unlink(const char *path,
356  Eio_Done_Cb done_cb,
357  Eio_Error_Cb error_cb,
358  const void *data);
359 
371 EAPI Eio_File *eio_file_mkdir(const char *path,
372  mode_t mode,
373  Eio_Done_Cb done_cb,
374  Eio_Error_Cb error_cb,
375  const void *data);
376 
390 EAPI Eio_File *eio_file_move(const char *source,
391  const char *dest,
392  Eio_Progress_Cb progress_cb,
393  Eio_Done_Cb done_cb,
394  Eio_Error_Cb error_cb,
395  const void *data);
396 
410 EAPI Eio_File *eio_file_copy(const char *source,
411  const char *dest,
412  Eio_Progress_Cb progress_cb,
413  Eio_Done_Cb done_cb,
414  Eio_Error_Cb error_cb,
415  const void *data);
416 
437 EAPI Eio_File *eio_dir_move(const char *source,
438  const char *dest,
439  Eio_Filter_Direct_Cb filter_cb,
440  Eio_Progress_Cb progress_cb,
441  Eio_Done_Cb done_cb,
442  Eio_Error_Cb error_cb,
443  const void *data);
444 
462 EAPI Eio_File *eio_dir_copy(const char *source,
463  const char *dest,
464  Eio_Filter_Direct_Cb filter_cb,
465  Eio_Progress_Cb progress_cb,
466  Eio_Done_Cb done_cb,
467  Eio_Error_Cb error_cb,
468  const void *data);
469 
484 EAPI Eio_File *eio_dir_unlink(const char *path,
485  Eio_Filter_Direct_Cb filter_cb,
486  Eio_Progress_Cb progress_cb,
487  Eio_Done_Cb done_cb,
488  Eio_Error_Cb error_cb,
489  const void *data);
515 EAPI Eio_File *eio_file_xattr(const char *path,
516  Eio_Filter_Cb filter_cb,
517  Eio_Main_Cb main_cb,
518  Eio_Done_Cb done_cb,
519  Eio_Error_Cb error_cb,
520  const void *data);
521 
536 EAPI Eio_File *eio_file_xattr_int_set(const char *path,
537  const char *attribute,
538  int xattr_int,
539  Eina_Xattr_Flags flags,
540  Eio_Done_Cb done_cb,
541  Eio_Error_Cb error_cb,
542  const void *data);
543 
558 EAPI Eio_File *eio_file_xattr_double_set(const char *path,
559  const char *attribute,
560  double xattr_double,
561  Eina_Xattr_Flags flags,
562  Eio_Done_Cb done_cb,
563  Eio_Error_Cb error_cb,
564  const void *data);
579 EAPI Eio_File *eio_file_xattr_string_set(const char *path,
580  const char *attribute,
581  const char *xattr_string,
582  Eina_Xattr_Flags flags,
583  Eio_Done_Cb done_cb,
584  Eio_Error_Cb error_cb,
585  const void *data);
601 EAPI Eio_File *eio_file_xattr_set(const char *path,
602  const char *attribute,
603  const char *xattr_data,
604  unsigned int xattr_size,
605  Eina_Xattr_Flags flags,
606  Eio_Done_Cb done_cb,
607  Eio_Error_Cb error_cb,
608  const void *data);
609 
621 EAPI Eio_File *eio_file_xattr_get(const char *path,
622  const char *attribute,
623  Eio_Done_Data_Cb done_cb,
624  Eio_Error_Cb error_cb,
625  const void *data);
637 EAPI Eio_File *eio_file_xattr_int_get(const char *path,
638  const char *attribute,
639  Eio_Done_Int_Cb done_cb,
640  Eio_Error_Cb error_cb,
641  const void *data);
653 EAPI Eio_File *eio_file_xattr_double_get(const char *path,
654  const char *attribute,
655  Eio_Done_Double_Cb done_cb,
656  Eio_Error_Cb error_cb,
657  const void *data);
669 EAPI Eio_File *eio_file_xattr_string_get(const char *path,
670  const char *attribute,
671  Eio_Done_String_Cb done_cb,
672  Eio_Error_Cb error_cb,
673  const void *data);
674 
695 EAPI int eio_init(void);
696 
701 EAPI int eio_shutdown(void);
702 
711 EAPI void *eio_file_container_get(Eio_File *ls);
712 
721 EAPI Eina_Bool eio_file_cancel(Eio_File *ls);
722 
730 EAPI Eina_Bool eio_file_check(Eio_File *ls);
731 
743 EAPI Eina_Bool eio_file_associate_add(Eio_File *ls,
744  const char *key,
745  const void *data, Eina_Free_Cb free_cb);
746 
759 EAPI Eina_Bool eio_file_associate_direct_add(Eio_File *ls,
760  const char *key,
761  const void *data, Eina_Free_Cb free_cb);
762 
769 EAPI void *eio_file_associate_find(Eio_File *ls, const char *key);
770 
779 static inline double eio_file_atime(const Eina_Stat *stat);
780 
788 static inline double eio_file_mtime(const Eina_Stat *stat);
789 
795 static inline long long eio_file_size(const Eina_Stat *stat);
796 
802 static inline Eina_Bool eio_file_is_dir(const Eina_Stat *stat);
803 
809 static inline Eina_Bool eio_file_is_lnk(const Eina_Stat *stat);
810 
840 EAPI Eio_File *eio_file_open(const char *name, Eina_Bool shared,
841  Eio_Open_Cb open_cb,
842  Eio_Error_Cb error_cb,
843  const void *data);
844 
853 EAPI Eio_File *eio_file_close(Eina_File *f,
854  Eio_Done_Cb done_cb,
855  Eio_Error_Cb error_cb,
856  const void *data);
857 
870 EAPI Eio_File *eio_file_map_all(Eina_File *f,
871  Eina_File_Populate rule,
872  Eio_Filter_Map_Cb filter_cb,
873  Eio_Map_Cb map_cb,
874  Eio_Error_Cb error_cb,
875  const void *data);
876 
891 EAPI Eio_File *eio_file_map_new(Eina_File *f,
892  Eina_File_Populate rule,
893  unsigned long int offset,
894  unsigned long int length,
895  Eio_Filter_Map_Cb filter_cb,
896  Eio_Map_Cb map_cb,
897  Eio_Error_Cb error_cb,
898  const void *data);
899 
924 EAPI Eio_File *eio_eet_open(const char *filename,
925  Eet_File_Mode mode,
926  Eio_Eet_Open_Cb eet_cb,
927  Eio_Error_Cb error_cb,
928  const void *data);
941 EAPI Eio_File *eio_eet_close(Eet_File *ef,
942  Eio_Done_Cb done_cb,
943  Eio_Eet_Error_Cb error_cb,
944  const void *data);
945 
957 EAPI Eio_File *eio_eet_sync(Eet_File *ef,
958  Eio_Done_Cb done_cb,
959  Eio_Eet_Error_Cb error_cb,
960  const void *data);
961 
976 EAPI Eio_File *eio_eet_data_write_cipher(Eet_File *ef,
977  Eet_Data_Descriptor *edd,
978  const char *name,
979  const char *cipher_key,
980  void *write_data,
981  int compress,
982  Eio_Done_Int_Cb done_cb,
983  Eio_Error_Cb error_cb,
984  const void *user_data);
985 
997 EAPI Eio_File *eio_eet_data_read_cipher(Eet_File *ef,
998  Eet_Data_Descriptor *edd,
999  const char *name,
1000  const char *cipher_key,
1001  Eio_Done_ERead_Cb done_cb,
1002  Eio_Error_Cb error_cb,
1003  const void *data);
1004 
1022 EAPI Eio_File *eio_eet_data_image_write_cipher(Eet_File *ef,
1023  const char *name,
1024  const char *cipher_key,
1025  void *write_data,
1026  unsigned int w,
1027  unsigned int h,
1028  int alpha,
1029  int compress,
1030  int quality,
1031  int lossy,
1032  Eio_Done_Int_Cb done_cb,
1033  Eio_Error_Cb error_cb,
1034  const void *user_data);
1035 
1045 EAPI Eio_File *eio_eet_read_direct(Eet_File *ef,
1046  const char *name,
1047  Eio_Done_Data_Cb done_cb,
1048  Eio_Error_Cb error_cb,
1049  const void *data);
1050 
1061 EAPI Eio_File *eio_eet_read_cipher(Eet_File *ef,
1062  const char *name,
1063  const char *cipher_key,
1064  Eio_Done_Read_Cb done_cb,
1065  Eio_Error_Cb error_cb,
1066  const void *data);
1067 
1081 EAPI Eio_File *eio_eet_write_cipher(Eet_File *ef,
1082  const char *name,
1083  void *write_data,
1084  int size,
1085  int compress,
1086  const char *cipher_key,
1087  Eio_Done_Int_Cb done_cb,
1088  Eio_Error_Cb error_cb,
1089  const void *user_data);
1090 
1107 EAPI extern int EIO_MONITOR_FILE_CREATED;
1108 EAPI extern int EIO_MONITOR_FILE_DELETED;
1109 EAPI extern int EIO_MONITOR_FILE_MODIFIED;
1110 EAPI extern int EIO_MONITOR_FILE_CLOSED;
1111 EAPI extern int EIO_MONITOR_DIRECTORY_CREATED;
1112 EAPI extern int EIO_MONITOR_DIRECTORY_DELETED;
1113 EAPI extern int EIO_MONITOR_DIRECTORY_MODIFIED;
1114 EAPI extern int EIO_MONITOR_DIRECTORY_CLOSED;
1115 EAPI extern int EIO_MONITOR_SELF_RENAME;
1116 EAPI extern int EIO_MONITOR_SELF_DELETED;
1117 EAPI extern int EIO_MONITOR_ERROR;
1119 typedef struct _Eio_Monitor Eio_Monitor;
1120 
1121 typedef struct _Eio_Monitor_Error Eio_Monitor_Error;
1122 typedef struct _Eio_Monitor_Event Eio_Monitor_Event;
1123 
1125 {
1126  Eio_Monitor *monitor;
1127  int error;
1128 };
1129 
1131 {
1132  Eio_Monitor *monitor;
1133  const char *filename;
1134 };
1135 
1146 EAPI Eio_Monitor *eio_monitor_add(const char *path);
1147 
1159 EAPI Eio_Monitor *eio_monitor_stringshared_add(const char *path);
1160 
1167 EAPI void eio_monitor_del(Eio_Monitor *monitor);
1168 
1175 EAPI const char *eio_monitor_path_get(Eio_Monitor *monitor);
1176 
1181 #include "eio_inline_helper.x"
1182 
1183 #ifdef __cplusplus
1184 }
1185 #endif
1186 
1187 
1188 #endif