more leak fixes
[framework/uifw/efreet.git] / src / lib / efreet_private.h
1 /* vim: set sw=4 ts=4 sts=4 et: */
2 #ifndef EFREET_PRIVATE_H
3 #define EFREET_PRIVATE_H
4
5 /**
6  * @file efreet_private.h
7  * @brief Contains methods and defines that are private to the Efreet
8  * implementaion
9  * @addtogroup Efreet_Private Efreet_Private: Private methods and defines
10  *
11  * @{
12  */
13
14 #include "config.h"
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <string.h>
18 #include <unistd.h>
19 #include <ctype.h>
20 #include <fcntl.h>
21 #include <sys/mman.h>
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <dirent.h>
25 #include <fnmatch.h>
26 #include <limits.h>
27
28 #ifdef HAVE_ALLOCA_H
29 #include <alloca.h>
30 #endif
31
32 #include <Eina.h>
33 #include <Ecore.h>
34 #include <Ecore_File.h>
35 #include <Ecore_Str.h>
36
37 #include "efreet_xml.h"
38 #include "efreet_ini.h"
39
40 /**
41  * @def NEW(x, c)
42  * Allocate and zero out c structures of type x
43  */
44 #define NEW(x, c) calloc(c, sizeof(x))
45
46 /**
47  * @def FREE(x)
48  * Free x and set to NULL
49  */
50 #define FREE(x) do { free(x); x = NULL; } while (0)
51
52 /**
53  * @def IF_FREE(x)
54  * If x is set, free x and set to NULL
55  */
56 #define IF_FREE(x) do { if (x) FREE(x); } while (0)
57
58 /**
59  * @def IF_RELEASE(x)
60  * If x is set, eina_stringshare_del x and set to NULL
61  */
62 #define IF_RELEASE(x) do { \
63     if (x) { \
64         const char *__tmp; __tmp = (x); (x) = NULL; eina_stringshare_del(__tmp); \
65     } \
66     (x) = NULL; \
67 } while (0)
68
69 /**
70  * @def IF_FREE_LIST(x)
71  * If x is a valid pointer destroy x and set to NULL
72  */
73 #define IF_FREE_LIST(list, free_cb) do { \
74     while (list) \
75     { \
76         free_cb(eina_list_data_get(list)); \
77         list = eina_list_remove_list(list, list); \
78     } \
79 } while (0)
80
81 /**
82  * @def IF_FREE_DLIST(x)
83  * If x is a valid pointer destroy x and set to NULL
84  */
85 #define IF_FREE_DLIST(x) do { \
86     if (x) { \
87         Ecore_DList *__tmp; __tmp = (x); (x) = NULL; ecore_dlist_destroy(__tmp); \
88     } \
89     (x) = NULL; \
90 } while (0)
91
92 /**
93  * @def IF_FREE_HASH(x)
94  * If x is a valid pointer destroy x and set to NULL
95  */
96 #define IF_FREE_HASH(x) do { \
97     if (x) { \
98         Eina_Hash *__tmp; __tmp = (x); (x) = NULL; eina_hash_free(__tmp); \
99     } \
100     (x) = NULL; \
101 } while (0)
102
103 #ifndef PATH_MAX
104 /**
105  * @def PATH_MAX
106  * Convenience define to set the maximim path length
107  */
108 #define PATH_MAX 4096
109 #endif
110
111 /**
112  * @internal
113  * The different types of commands in an Exec entry
114  */
115 enum Efreet_Desktop_Command_Flag
116 {
117     EFREET_DESKTOP_EXEC_FLAG_FULLPATH = 0x0001,
118     EFREET_DESKTOP_EXEC_FLAG_URI      = 0x0002,
119     EFREET_DESKTOP_EXEC_FLAG_DIR      = 0x0004,
120     EFREET_DESKTOP_EXEC_FLAG_FILE     = 0x0008
121 };
122
123 /**
124  * @internal
125  * Efreet_Desktop_Command_Flag
126  */
127 typedef enum Efreet_Desktop_Command_Flag Efreet_Desktop_Command_Flag;
128
129 /**
130  * @internal
131  * Efreet_Desktop_Command
132  */
133 typedef struct Efreet_Desktop_Command Efreet_Desktop_Command;
134
135 /**
136  * @internal
137  * Holds information on a desktop Exec command entry
138  */
139 struct Efreet_Desktop_Command
140 {
141   Efreet_Desktop *desktop;
142   int num_pending;
143
144   Efreet_Desktop_Command_Flag flags;
145
146   Efreet_Desktop_Command_Cb cb_command;
147   Efreet_Desktop_Progress_Cb cb_progress;
148   void *data;
149
150   Eina_List *files; /**< list of Efreet_Desktop_Command_File */
151 };
152
153 /**
154  * @internal
155  * Efreet_Desktop_Command_File
156  */
157 typedef struct Efreet_Desktop_Command_File Efreet_Desktop_Command_File;
158
159 /**
160  * @internal
161  * Stores information on a file passed to the desktop Exec command
162  */
163 struct Efreet_Desktop_Command_File
164 {
165   Efreet_Desktop_Command *command;
166   char *dir;
167   char *file;
168   char *fullpath;
169   char *uri;
170
171   int pending;
172 };
173
174 int efreet_base_init(void);
175 void efreet_base_shutdown(void);
176
177 int efreet_icon_init(void);
178 void efreet_icon_shutdown(void);
179
180 int efreet_menu_init(void);
181 void efreet_menu_shutdown(void);
182 Eina_List *efreet_default_dirs_get(const char *user_dir,
183                                     Eina_List *system_dirs,
184                                     const char *suffix);
185
186 int efreet_ini_init(void);
187 int efreet_ini_shutdown(void);
188
189 int efreet_desktop_init(void);
190 int efreet_desktop_shutdown(void);
191
192 const char *efreet_home_dir_get(void);
193
194 EAPI const char *efreet_lang_get(void);
195 EAPI const char *efreet_lang_country_get(void);
196 EAPI const char *efreet_lang_modifier_get(void);
197
198 size_t efreet_array_cat(char *buffer, size_t size, const char *strs[]);
199
200 const char *efreet_desktop_environment_get(void);
201
202 #define NON_EXISTING (void *)-1
203
204 void efreet_cache_clear(void);
205 const char *efreet_icon_hash_get(const char *theme_name, const char *icon, int size);
206 void efreet_icon_hash_put(const char *theme_name, const char *icon, int size, const char *file);
207
208 /**
209  * @}
210  */
211
212 #endif