00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef EIO_H__
00023 # define EIO_H__
00024
00025 #include <sys/types.h>
00026 #include <sys/stat.h>
00027 #include <unistd.h>
00028
00029 #include <Eina.h>
00030 #include <Eet.h>
00031
00032 #ifdef EAPI
00033 # undef EAPI
00034 #endif
00035
00036 #ifdef _WIN32
00037 # ifdef EFL_EIO_BUILD
00038 # ifdef DLL_EXPORT
00039 # define EAPI __declspec(dllexport)
00040 # else
00041 # define EAPI
00042 # endif
00043 # else
00044 # define EAPI __declspec(dllimport)
00045 # endif
00046 #else
00047 # ifdef __GNUC__
00048 # if __GNUC__ >= 4
00049 # define EAPI __attribute__ ((visibility("default")))
00050 # else
00051 # define EAPI
00052 # endif
00053 # else
00054 # define EAPI
00055 # endif
00056 #endif
00057
00058
00059 #ifdef __cplusplus
00060 extern "C" {
00061 #endif
00062
00063 #define EIO_VERSION_MAJOR 1
00064 #define EIO_VERSION_MINOR 7
00065
00070 typedef struct _Eio_Version
00071 {
00072 int major;
00073 int minor;
00074 int micro;
00075 int revision;
00076 } Eio_Version;
00077
00078 EAPI extern Eio_Version *eio_version;
00079
00102 enum _Eio_File_Op
00103 {
00104 EIO_FILE_COPY,
00105 EIO_FILE_MOVE,
00106 EIO_DIR_COPY,
00107 EIO_DIR_MOVE,
00112 EIO_UNLINK,
00113 EIO_FILE_GETPWNAM,
00114 EIO_FILE_GETGRNAM
00115 };
00116
00121 typedef enum _Eio_File_Op Eio_File_Op;
00122
00127 typedef struct _Eio_File Eio_File;
00128
00133 typedef struct _Eio_Progress Eio_Progress;
00134
00135 typedef Eina_Bool (*Eio_Filter_Cb)(void *data, Eio_File *handler, const char *file);
00136 typedef void (*Eio_Main_Cb)(void *data, Eio_File *handler, const char *file);
00137
00138 typedef Eina_Bool (*Eio_Filter_Direct_Cb)(void *data, Eio_File *handler, const Eina_File_Direct_Info *info);
00139 typedef Eina_Bool (*Eio_Filter_Dir_Cb)(void *data, Eio_File *handler, Eina_File_Direct_Info *info);
00140 typedef void (*Eio_Main_Direct_Cb)(void *data, Eio_File *handler, const Eina_File_Direct_Info *info);
00141
00142 typedef void (*Eio_Stat_Cb)(void *data, Eio_File *handler, const Eina_Stat *stat);
00143 typedef void (*Eio_Progress_Cb)(void *data, Eio_File *handler, const Eio_Progress *info);
00144
00145 typedef void (*Eio_Eet_Open_Cb)(void *data, Eio_File *handler, Eet_File *file);
00146 typedef void (*Eio_Open_Cb)(void *data, Eio_File *handler, Eina_File *file);
00147 typedef Eina_Bool (*Eio_Filter_Map_Cb)(void *data, Eio_File *handler, void *map, size_t length);
00148 typedef void (*Eio_Map_Cb)(void *data, Eio_File *handler, void *map, size_t length);
00149
00150 typedef void (*Eio_Done_Data_Cb)(void *data, Eio_File *handler, const char *read_data, unsigned int size);
00151 typedef void (*Eio_Done_String_Cb)(void *data, Eio_File *handler, const char *xattr_string);
00152 typedef void (*Eio_Done_Double_Cb)(void *data, Eio_File *handler, double xattr_double);
00153 typedef void (*Eio_Done_Int_Cb)(void *data, Eio_File *handler, int i);
00154
00155 typedef void (*Eio_Done_ERead_Cb)(void *data, Eio_File *handler, void *decoded);
00156 typedef void (*Eio_Done_Read_Cb)(void *data, Eio_File *handler, void *read_data, unsigned int size);
00157 typedef void (*Eio_Done_Cb)(void *data, Eio_File *handler);
00158 typedef void (*Eio_Error_Cb)(void *data, Eio_File *handler, int error);
00159 typedef void (*Eio_Eet_Error_Cb)(void *data, Eio_File *handler, Eet_Error err);
00160
00165 struct _Eio_Progress
00166 {
00167 Eio_File_Op op;
00169 long long current;
00170 long long max;
00171 float percent;
00173 const char *source;
00174 const char *dest;
00175 };
00176
00193 EAPI Eio_File *eio_file_ls(const char *dir,
00194 Eio_Filter_Cb filter_cb,
00195 Eio_Main_Cb main_cb,
00196 Eio_Done_Cb done_cb,
00197 Eio_Error_Cb error_cb,
00198 const void *data);
00199
00216 EAPI Eio_File *eio_file_direct_ls(const char *dir,
00217 Eio_Filter_Direct_Cb filter_cb,
00218 Eio_Main_Direct_Cb main_cb,
00219 Eio_Done_Cb done_cb,
00220 Eio_Error_Cb error_cb,
00221 const void *data);
00222
00238 EAPI Eio_File *eio_file_stat_ls(const char *dir,
00239 Eio_Filter_Direct_Cb filter_cb,
00240 Eio_Main_Direct_Cb main_cb,
00241 Eio_Done_Cb done_cb,
00242 Eio_Error_Cb error_cb,
00243 const void *data);
00244
00262 EAPI Eio_File *eio_dir_stat_ls(const char *dir,
00263 Eio_Filter_Direct_Cb filter_cb,
00264 Eio_Main_Direct_Cb main_cb,
00265 Eio_Done_Cb done_cb,
00266 Eio_Error_Cb error_cb,
00267 const void *data);
00268
00285 EAPI Eio_File *eio_dir_direct_ls(const char *dir,
00286 Eio_Filter_Dir_Cb filter_cb,
00287 Eio_Main_Direct_Cb main_cb,
00288 Eio_Done_Cb done_cb,
00289 Eio_Error_Cb error_cb,
00290 const void *data);
00291
00302 EAPI Eio_File *eio_file_direct_stat(const char *path,
00303 Eio_Stat_Cb done_cb,
00304 Eio_Error_Cb error_cb,
00305 const void *data);
00306
00319 EAPI Eio_File *eio_file_chmod(const char *path,
00320 mode_t mode,
00321 Eio_Done_Cb done_cb,
00322 Eio_Error_Cb error_cb,
00323 const void *data);
00324
00338 EAPI Eio_File *eio_file_chown(const char *path,
00339 const char *user,
00340 const char *group,
00341 Eio_Done_Cb done_cb,
00342 Eio_Error_Cb error_cb,
00343 const void *data);
00344
00355 EAPI Eio_File *eio_file_unlink(const char *path,
00356 Eio_Done_Cb done_cb,
00357 Eio_Error_Cb error_cb,
00358 const void *data);
00359
00371 EAPI Eio_File *eio_file_mkdir(const char *path,
00372 mode_t mode,
00373 Eio_Done_Cb done_cb,
00374 Eio_Error_Cb error_cb,
00375 const void *data);
00376
00390 EAPI Eio_File *eio_file_move(const char *source,
00391 const char *dest,
00392 Eio_Progress_Cb progress_cb,
00393 Eio_Done_Cb done_cb,
00394 Eio_Error_Cb error_cb,
00395 const void *data);
00396
00410 EAPI Eio_File *eio_file_copy(const char *source,
00411 const char *dest,
00412 Eio_Progress_Cb progress_cb,
00413 Eio_Done_Cb done_cb,
00414 Eio_Error_Cb error_cb,
00415 const void *data);
00416
00437 EAPI Eio_File *eio_dir_move(const char *source,
00438 const char *dest,
00439 Eio_Filter_Direct_Cb filter_cb,
00440 Eio_Progress_Cb progress_cb,
00441 Eio_Done_Cb done_cb,
00442 Eio_Error_Cb error_cb,
00443 const void *data);
00444
00462 EAPI Eio_File *eio_dir_copy(const char *source,
00463 const char *dest,
00464 Eio_Filter_Direct_Cb filter_cb,
00465 Eio_Progress_Cb progress_cb,
00466 Eio_Done_Cb done_cb,
00467 Eio_Error_Cb error_cb,
00468 const void *data);
00469
00484 EAPI Eio_File *eio_dir_unlink(const char *path,
00485 Eio_Filter_Direct_Cb filter_cb,
00486 Eio_Progress_Cb progress_cb,
00487 Eio_Done_Cb done_cb,
00488 Eio_Error_Cb error_cb,
00489 const void *data);
00515 EAPI Eio_File *eio_file_xattr(const char *path,
00516 Eio_Filter_Cb filter_cb,
00517 Eio_Main_Cb main_cb,
00518 Eio_Done_Cb done_cb,
00519 Eio_Error_Cb error_cb,
00520 const void *data);
00521
00536 EAPI Eio_File *eio_file_xattr_int_set(const char *path,
00537 const char *attribute,
00538 int xattr_int,
00539 Eina_Xattr_Flags flags,
00540 Eio_Done_Cb done_cb,
00541 Eio_Error_Cb error_cb,
00542 const void *data);
00543
00558 EAPI Eio_File *eio_file_xattr_double_set(const char *path,
00559 const char *attribute,
00560 double xattr_double,
00561 Eina_Xattr_Flags flags,
00562 Eio_Done_Cb done_cb,
00563 Eio_Error_Cb error_cb,
00564 const void *data);
00579 EAPI Eio_File *eio_file_xattr_string_set(const char *path,
00580 const char *attribute,
00581 const char *xattr_string,
00582 Eina_Xattr_Flags flags,
00583 Eio_Done_Cb done_cb,
00584 Eio_Error_Cb error_cb,
00585 const void *data);
00601 EAPI Eio_File *eio_file_xattr_set(const char *path,
00602 const char *attribute,
00603 const char *xattr_data,
00604 unsigned int xattr_size,
00605 Eina_Xattr_Flags flags,
00606 Eio_Done_Cb done_cb,
00607 Eio_Error_Cb error_cb,
00608 const void *data);
00609
00621 EAPI Eio_File *eio_file_xattr_get(const char *path,
00622 const char *attribute,
00623 Eio_Done_Data_Cb done_cb,
00624 Eio_Error_Cb error_cb,
00625 const void *data);
00637 EAPI Eio_File *eio_file_xattr_int_get(const char *path,
00638 const char *attribute,
00639 Eio_Done_Int_Cb done_cb,
00640 Eio_Error_Cb error_cb,
00641 const void *data);
00653 EAPI Eio_File *eio_file_xattr_double_get(const char *path,
00654 const char *attribute,
00655 Eio_Done_Double_Cb done_cb,
00656 Eio_Error_Cb error_cb,
00657 const void *data);
00669 EAPI Eio_File *eio_file_xattr_string_get(const char *path,
00670 const char *attribute,
00671 Eio_Done_String_Cb done_cb,
00672 Eio_Error_Cb error_cb,
00673 const void *data);
00674
00695 EAPI int eio_init(void);
00696
00701 EAPI int eio_shutdown(void);
00702
00711 EAPI void *eio_file_container_get(Eio_File *ls);
00712
00721 EAPI Eina_Bool eio_file_cancel(Eio_File *ls);
00722
00730 EAPI Eina_Bool eio_file_check(Eio_File *ls);
00731
00743 EAPI Eina_Bool eio_file_associate_add(Eio_File *ls,
00744 const char *key,
00745 const void *data, Eina_Free_Cb free_cb);
00746
00759 EAPI Eina_Bool eio_file_associate_direct_add(Eio_File *ls,
00760 const char *key,
00761 const void *data, Eina_Free_Cb free_cb);
00762
00769 EAPI void *eio_file_associate_find(Eio_File *ls, const char *key);
00770
00779 static inline double eio_file_atime(const Eina_Stat *stat);
00780
00788 static inline double eio_file_mtime(const Eina_Stat *stat);
00789
00795 static inline long long eio_file_size(const Eina_Stat *stat);
00796
00802 static inline Eina_Bool eio_file_is_dir(const Eina_Stat *stat);
00803
00809 static inline Eina_Bool eio_file_is_lnk(const Eina_Stat *stat);
00810
00840 EAPI Eio_File *eio_file_open(const char *name, Eina_Bool shared,
00841 Eio_Open_Cb open_cb,
00842 Eio_Error_Cb error_cb,
00843 const void *data);
00844
00853 EAPI Eio_File *eio_file_close(Eina_File *f,
00854 Eio_Done_Cb done_cb,
00855 Eio_Error_Cb error_cb,
00856 const void *data);
00857
00870 EAPI Eio_File *eio_file_map_all(Eina_File *f,
00871 Eina_File_Populate rule,
00872 Eio_Filter_Map_Cb filter_cb,
00873 Eio_Map_Cb map_cb,
00874 Eio_Error_Cb error_cb,
00875 const void *data);
00876
00891 EAPI Eio_File *eio_file_map_new(Eina_File *f,
00892 Eina_File_Populate rule,
00893 unsigned long int offset,
00894 unsigned long int length,
00895 Eio_Filter_Map_Cb filter_cb,
00896 Eio_Map_Cb map_cb,
00897 Eio_Error_Cb error_cb,
00898 const void *data);
00899
00924 EAPI Eio_File *eio_eet_open(const char *filename,
00925 Eet_File_Mode mode,
00926 Eio_Eet_Open_Cb eet_cb,
00927 Eio_Error_Cb error_cb,
00928 const void *data);
00941 EAPI Eio_File *eio_eet_close(Eet_File *ef,
00942 Eio_Done_Cb done_cb,
00943 Eio_Eet_Error_Cb error_cb,
00944 const void *data);
00945
00957 EAPI Eio_File *eio_eet_sync(Eet_File *ef,
00958 Eio_Done_Cb done_cb,
00959 Eio_Eet_Error_Cb error_cb,
00960 const void *data);
00961
00976 EAPI Eio_File *eio_eet_data_write_cipher(Eet_File *ef,
00977 Eet_Data_Descriptor *edd,
00978 const char *name,
00979 const char *cipher_key,
00980 void *write_data,
00981 int compress,
00982 Eio_Done_Int_Cb done_cb,
00983 Eio_Error_Cb error_cb,
00984 const void *user_data);
00985
00997 EAPI Eio_File *eio_eet_data_read_cipher(Eet_File *ef,
00998 Eet_Data_Descriptor *edd,
00999 const char *name,
01000 const char *cipher_key,
01001 Eio_Done_ERead_Cb done_cb,
01002 Eio_Error_Cb error_cb,
01003 const void *data);
01004
01022 EAPI Eio_File *eio_eet_data_image_write_cipher(Eet_File *ef,
01023 const char *name,
01024 const char *cipher_key,
01025 void *write_data,
01026 unsigned int w,
01027 unsigned int h,
01028 int alpha,
01029 int compress,
01030 int quality,
01031 int lossy,
01032 Eio_Done_Int_Cb done_cb,
01033 Eio_Error_Cb error_cb,
01034 const void *user_data);
01035
01045 EAPI Eio_File *eio_eet_read_direct(Eet_File *ef,
01046 const char *name,
01047 Eio_Done_Data_Cb done_cb,
01048 Eio_Error_Cb error_cb,
01049 const void *data);
01050
01061 EAPI Eio_File *eio_eet_read_cipher(Eet_File *ef,
01062 const char *name,
01063 const char *cipher_key,
01064 Eio_Done_Read_Cb done_cb,
01065 Eio_Error_Cb error_cb,
01066 const void *data);
01067
01081 EAPI Eio_File *eio_eet_write_cipher(Eet_File *ef,
01082 const char *name,
01083 void *write_data,
01084 int size,
01085 int compress,
01086 const char *cipher_key,
01087 Eio_Done_Int_Cb done_cb,
01088 Eio_Error_Cb error_cb,
01089 const void *user_data);
01090
01107 EAPI extern int EIO_MONITOR_FILE_CREATED;
01108 EAPI extern int EIO_MONITOR_FILE_DELETED;
01109 EAPI extern int EIO_MONITOR_FILE_MODIFIED;
01110 EAPI extern int EIO_MONITOR_FILE_CLOSED;
01111 EAPI extern int EIO_MONITOR_DIRECTORY_CREATED;
01112 EAPI extern int EIO_MONITOR_DIRECTORY_DELETED;
01113 EAPI extern int EIO_MONITOR_DIRECTORY_MODIFIED;
01114 EAPI extern int EIO_MONITOR_DIRECTORY_CLOSED;
01115 EAPI extern int EIO_MONITOR_SELF_RENAME;
01116 EAPI extern int EIO_MONITOR_SELF_DELETED;
01117 EAPI extern int EIO_MONITOR_ERROR;
01119 typedef struct _Eio_Monitor Eio_Monitor;
01120
01121 typedef struct _Eio_Monitor_Error Eio_Monitor_Error;
01122 typedef struct _Eio_Monitor_Event Eio_Monitor_Event;
01123
01124 struct _Eio_Monitor_Error
01125 {
01126 Eio_Monitor *monitor;
01127 int error;
01128 };
01129
01130 struct _Eio_Monitor_Event
01131 {
01132 Eio_Monitor *monitor;
01133 const char *filename;
01134 };
01135
01146 EAPI Eio_Monitor *eio_monitor_add(const char *path);
01147
01159 EAPI Eio_Monitor *eio_monitor_stringshared_add(const char *path);
01160
01167 EAPI void eio_monitor_del(Eio_Monitor *monitor);
01168
01175 EAPI const char *eio_monitor_path_get(Eio_Monitor *monitor);
01176
01181 #include "eio_inline_helper.x"
01182
01183 #ifdef __cplusplus
01184 }
01185 #endif
01186
01187
01188 #endif