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