Eio.h
00001 /* EIO - EFL data type library 00002 * Copyright (C) 2010 Enlightenment Developers: 00003 * Cedric Bail <cedric.bail@free.fr> 00004 * Vincent "caro" Torri <vtorri at univ-evry dot fr> 00005 * Stephen "okra" Houston <unixtitan@gmail.com> 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; 00019 * if not, see <http://www.gnu.org/licenses/>. 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 /* ! DLL_EXPORT */ 00043 # else 00044 # define EAPI __declspec(dllimport) 00045 # endif /* ! EFL_EIO_BUILD */ 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 /* ! _WIN32 */ 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