diff options
author | David Walter Seikel | 2012-04-22 09:19:23 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-04-22 09:19:23 +1000 |
commit | c963d75dfdeec11f82e79e727062fbf89afa2c04 (patch) | |
tree | 895633dbf641110be46f117c29890c49b3ffc0bd /libraries/eina/src | |
parent | Adding the new extantz viewer and grid manager. (diff) | |
download | SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.zip SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.gz SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.bz2 SledjHamr-c963d75dfdeec11f82e79e727062fbf89afa2c04.tar.xz |
Update EFL to latest beta.
Diffstat (limited to 'libraries/eina/src')
95 files changed, 4864 insertions, 2028 deletions
diff --git a/libraries/eina/src/Makefile.in b/libraries/eina/src/Makefile.in index eb3a2c0..9076215 100644 --- a/libraries/eina/src/Makefile.in +++ b/libraries/eina/src/Makefile.in | |||
@@ -36,20 +36,24 @@ host_triplet = @host@ | |||
36 | subdir = src | 36 | subdir = src |
37 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 37 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
38 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 38 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
39 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 39 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
40 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 40 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
41 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 41 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
42 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 42 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
43 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 43 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
44 | $(top_srcdir)/m4/efl_examples.m4 \ | 44 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
45 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 45 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
46 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 46 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
47 | $(top_srcdir)/m4/efl_threads.m4 \ | 47 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
48 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 48 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
49 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 49 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
50 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 50 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
51 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 51 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
52 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 52 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
53 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
54 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
55 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
56 | $(top_srcdir)/configure.ac | ||
53 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 57 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
54 | $(ACLOCAL_M4) | 58 | $(ACLOCAL_M4) |
55 | mkinstalldirs = $(install_sh) -d | 59 | mkinstalldirs = $(install_sh) -d |
@@ -150,13 +154,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
150 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 154 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
151 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 155 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
152 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 156 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
157 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
153 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 158 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
154 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 159 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
155 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 160 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
156 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 161 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
157 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 162 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
158 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 163 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
159 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
160 | EINA_LIBS = @EINA_LIBS@ | 164 | EINA_LIBS = @EINA_LIBS@ |
161 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 165 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
162 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 166 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -166,6 +170,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
166 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 170 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
167 | EVIL_LIBS = @EVIL_LIBS@ | 171 | EVIL_LIBS = @EVIL_LIBS@ |
168 | EXEEXT = @EXEEXT@ | 172 | EXEEXT = @EXEEXT@ |
173 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
174 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
169 | FGREP = @FGREP@ | 175 | FGREP = @FGREP@ |
170 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 176 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
171 | GLIB_LIBS = @GLIB_LIBS@ | 177 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -201,6 +207,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
201 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 207 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
202 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 208 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
203 | PKG_CONFIG = @PKG_CONFIG@ | 209 | PKG_CONFIG = @PKG_CONFIG@ |
210 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
211 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
204 | RANLIB = @RANLIB@ | 212 | RANLIB = @RANLIB@ |
205 | SED = @SED@ | 213 | SED = @SED@ |
206 | SET_MAKE = @SET_MAKE@ | 214 | SET_MAKE = @SET_MAKE@ |
diff --git a/libraries/eina/src/examples/Makefile.am b/libraries/eina/src/examples/Makefile.am index 45b72f0..c8d80f9 100644 --- a/libraries/eina/src/examples/Makefile.am +++ b/libraries/eina/src/examples/Makefile.am | |||
@@ -37,7 +37,14 @@ SRCS = \ | |||
37 | eina_inlist_03.c \ | 37 | eina_inlist_03.c \ |
38 | eina_str_01.c \ | 38 | eina_str_01.c \ |
39 | eina_strbuf_01.c \ | 39 | eina_strbuf_01.c \ |
40 | eina_tiler_01.c | 40 | eina_tiler_01.c \ |
41 | eina_model_01.c \ | ||
42 | eina_model_02.c \ | ||
43 | eina_model_03.c \ | ||
44 | eina_value_01.c \ | ||
45 | eina_value_02.c \ | ||
46 | eina_value_03.c \ | ||
47 | eina_inarray_01.c | ||
41 | 48 | ||
42 | examples_PROGRAMS = | 49 | examples_PROGRAMS = |
43 | 50 | ||
@@ -73,7 +80,24 @@ examples_PROGRAMS += \ | |||
73 | eina_inlist_02 \ | 80 | eina_inlist_02 \ |
74 | eina_inlist_03 \ | 81 | eina_inlist_03 \ |
75 | eina_str_01 \ | 82 | eina_str_01 \ |
76 | eina_strbuf_01 | 83 | eina_strbuf_01 \ |
84 | eina_model_01 \ | ||
85 | eina_model_02 \ | ||
86 | eina_model_03 \ | ||
87 | eina_model_04 \ | ||
88 | eina_value_01 \ | ||
89 | eina_value_02 \ | ||
90 | eina_value_03 \ | ||
91 | eina_inarray_01 | ||
92 | |||
93 | eina_model_04_SOURCES = \ | ||
94 | eina_model_04_animal.c \ | ||
95 | eina_model_04_child.c \ | ||
96 | eina_model_04_human.c \ | ||
97 | eina_model_04_main.c \ | ||
98 | eina_model_04_parrot.c \ | ||
99 | eina_model_04_whistler.c | ||
100 | |||
77 | 101 | ||
78 | if BUILD_TILER_EXAMPLE | 102 | if BUILD_TILER_EXAMPLE |
79 | AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@ | 103 | AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@ |
diff --git a/libraries/eina/src/examples/Makefile.in b/libraries/eina/src/examples/Makefile.in index 6e432bb..fba8439 100644 --- a/libraries/eina/src/examples/Makefile.in +++ b/libraries/eina/src/examples/Makefile.in | |||
@@ -62,27 +62,39 @@ examples_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) | |||
62 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02 \ | 62 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02 \ |
63 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03 \ | 63 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03 \ |
64 | @EFL_BUILD_EXAMPLES_TRUE@ eina_str_01 \ | 64 | @EFL_BUILD_EXAMPLES_TRUE@ eina_str_01 \ |
65 | @EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01 | 65 | @EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01 \ |
66 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_01 \ | ||
67 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_02 \ | ||
68 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_03 \ | ||
69 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04 \ | ||
70 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_01 \ | ||
71 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_02 \ | ||
72 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_03 \ | ||
73 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inarray_01 | ||
66 | 74 | ||
67 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_2 = @ECORE_EVAS_CFLAGS@ | 75 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_2 = @ECORE_EVAS_CFLAGS@ |
68 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_3 = eina_tiler_01 | 76 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_3 = eina_tiler_01 |
69 | subdir = src/examples | 77 | subdir = src/examples |
70 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 78 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
71 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 79 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
72 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 80 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
73 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 81 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
74 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 82 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
75 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 83 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
76 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 84 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
77 | $(top_srcdir)/m4/efl_examples.m4 \ | 85 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
78 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 86 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
79 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 87 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
80 | $(top_srcdir)/m4/efl_threads.m4 \ | 88 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
81 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 89 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
82 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 90 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
83 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 91 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
84 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 92 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
85 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 93 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
94 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
95 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
96 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
97 | $(top_srcdir)/configure.ac | ||
86 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 98 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
87 | $(ACLOCAL_M4) | 99 | $(ACLOCAL_M4) |
88 | mkinstalldirs = $(install_sh) -d | 100 | mkinstalldirs = $(install_sh) -d |
@@ -114,7 +126,15 @@ CONFIG_CLEAN_VPATH_FILES = | |||
114 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02$(EXEEXT) \ | 126 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02$(EXEEXT) \ |
115 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03$(EXEEXT) \ | 127 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03$(EXEEXT) \ |
116 | @EFL_BUILD_EXAMPLES_TRUE@ eina_str_01$(EXEEXT) \ | 128 | @EFL_BUILD_EXAMPLES_TRUE@ eina_str_01$(EXEEXT) \ |
117 | @EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01$(EXEEXT) | 129 | @EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01$(EXEEXT) \ |
130 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_01$(EXEEXT) \ | ||
131 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_02$(EXEEXT) \ | ||
132 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_03$(EXEEXT) \ | ||
133 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04$(EXEEXT) \ | ||
134 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_01$(EXEEXT) \ | ||
135 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_02$(EXEEXT) \ | ||
136 | @EFL_BUILD_EXAMPLES_TRUE@ eina_value_03$(EXEEXT) \ | ||
137 | @EFL_BUILD_EXAMPLES_TRUE@ eina_inarray_01$(EXEEXT) | ||
118 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_2 = eina_tiler_01$(EXEEXT) | 138 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_2 = eina_tiler_01$(EXEEXT) |
119 | am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)" | 139 | am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)" |
120 | PROGRAMS = $(examples_PROGRAMS) | 140 | PROGRAMS = $(examples_PROGRAMS) |
@@ -173,6 +193,10 @@ eina_hash_08_SOURCES = eina_hash_08.c | |||
173 | eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT) | 193 | eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT) |
174 | eina_hash_08_LDADD = $(LDADD) | 194 | eina_hash_08_LDADD = $(LDADD) |
175 | eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | 195 | eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la |
196 | eina_inarray_01_SOURCES = eina_inarray_01.c | ||
197 | eina_inarray_01_OBJECTS = eina_inarray_01.$(OBJEXT) | ||
198 | eina_inarray_01_LDADD = $(LDADD) | ||
199 | eina_inarray_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
176 | eina_inlist_01_SOURCES = eina_inlist_01.c | 200 | eina_inlist_01_SOURCES = eina_inlist_01.c |
177 | eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT) | 201 | eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT) |
178 | eina_inlist_01_LDADD = $(LDADD) | 202 | eina_inlist_01_LDADD = $(LDADD) |
@@ -217,6 +241,32 @@ eina_log_03_SOURCES = eina_log_03.c | |||
217 | eina_log_03_OBJECTS = eina_log_03.$(OBJEXT) | 241 | eina_log_03_OBJECTS = eina_log_03.$(OBJEXT) |
218 | eina_log_03_LDADD = $(LDADD) | 242 | eina_log_03_LDADD = $(LDADD) |
219 | eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | 243 | eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la |
244 | eina_model_01_SOURCES = eina_model_01.c | ||
245 | eina_model_01_OBJECTS = eina_model_01.$(OBJEXT) | ||
246 | eina_model_01_LDADD = $(LDADD) | ||
247 | eina_model_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
248 | eina_model_02_SOURCES = eina_model_02.c | ||
249 | eina_model_02_OBJECTS = eina_model_02.$(OBJEXT) | ||
250 | eina_model_02_LDADD = $(LDADD) | ||
251 | eina_model_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
252 | eina_model_03_SOURCES = eina_model_03.c | ||
253 | eina_model_03_OBJECTS = eina_model_03.$(OBJEXT) | ||
254 | eina_model_03_LDADD = $(LDADD) | ||
255 | eina_model_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
256 | am__eina_model_04_SOURCES_DIST = eina_model_04_animal.c \ | ||
257 | eina_model_04_child.c eina_model_04_human.c \ | ||
258 | eina_model_04_main.c eina_model_04_parrot.c \ | ||
259 | eina_model_04_whistler.c | ||
260 | @EFL_BUILD_EXAMPLES_TRUE@am_eina_model_04_OBJECTS = \ | ||
261 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_animal.$(OBJEXT) \ | ||
262 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_child.$(OBJEXT) \ | ||
263 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_human.$(OBJEXT) \ | ||
264 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_main.$(OBJEXT) \ | ||
265 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_parrot.$(OBJEXT) \ | ||
266 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_whistler.$(OBJEXT) | ||
267 | eina_model_04_OBJECTS = $(am_eina_model_04_OBJECTS) | ||
268 | eina_model_04_LDADD = $(LDADD) | ||
269 | eina_model_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
220 | eina_str_01_SOURCES = eina_str_01.c | 270 | eina_str_01_SOURCES = eina_str_01.c |
221 | eina_str_01_OBJECTS = eina_str_01.$(OBJEXT) | 271 | eina_str_01_OBJECTS = eina_str_01.$(OBJEXT) |
222 | eina_str_01_LDADD = $(LDADD) | 272 | eina_str_01_LDADD = $(LDADD) |
@@ -228,6 +278,18 @@ eina_strbuf_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | |||
228 | eina_tiler_01_SOURCES = eina_tiler_01.c | 278 | eina_tiler_01_SOURCES = eina_tiler_01.c |
229 | eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT) | 279 | eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT) |
230 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | 280 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la |
281 | eina_value_01_SOURCES = eina_value_01.c | ||
282 | eina_value_01_OBJECTS = eina_value_01.$(OBJEXT) | ||
283 | eina_value_01_LDADD = $(LDADD) | ||
284 | eina_value_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
285 | eina_value_02_SOURCES = eina_value_02.c | ||
286 | eina_value_02_OBJECTS = eina_value_02.$(OBJEXT) | ||
287 | eina_value_02_LDADD = $(LDADD) | ||
288 | eina_value_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
289 | eina_value_03_SOURCES = eina_value_03.c | ||
290 | eina_value_03_OBJECTS = eina_value_03.$(OBJEXT) | ||
291 | eina_value_03_LDADD = $(LDADD) | ||
292 | eina_value_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la | ||
231 | DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) | 293 | DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) |
232 | depcomp = $(SHELL) $(top_srcdir)/depcomp | 294 | depcomp = $(SHELL) $(top_srcdir)/depcomp |
233 | am__depfiles_maybe = depfiles | 295 | am__depfiles_maybe = depfiles |
@@ -257,19 +319,25 @@ am__v_GEN_0 = @echo " GEN " $@; | |||
257 | SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ | 319 | SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ |
258 | eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ | 320 | eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ |
259 | eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ | 321 | eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ |
260 | eina_hash_07.c eina_hash_08.c eina_inlist_01.c \ | 322 | eina_hash_07.c eina_hash_08.c eina_inarray_01.c \ |
261 | eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \ | 323 | eina_inlist_01.c eina_inlist_02.c eina_inlist_03.c \ |
262 | eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \ | 324 | eina_iterator_01.c eina_list_01.c eina_list_02.c \ |
263 | eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \ | 325 | eina_list_03.c eina_list_04.c eina_log_01.c eina_log_02.c \ |
264 | eina_strbuf_01.c eina_tiler_01.c | 326 | eina_log_03.c eina_model_01.c eina_model_02.c eina_model_03.c \ |
327 | $(eina_model_04_SOURCES) eina_str_01.c eina_strbuf_01.c \ | ||
328 | eina_tiler_01.c eina_value_01.c eina_value_02.c \ | ||
329 | eina_value_03.c | ||
265 | DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ | 330 | DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ |
266 | eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ | 331 | eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ |
267 | eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ | 332 | eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ |
268 | eina_hash_07.c eina_hash_08.c eina_inlist_01.c \ | 333 | eina_hash_07.c eina_hash_08.c eina_inarray_01.c \ |
269 | eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \ | 334 | eina_inlist_01.c eina_inlist_02.c eina_inlist_03.c \ |
270 | eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \ | 335 | eina_iterator_01.c eina_list_01.c eina_list_02.c \ |
271 | eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \ | 336 | eina_list_03.c eina_list_04.c eina_log_01.c eina_log_02.c \ |
272 | eina_strbuf_01.c eina_tiler_01.c | 337 | eina_log_03.c eina_model_01.c eina_model_02.c eina_model_03.c \ |
338 | $(am__eina_model_04_SOURCES_DIST) eina_str_01.c \ | ||
339 | eina_strbuf_01.c eina_tiler_01.c eina_value_01.c \ | ||
340 | eina_value_02.c eina_value_03.c | ||
273 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; | 341 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; |
274 | am__vpath_adj = case $$p in \ | 342 | am__vpath_adj = case $$p in \ |
275 | $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ | 343 | $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ |
@@ -340,13 +408,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
340 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 408 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
341 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 409 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
342 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 410 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
411 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
343 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 412 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
344 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 413 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
345 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 414 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
346 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 415 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
347 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 416 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
348 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 417 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
349 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
350 | EINA_LIBS = @EINA_LIBS@ | 418 | EINA_LIBS = @EINA_LIBS@ |
351 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 419 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
352 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 420 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -356,6 +424,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
356 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 424 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
357 | EVIL_LIBS = @EVIL_LIBS@ | 425 | EVIL_LIBS = @EVIL_LIBS@ |
358 | EXEEXT = @EXEEXT@ | 426 | EXEEXT = @EXEEXT@ |
427 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
428 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
359 | FGREP = @FGREP@ | 429 | FGREP = @FGREP@ |
360 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 430 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
361 | GLIB_LIBS = @GLIB_LIBS@ | 431 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -391,6 +461,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
391 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 461 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
392 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 462 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
393 | PKG_CONFIG = @PKG_CONFIG@ | 463 | PKG_CONFIG = @PKG_CONFIG@ |
464 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
465 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
394 | RANLIB = @RANLIB@ | 466 | RANLIB = @RANLIB@ |
395 | SED = @SED@ | 467 | SED = @SED@ |
396 | SET_MAKE = @SET_MAKE@ | 468 | SET_MAKE = @SET_MAKE@ |
@@ -498,10 +570,25 @@ SRCS = \ | |||
498 | eina_inlist_03.c \ | 570 | eina_inlist_03.c \ |
499 | eina_str_01.c \ | 571 | eina_str_01.c \ |
500 | eina_strbuf_01.c \ | 572 | eina_strbuf_01.c \ |
501 | eina_tiler_01.c | 573 | eina_tiler_01.c \ |
574 | eina_model_01.c \ | ||
575 | eina_model_02.c \ | ||
576 | eina_model_03.c \ | ||
577 | eina_value_01.c \ | ||
578 | eina_value_02.c \ | ||
579 | eina_value_03.c \ | ||
580 | eina_inarray_01.c | ||
502 | 581 | ||
503 | @EFL_INSTALL_EXAMPLES_TRUE@filesdir = $(datadir)/$(PACKAGE)/examples | 582 | @EFL_INSTALL_EXAMPLES_TRUE@filesdir = $(datadir)/$(PACKAGE)/examples |
504 | @EFL_INSTALL_EXAMPLES_TRUE@files_DATA = $(SRCS) | 583 | @EFL_INSTALL_EXAMPLES_TRUE@files_DATA = $(SRCS) |
584 | @EFL_BUILD_EXAMPLES_TRUE@eina_model_04_SOURCES = \ | ||
585 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_animal.c \ | ||
586 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_child.c \ | ||
587 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_human.c \ | ||
588 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_main.c \ | ||
589 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_parrot.c \ | ||
590 | @EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_whistler.c | ||
591 | |||
505 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@ | 592 | @BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@ |
506 | all: all-am | 593 | all: all-am |
507 | 594 | ||
@@ -619,6 +706,9 @@ eina_hash_07$(EXEEXT): $(eina_hash_07_OBJECTS) $(eina_hash_07_DEPENDENCIES) | |||
619 | eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES) | 706 | eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES) |
620 | @rm -f eina_hash_08$(EXEEXT) | 707 | @rm -f eina_hash_08$(EXEEXT) |
621 | $(AM_V_CCLD)$(LINK) $(eina_hash_08_OBJECTS) $(eina_hash_08_LDADD) $(LIBS) | 708 | $(AM_V_CCLD)$(LINK) $(eina_hash_08_OBJECTS) $(eina_hash_08_LDADD) $(LIBS) |
709 | eina_inarray_01$(EXEEXT): $(eina_inarray_01_OBJECTS) $(eina_inarray_01_DEPENDENCIES) | ||
710 | @rm -f eina_inarray_01$(EXEEXT) | ||
711 | $(AM_V_CCLD)$(LINK) $(eina_inarray_01_OBJECTS) $(eina_inarray_01_LDADD) $(LIBS) | ||
622 | eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES) | 712 | eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES) |
623 | @rm -f eina_inlist_01$(EXEEXT) | 713 | @rm -f eina_inlist_01$(EXEEXT) |
624 | $(AM_V_CCLD)$(LINK) $(eina_inlist_01_OBJECTS) $(eina_inlist_01_LDADD) $(LIBS) | 714 | $(AM_V_CCLD)$(LINK) $(eina_inlist_01_OBJECTS) $(eina_inlist_01_LDADD) $(LIBS) |
@@ -652,6 +742,18 @@ eina_log_02$(EXEEXT): $(eina_log_02_OBJECTS) $(eina_log_02_DEPENDENCIES) | |||
652 | eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES) | 742 | eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES) |
653 | @rm -f eina_log_03$(EXEEXT) | 743 | @rm -f eina_log_03$(EXEEXT) |
654 | $(AM_V_CCLD)$(LINK) $(eina_log_03_OBJECTS) $(eina_log_03_LDADD) $(LIBS) | 744 | $(AM_V_CCLD)$(LINK) $(eina_log_03_OBJECTS) $(eina_log_03_LDADD) $(LIBS) |
745 | eina_model_01$(EXEEXT): $(eina_model_01_OBJECTS) $(eina_model_01_DEPENDENCIES) | ||
746 | @rm -f eina_model_01$(EXEEXT) | ||
747 | $(AM_V_CCLD)$(LINK) $(eina_model_01_OBJECTS) $(eina_model_01_LDADD) $(LIBS) | ||
748 | eina_model_02$(EXEEXT): $(eina_model_02_OBJECTS) $(eina_model_02_DEPENDENCIES) | ||
749 | @rm -f eina_model_02$(EXEEXT) | ||
750 | $(AM_V_CCLD)$(LINK) $(eina_model_02_OBJECTS) $(eina_model_02_LDADD) $(LIBS) | ||
751 | eina_model_03$(EXEEXT): $(eina_model_03_OBJECTS) $(eina_model_03_DEPENDENCIES) | ||
752 | @rm -f eina_model_03$(EXEEXT) | ||
753 | $(AM_V_CCLD)$(LINK) $(eina_model_03_OBJECTS) $(eina_model_03_LDADD) $(LIBS) | ||
754 | eina_model_04$(EXEEXT): $(eina_model_04_OBJECTS) $(eina_model_04_DEPENDENCIES) | ||
755 | @rm -f eina_model_04$(EXEEXT) | ||
756 | $(AM_V_CCLD)$(LINK) $(eina_model_04_OBJECTS) $(eina_model_04_LDADD) $(LIBS) | ||
655 | eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES) | 757 | eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES) |
656 | @rm -f eina_str_01$(EXEEXT) | 758 | @rm -f eina_str_01$(EXEEXT) |
657 | $(AM_V_CCLD)$(LINK) $(eina_str_01_OBJECTS) $(eina_str_01_LDADD) $(LIBS) | 759 | $(AM_V_CCLD)$(LINK) $(eina_str_01_OBJECTS) $(eina_str_01_LDADD) $(LIBS) |
@@ -661,6 +763,15 @@ eina_strbuf_01$(EXEEXT): $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_DEPENDENCIES | |||
661 | eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES) | 763 | eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES) |
662 | @rm -f eina_tiler_01$(EXEEXT) | 764 | @rm -f eina_tiler_01$(EXEEXT) |
663 | $(AM_V_CCLD)$(LINK) $(eina_tiler_01_OBJECTS) $(eina_tiler_01_LDADD) $(LIBS) | 765 | $(AM_V_CCLD)$(LINK) $(eina_tiler_01_OBJECTS) $(eina_tiler_01_LDADD) $(LIBS) |
766 | eina_value_01$(EXEEXT): $(eina_value_01_OBJECTS) $(eina_value_01_DEPENDENCIES) | ||
767 | @rm -f eina_value_01$(EXEEXT) | ||
768 | $(AM_V_CCLD)$(LINK) $(eina_value_01_OBJECTS) $(eina_value_01_LDADD) $(LIBS) | ||
769 | eina_value_02$(EXEEXT): $(eina_value_02_OBJECTS) $(eina_value_02_DEPENDENCIES) | ||
770 | @rm -f eina_value_02$(EXEEXT) | ||
771 | $(AM_V_CCLD)$(LINK) $(eina_value_02_OBJECTS) $(eina_value_02_LDADD) $(LIBS) | ||
772 | eina_value_03$(EXEEXT): $(eina_value_03_OBJECTS) $(eina_value_03_DEPENDENCIES) | ||
773 | @rm -f eina_value_03$(EXEEXT) | ||
774 | $(AM_V_CCLD)$(LINK) $(eina_value_03_OBJECTS) $(eina_value_03_LDADD) $(LIBS) | ||
664 | 775 | ||
665 | mostlyclean-compile: | 776 | mostlyclean-compile: |
666 | -rm -f *.$(OBJEXT) | 777 | -rm -f *.$(OBJEXT) |
@@ -681,6 +792,7 @@ distclean-compile: | |||
681 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_06.Po@am__quote@ | 792 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_06.Po@am__quote@ |
682 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_07.Po@am__quote@ | 793 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_07.Po@am__quote@ |
683 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_08.Po@am__quote@ | 794 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_08.Po@am__quote@ |
795 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inarray_01.Po@am__quote@ | ||
684 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_01.Po@am__quote@ | 796 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_01.Po@am__quote@ |
685 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_02.Po@am__quote@ | 797 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_02.Po@am__quote@ |
686 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_03.Po@am__quote@ | 798 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_03.Po@am__quote@ |
@@ -692,9 +804,21 @@ distclean-compile: | |||
692 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_01.Po@am__quote@ | 804 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_01.Po@am__quote@ |
693 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_02.Po@am__quote@ | 805 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_02.Po@am__quote@ |
694 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_03.Po@am__quote@ | 806 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_03.Po@am__quote@ |
807 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_01.Po@am__quote@ | ||
808 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_02.Po@am__quote@ | ||
809 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_03.Po@am__quote@ | ||
810 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_animal.Po@am__quote@ | ||
811 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_child.Po@am__quote@ | ||
812 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_human.Po@am__quote@ | ||
813 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_main.Po@am__quote@ | ||
814 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_parrot.Po@am__quote@ | ||
815 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_whistler.Po@am__quote@ | ||
695 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_str_01.Po@am__quote@ | 816 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_str_01.Po@am__quote@ |
696 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_strbuf_01.Po@am__quote@ | 817 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_strbuf_01.Po@am__quote@ |
697 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_tiler_01.Po@am__quote@ | 818 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_tiler_01.Po@am__quote@ |
819 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_01.Po@am__quote@ | ||
820 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_02.Po@am__quote@ | ||
821 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_03.Po@am__quote@ | ||
698 | 822 | ||
699 | .c.o: | 823 | .c.o: |
700 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | 824 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< |
diff --git a/libraries/eina/src/examples/eina_accessor_01.c b/libraries/eina/src/examples/eina_accessor_01.c index c48fdc6..da413c6 100644 --- a/libraries/eina/src/examples/eina_accessor_01.c +++ b/libraries/eina/src/examples/eina_accessor_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_accessor_01.c -o eina_accessor_01 | 2 | //gcc -g eina_accessor_01.c -o eina_accessor_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | 5 | ||
diff --git a/libraries/eina/src/examples/eina_array_01.c b/libraries/eina/src/examples/eina_array_01.c index d93eb35..1bae809 100644 --- a/libraries/eina/src/examples/eina_array_01.c +++ b/libraries/eina/src/examples/eina_array_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_array_01.c -o eina_array_01 | 2 | //gcc -g eina_array_01.c -o eina_array_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <string.h> | 5 | #include <string.h> |
diff --git a/libraries/eina/src/examples/eina_array_02.c b/libraries/eina/src/examples/eina_array_02.c index e897321..6b2903b 100644 --- a/libraries/eina/src/examples/eina_array_02.c +++ b/libraries/eina/src/examples/eina_array_02.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_array_02.c -o eina_array_02 | 2 | //gcc -g eina_array_02.c -o eina_array_02 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <string.h> | 5 | #include <string.h> |
diff --git a/libraries/eina/src/examples/eina_error_01.c b/libraries/eina/src/examples/eina_error_01.c index 90e845d..e264aee 100644 --- a/libraries/eina/src/examples/eina_error_01.c +++ b/libraries/eina/src/examples/eina_error_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_error_01.c -o eina_error_01 | 2 | //gcc -g eina_error_01.c -o eina_error_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdlib.h> | 4 | #include <stdlib.h> |
5 | #include <stdio.h> | 5 | #include <stdio.h> |
@@ -77,4 +77,4 @@ int main(void) | |||
77 | eina_shutdown(); | 77 | eina_shutdown(); |
78 | 78 | ||
79 | return EXIT_SUCCESS; | 79 | return EXIT_SUCCESS; |
80 | } \ No newline at end of file | 80 | } |
diff --git a/libraries/eina/src/examples/eina_file_01.c b/libraries/eina/src/examples/eina_file_01.c index 6490b62..2c945b3 100644 --- a/libraries/eina/src/examples/eina_file_01.c +++ b/libraries/eina/src/examples/eina_file_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_file_01.c -o eina_file_01 | 2 | //gcc -g eina_file_01.c -o eina_file_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <Eina.h> | 5 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_01.c b/libraries/eina/src/examples/eina_hash_01.c index 549ca80..16418fe 100644 --- a/libraries/eina/src/examples/eina_hash_01.c +++ b/libraries/eina/src/examples/eina_hash_01.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_01.c -o eina_hash_01 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_02.c b/libraries/eina/src/examples/eina_hash_02.c index d43d7a3..7baec93 100644 --- a/libraries/eina/src/examples/eina_hash_02.c +++ b/libraries/eina/src/examples/eina_hash_02.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_02.c -o eina_hash_02 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_03.c b/libraries/eina/src/examples/eina_hash_03.c index 719d0d7..ba543d4 100644 --- a/libraries/eina/src/examples/eina_hash_03.c +++ b/libraries/eina/src/examples/eina_hash_03.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_03.c -o eina_hash_03 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_04.c b/libraries/eina/src/examples/eina_hash_04.c index e900475..da73e04 100644 --- a/libraries/eina/src/examples/eina_hash_04.c +++ b/libraries/eina/src/examples/eina_hash_04.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_04.c -o eina_hash_04 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_05.c b/libraries/eina/src/examples/eina_hash_05.c index f8dbf78..6666ce2 100644 --- a/libraries/eina/src/examples/eina_hash_05.c +++ b/libraries/eina/src/examples/eina_hash_05.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_05.c -o eina_hash_05 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_06.c b/libraries/eina/src/examples/eina_hash_06.c index 99a2bd7..6e3c451 100644 --- a/libraries/eina/src/examples/eina_hash_06.c +++ b/libraries/eina/src/examples/eina_hash_06.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_06.c -o eina_hash_06 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_07.c b/libraries/eina/src/examples/eina_hash_07.c index b3e486a..1464e6b 100644 --- a/libraries/eina/src/examples/eina_hash_07.c +++ b/libraries/eina/src/examples/eina_hash_07.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_07.c -o eina_hash_07 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_hash_08.c b/libraries/eina/src/examples/eina_hash_08.c index 368a2fb..ed45f7f 100644 --- a/libraries/eina/src/examples/eina_hash_08.c +++ b/libraries/eina/src/examples/eina_hash_08.c | |||
@@ -1,3 +1,6 @@ | |||
1 | //Compile with: | ||
2 | //gcc -g eina_hash_08.c -o eina_hash_08 `pkg-config --cflags --libs eina` | ||
3 | |||
1 | #include <stdio.h> | 4 | #include <stdio.h> |
2 | #include <string.h> | 5 | #include <string.h> |
3 | #include <Eina.h> | 6 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_inlist_01.c b/libraries/eina/src/examples/eina_inlist_01.c index fa51553..6c6c794 100644 --- a/libraries/eina/src/examples/eina_inlist_01.c +++ b/libraries/eina/src/examples/eina_inlist_01.c | |||
@@ -1,5 +1,6 @@ | |||
1 | // Compile with: | 1 | // Compile with: |
2 | // gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 | 2 | // gcc -g eina_inlist_01.c -o eina_inlist_01 `pkg-config --cflags --libs eina` |
3 | |||
3 | #include <Eina.h> | 4 | #include <Eina.h> |
4 | #include <stdio.h> | 5 | #include <stdio.h> |
5 | 6 | ||
diff --git a/libraries/eina/src/examples/eina_inlist_02.c b/libraries/eina/src/examples/eina_inlist_02.c index 7d23f13..4c16ec6 100644 --- a/libraries/eina/src/examples/eina_inlist_02.c +++ b/libraries/eina/src/examples/eina_inlist_02.c | |||
@@ -1,5 +1,6 @@ | |||
1 | // Compile with: | 1 | // Compile with: |
2 | // gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 | 2 | // gcc -g eina_inlist_02.c -o eina_inlist_02 `pkg-config --cflags --libs eina` |
3 | |||
3 | #include <Eina.h> | 4 | #include <Eina.h> |
4 | #include <stdio.h> | 5 | #include <stdio.h> |
5 | 6 | ||
diff --git a/libraries/eina/src/examples/eina_inlist_03.c b/libraries/eina/src/examples/eina_inlist_03.c index a39a784..28706d5 100644 --- a/libraries/eina/src/examples/eina_inlist_03.c +++ b/libraries/eina/src/examples/eina_inlist_03.c | |||
@@ -1,5 +1,6 @@ | |||
1 | // Compile with: | 1 | // Compile with: |
2 | // gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 | 2 | // gcc -g eina_inlist_03.c -o eina_inlist_03 `pkg-config --cflags --libs eina` |
3 | |||
3 | #include <Eina.h> | 4 | #include <Eina.h> |
4 | #include <stdio.h> | 5 | #include <stdio.h> |
5 | 6 | ||
diff --git a/libraries/eina/src/examples/eina_iterator_01.c b/libraries/eina/src/examples/eina_iterator_01.c index f467f90..88c40cc 100644 --- a/libraries/eina/src/examples/eina_iterator_01.c +++ b/libraries/eina/src/examples/eina_iterator_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_iterator_01.c -o eina_iterator_01 | 2 | //gcc -g eina_iterator_01.c -o eina_iterator_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | 5 | ||
diff --git a/libraries/eina/src/examples/eina_list_01.c b/libraries/eina/src/examples/eina_list_01.c index 7807791..4fcb020 100644 --- a/libraries/eina/src/examples/eina_list_01.c +++ b/libraries/eina/src/examples/eina_list_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_list_01.c -o eina_list_01 | 2 | //gcc -g eina_list_01.c -o eina_list_01 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <Eina.h> | 5 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_list_02.c b/libraries/eina/src/examples/eina_list_02.c index 7def475..5fe31e8 100644 --- a/libraries/eina/src/examples/eina_list_02.c +++ b/libraries/eina/src/examples/eina_list_02.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_list_02.c -o eina_list_02 | 2 | //gcc -g eina_list_02.c -o eina_list_02 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <string.h> | 5 | #include <string.h> |
diff --git a/libraries/eina/src/examples/eina_list_03.c b/libraries/eina/src/examples/eina_list_03.c index 8e15b91..db53148 100644 --- a/libraries/eina/src/examples/eina_list_03.c +++ b/libraries/eina/src/examples/eina_list_03.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_list_03.c -o eina_list_03 | 2 | //gcc -g eina_list_03.c -o eina_list_03 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <Eina.h> | 5 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_list_04.c b/libraries/eina/src/examples/eina_list_04.c index c153c06..d92a607 100644 --- a/libraries/eina/src/examples/eina_list_04.c +++ b/libraries/eina/src/examples/eina_list_04.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc -g `pkg-config --cflags --libs eina` eina_list_04.c -o eina_list_04 | 2 | //gcc -g eina_list_04.c -o eina_list_04 `pkg-config --cflags --libs eina` |
3 | 3 | ||
4 | #include <stdio.h> | 4 | #include <stdio.h> |
5 | #include <Eina.h> | 5 | #include <Eina.h> |
diff --git a/libraries/eina/src/examples/eina_tiler_01.c b/libraries/eina/src/examples/eina_tiler_01.c index b2ff8be..6202a88 100644 --- a/libraries/eina/src/examples/eina_tiler_01.c +++ b/libraries/eina/src/examples/eina_tiler_01.c | |||
@@ -1,5 +1,5 @@ | |||
1 | //Compile with: | 1 | //Compile with: |
2 | //gcc `pkg-config --cflags --libs ecore-evas ecore evas` eina_tiler_01.c -o eina_tiler_01 | 2 | //gcc eina_tiler_01.c -o eina_tiler_01 `pkg-config --cflags --libs ecore-evas ecore evas eina` |
3 | 3 | ||
4 | #include <Ecore_Evas.h> | 4 | #include <Ecore_Evas.h> |
5 | #include <Ecore.h> | 5 | #include <Ecore.h> |
diff --git a/libraries/eina/src/include/Eina.h b/libraries/eina/src/include/Eina.h index 721a991..d99b129 100644 --- a/libraries/eina/src/include/Eina.h +++ b/libraries/eina/src/include/Eina.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* EINA - EFL data type library | 1 | /* EINA - EFL data type library |
2 | * Copyright (C) 2008-2011 Enlightenment Developers: | 2 | * Copyright (C) 2008-2012 Enlightenment Developers: |
3 | * Albin "Lutin" Tonnerre <albin.tonnerre@gmail.com> | 3 | * Albin "Lutin" Tonnerre <albin.tonnerre@gmail.com> |
4 | * Alexandre "diaxen" Becoulet <diaxen@free.fr> | 4 | * Alexandre "diaxen" Becoulet <diaxen@free.fr> |
5 | * Andre Dieb <andre.dieb@gmail.com> | 5 | * Andre Dieb <andre.dieb@gmail.com> |
@@ -16,6 +16,7 @@ | |||
16 | * Tilman Sauerbeck <tilman@code-monkey.de> | 16 | * Tilman Sauerbeck <tilman@code-monkey.de> |
17 | * Vincent "caro" Torri <vtorri at univ-evry dot fr> | 17 | * Vincent "caro" Torri <vtorri at univ-evry dot fr> |
18 | * Tom Hacohen <tom@stosb.com> | 18 | * Tom Hacohen <tom@stosb.com> |
19 | * Jonas M. Gastal <jgastal@profusion.mobi> | ||
19 | * | 20 | * |
20 | * This library is free software; you can redistribute it and/or | 21 | * This library is free software; you can redistribute it and/or |
21 | * modify it under the terms of the GNU Lesser General Public | 22 | * modify it under the terms of the GNU Lesser General Public |
@@ -46,7 +47,7 @@ | |||
46 | * @mainpage Eina | 47 | * @mainpage Eina |
47 | * | 48 | * |
48 | * @version 1.1 | 49 | * @version 1.1 |
49 | * @date 2008-2011 | 50 | * @date 2008-2012 |
50 | * | 51 | * |
51 | * @section eina_intro_sec Introduction | 52 | * @section eina_intro_sec Introduction |
52 | * | 53 | * |
@@ -72,6 +73,8 @@ | |||
72 | * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references. | 73 | * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references. |
73 | * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions. | 74 | * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions. |
74 | * @li @ref Eina_Trash_Group container of unused but allocated data. | 75 | * @li @ref Eina_Trash_Group container of unused but allocated data. |
76 | * @li @ref Eina_Value_Group container for generic value storage and access. | ||
77 | * @li @ref Eina_Model_Group container for data with user defined hierarchy/structure. | ||
75 | * | 78 | * |
76 | * The tools that are available are (see @ref Eina_Tools_Group): | 79 | * The tools that are available are (see @ref Eina_Tools_Group): |
77 | * @li @ref Eina_Benchmark_Group helper to write benchmarks. | 80 | * @li @ref Eina_Benchmark_Group helper to write benchmarks. |
@@ -101,6 +104,31 @@ | |||
101 | * their elements with an @ref Eina_Iterator_Group, or eventually an | 104 | * their elements with an @ref Eina_Iterator_Group, or eventually an |
102 | * @ref Eina_Accessor_Group. | 105 | * @ref Eina_Accessor_Group. |
103 | * | 106 | * |
107 | * The containers in eina are designed with performance in mind, one consequence | ||
108 | * of this is that they @b don't check the validity of data structures given to | ||
109 | * them(@ref Eina_Magic_Group). | ||
110 | * | ||
111 | * The choice of which container to use in each situation is very important in | ||
112 | * achieving good performance and readable code. The most common container types | ||
113 | * to be used are: | ||
114 | * @li List | ||
115 | * @li Inline list | ||
116 | * @li Array | ||
117 | * @li Inline array | ||
118 | * @li Hash | ||
119 | * | ||
120 | * All types have virtues and vices. The following considerations are good | ||
121 | * starting point in deciding which container to use: | ||
122 | * @li Hashes are appropriate for datasets which will be searched often; | ||
123 | * @li arrays are good when accessing members by position; | ||
124 | * @li lists provide good versatility for adding elements in any position with | ||
125 | * minimal overhead; | ||
126 | * @li inline arrays use very little memory and don't cause fragmentation and | ||
127 | * therefore are a good option in memory constrained systems; | ||
128 | * @li inline lists are the appropriate type to use when the flexibility of a | ||
129 | * list is required but the overhead of pointer indirection is not acceptable. | ||
130 | * @warning These are general considerations, every situation is different, | ||
131 | * don't follow these recommendations blindly. | ||
104 | * | 132 | * |
105 | * @defgroup Eina_Tools_Group Tools | 133 | * @defgroup Eina_Tools_Group Tools |
106 | * | 134 | * |
@@ -120,15 +148,22 @@ | |||
120 | * @author Carsten Haitzler <raster@@rasterman.com> | 148 | * @author Carsten Haitzler <raster@@rasterman.com> |
121 | * @author Cedric Bail <cedric.bail@@free.fr> | 149 | * @author Cedric Bail <cedric.bail@@free.fr> |
122 | * @author Corey "atmos" Donohoe <atmos@@atmos.org> | 150 | * @author Corey "atmos" Donohoe <atmos@@atmos.org> |
151 | * @author Vincent "caro" Torri <vtorri at univ-evry dot fr> | ||
123 | * @author Fabiano Fidêncio <fidencio@@profusion.mobi> | 152 | * @author Fabiano Fidêncio <fidencio@@profusion.mobi> |
124 | * @author Gustavo Chaves <glima@@profusion.mobi> | 153 | * @author Gustavo Chaves <glima@@profusion.mobi> |
125 | * @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi> | 154 | * @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi> |
126 | * @author Jorge Luis "turran" Zapata <jorgeluis.zapata@@gmail.com> | 155 | * @author Jorge Luis "turran" Zapata <jorgeluis.zapata@@gmail.com> |
156 | * @author Tilman Sauerbeck <tilman@@code-monkey.de> | ||
127 | * @author Peter "pfritz" Wehrfritz <peter.wehrfritz@@web.de> | 157 | * @author Peter "pfritz" Wehrfritz <peter.wehrfritz@@web.de> |
128 | * @author Raphael Kubo da Costa <kubo@@profusion.mobi> | 158 | * @author Raphael Kubo da Costa <kubo@@profusion.mobi> |
129 | * @author Tilman Sauerbeck <tilman@@code-monkey.de> | ||
130 | * @author Vincent "caro" Torri <vtorri at univ-evry dot fr> | ||
131 | * @author Tom Hacohen <tom@@stosb.com> | 159 | * @author Tom Hacohen <tom@@stosb.com> |
160 | * @author Brett Nash <nash@@nash.id.au> | ||
161 | * @author Sebastian Dransfeld <sd@@tango.flipp.net> | ||
162 | * @author Myungjae Lee <mjae.lee@@samsung.com> | ||
163 | * @author Youness Alaoui <kakaroto@@kakaroto.homelinux.net> | ||
164 | * @author Boris "billiob" Faure <billiob@@gmail.com> | ||
165 | * @author Sung W. Park <sungwoo@@gmail.com> | ||
166 | * @author Guillaume Friloux <guillaume.friloux@@asp64.com> | ||
132 | * | 167 | * |
133 | * Please contact <enlightenment-devel@lists.sourceforge.net> to get in | 168 | * Please contact <enlightenment-devel@lists.sourceforge.net> to get in |
134 | * contact with the developers and maintainers. | 169 | * contact with the developers and maintainers. |
@@ -189,6 +224,7 @@ extern "C" { | |||
189 | #include "eina_mmap.h" | 224 | #include "eina_mmap.h" |
190 | #include "eina_xattr.h" | 225 | #include "eina_xattr.h" |
191 | #include "eina_value.h" | 226 | #include "eina_value.h" |
227 | #include "eina_model.h" | ||
192 | 228 | ||
193 | #ifdef __cplusplus | 229 | #ifdef __cplusplus |
194 | } | 230 | } |
diff --git a/libraries/eina/src/include/Makefile.am b/libraries/eina/src/include/Makefile.am index a818d5f..31ef71e 100644 --- a/libraries/eina/src/include/Makefile.am +++ b/libraries/eina/src/include/Makefile.am | |||
@@ -64,7 +64,8 @@ eina_refcount.h \ | |||
64 | eina_mmap.h \ | 64 | eina_mmap.h \ |
65 | eina_xattr.h \ | 65 | eina_xattr.h \ |
66 | eina_value.h \ | 66 | eina_value.h \ |
67 | eina_inline_value.x | 67 | eina_inline_value.x \ |
68 | eina_model.h | ||
68 | 69 | ||
69 | # Will be back for developper after 1.1. | 70 | # Will be back for developper after 1.1. |
70 | # eina_object.h | 71 | # eina_object.h |
diff --git a/libraries/eina/src/include/Makefile.in b/libraries/eina/src/include/Makefile.in index ea922e5..7e819b8 100644 --- a/libraries/eina/src/include/Makefile.in +++ b/libraries/eina/src/include/Makefile.in | |||
@@ -46,20 +46,24 @@ DIST_COMMON = $(am__dist_installed_headers_DATA_DIST) \ | |||
46 | $(dist_installed_mainheader_DATA) $(srcdir)/Makefile.am \ | 46 | $(dist_installed_mainheader_DATA) $(srcdir)/Makefile.am \ |
47 | $(srcdir)/Makefile.in $(srcdir)/eina_config.h.in | 47 | $(srcdir)/Makefile.in $(srcdir)/eina_config.h.in |
48 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 48 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
49 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 49 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
50 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 50 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
51 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 51 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
52 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 52 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
53 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 53 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
54 | $(top_srcdir)/m4/efl_examples.m4 \ | 54 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
55 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 55 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
56 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 56 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
57 | $(top_srcdir)/m4/efl_threads.m4 \ | 57 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
58 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 58 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
59 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 59 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
60 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 60 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
61 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 61 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
62 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 62 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
63 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
64 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
65 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
66 | $(top_srcdir)/configure.ac | ||
63 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 67 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
64 | $(ACLOCAL_M4) | 68 | $(ACLOCAL_M4) |
65 | mkinstalldirs = $(install_sh) -d | 69 | mkinstalldirs = $(install_sh) -d |
@@ -93,9 +97,9 @@ am__dist_installed_headers_DATA_DIST = eina_safety_checks.h \ | |||
93 | eina_inline_str.x eina_strbuf.h eina_ustrbuf.h eina_unicode.h \ | 97 | eina_inline_str.x eina_strbuf.h eina_ustrbuf.h eina_unicode.h \ |
94 | eina_quadtree.h eina_simple_xml_parser.h eina_lock.h \ | 98 | eina_quadtree.h eina_simple_xml_parser.h eina_lock.h \ |
95 | eina_prefix.h eina_refcount.h eina_mmap.h eina_xattr.h \ | 99 | eina_prefix.h eina_refcount.h eina_mmap.h eina_xattr.h \ |
96 | eina_value.h eina_inline_value.x eina_inline_lock_wince.x \ | 100 | eina_value.h eina_inline_value.x eina_model.h \ |
97 | eina_inline_lock_win32.x eina_inline_lock_posix.x \ | 101 | eina_inline_lock_wince.x eina_inline_lock_win32.x \ |
98 | eina_inline_lock_void.x | 102 | eina_inline_lock_posix.x eina_inline_lock_void.x |
99 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; | 103 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; |
100 | am__vpath_adj = case $$p in \ | 104 | am__vpath_adj = case $$p in \ |
101 | $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ | 105 | $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ |
@@ -167,13 +171,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
167 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 171 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
168 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 172 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
169 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 173 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
174 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
170 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 175 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
171 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 176 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
172 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 177 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
173 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 178 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
174 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 179 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
175 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 180 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
176 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
177 | EINA_LIBS = @EINA_LIBS@ | 181 | EINA_LIBS = @EINA_LIBS@ |
178 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 182 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
179 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 183 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -183,6 +187,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
183 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 187 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
184 | EVIL_LIBS = @EVIL_LIBS@ | 188 | EVIL_LIBS = @EVIL_LIBS@ |
185 | EXEEXT = @EXEEXT@ | 189 | EXEEXT = @EXEEXT@ |
190 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
191 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
186 | FGREP = @FGREP@ | 192 | FGREP = @FGREP@ |
187 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 193 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
188 | GLIB_LIBS = @GLIB_LIBS@ | 194 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -218,6 +224,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
218 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 224 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
219 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 225 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
220 | PKG_CONFIG = @PKG_CONFIG@ | 226 | PKG_CONFIG = @PKG_CONFIG@ |
227 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
228 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
221 | RANLIB = @RANLIB@ | 229 | RANLIB = @RANLIB@ |
222 | SED = @SED@ | 230 | SED = @SED@ |
223 | SET_MAKE = @SET_MAKE@ | 231 | SET_MAKE = @SET_MAKE@ |
@@ -311,8 +319,8 @@ EINAHEADERS = eina_safety_checks.h eina_error.h eina_log.h \ | |||
311 | eina_ustrbuf.h eina_unicode.h eina_quadtree.h \ | 319 | eina_ustrbuf.h eina_unicode.h eina_quadtree.h \ |
312 | eina_simple_xml_parser.h eina_lock.h eina_prefix.h \ | 320 | eina_simple_xml_parser.h eina_lock.h eina_prefix.h \ |
313 | eina_refcount.h eina_mmap.h eina_xattr.h eina_value.h \ | 321 | eina_refcount.h eina_mmap.h eina_xattr.h eina_value.h \ |
314 | eina_inline_value.x $(am__append_1) $(am__append_2) \ | 322 | eina_inline_value.x eina_model.h $(am__append_1) \ |
315 | $(am__append_3) $(am__append_4) | 323 | $(am__append_2) $(am__append_3) $(am__append_4) |
316 | installed_mainheaderdir = $(includedir)/eina-@VMAJ@ | 324 | installed_mainheaderdir = $(includedir)/eina-@VMAJ@ |
317 | dist_installed_mainheader_DATA = Eina.h eina_config.h | 325 | dist_installed_mainheader_DATA = Eina.h eina_config.h |
318 | installed_headersdir = $(includedir)/eina-@VMAJ@/eina | 326 | installed_headersdir = $(includedir)/eina-@VMAJ@/eina |
diff --git a/libraries/eina/src/include/eina_array.h b/libraries/eina/src/include/eina_array.h index 53183b4..4ab3b50 100644 --- a/libraries/eina/src/include/eina_array.h +++ b/libraries/eina/src/include/eina_array.h | |||
@@ -351,7 +351,7 @@ static inline void *eina_array_data_get(const Eina_Array *array, | |||
351 | static inline void eina_array_data_set(const Eina_Array *array, | 351 | static inline void eina_array_data_set(const Eina_Array *array, |
352 | unsigned int idx, | 352 | unsigned int idx, |
353 | const void *data) EINA_ARG_NONNULL(1); | 353 | const void *data) EINA_ARG_NONNULL(1); |
354 | static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED; | 354 | static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; |
355 | static inline unsigned int eina_array_count(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; | 355 | static inline unsigned int eina_array_count(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; |
356 | 356 | ||
357 | /** | 357 | /** |
diff --git a/libraries/eina/src/include/eina_config.h b/libraries/eina/src/include/eina_config.h index 474edaa..b1108b6 100644 --- a/libraries/eina/src/include/eina_config.h +++ b/libraries/eina/src/include/eina_config.h | |||
@@ -19,6 +19,15 @@ | |||
19 | #ifndef EINA_CONFIG_H_ | 19 | #ifndef EINA_CONFIG_H_ |
20 | #define EINA_CONFIG_H_ | 20 | #define EINA_CONFIG_H_ |
21 | 21 | ||
22 | #ifdef EINA_HAVE_EXOTIC_H | ||
23 | # undef EINA_HAVE_EXOTIC_H | ||
24 | #endif | ||
25 | |||
26 | |||
27 | #ifdef EINA_HAVE_EXOTIC | ||
28 | # include <Exotic.h> | ||
29 | #endif | ||
30 | |||
22 | #ifdef EINA_MAGIC_DEBUG | 31 | #ifdef EINA_MAGIC_DEBUG |
23 | # undef EINA_MAGIC_DEBUG | 32 | # undef EINA_MAGIC_DEBUG |
24 | #endif | 33 | #endif |
diff --git a/libraries/eina/src/include/eina_config.h.in b/libraries/eina/src/include/eina_config.h.in index 2459ace..937d208 100644 --- a/libraries/eina/src/include/eina_config.h.in +++ b/libraries/eina/src/include/eina_config.h.in | |||
@@ -19,6 +19,15 @@ | |||
19 | #ifndef EINA_CONFIG_H_ | 19 | #ifndef EINA_CONFIG_H_ |
20 | #define EINA_CONFIG_H_ | 20 | #define EINA_CONFIG_H_ |
21 | 21 | ||
22 | #ifdef EINA_HAVE_EXOTIC_H | ||
23 | # undef EINA_HAVE_EXOTIC_H | ||
24 | #endif | ||
25 | @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
26 | |||
27 | #ifdef EINA_HAVE_EXOTIC | ||
28 | # include <Exotic.h> | ||
29 | #endif | ||
30 | |||
22 | #ifdef EINA_MAGIC_DEBUG | 31 | #ifdef EINA_MAGIC_DEBUG |
23 | # undef EINA_MAGIC_DEBUG | 32 | # undef EINA_MAGIC_DEBUG |
24 | #endif | 33 | #endif |
diff --git a/libraries/eina/src/include/eina_error.h b/libraries/eina/src/include/eina_error.h index 2b0ae77..dd87edf 100644 --- a/libraries/eina/src/include/eina_error.h +++ b/libraries/eina/src/include/eina_error.h | |||
@@ -180,7 +180,7 @@ EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE; | |||
180 | 180 | ||
181 | /** | 181 | /** |
182 | * @brief Find the #Eina_Error corresponding to a message string | 182 | * @brief Find the #Eina_Error corresponding to a message string |
183 | * @param msg The error message string to match (NOT #NULL) | 183 | * @param msg The error message string to match (NOT @c NULL) |
184 | * @return The #Eina_Error matching @p msg, or 0 on failure | 184 | * @return The #Eina_Error matching @p msg, or 0 on failure |
185 | * This function attempts to match @p msg with its corresponding #Eina_Error value. | 185 | * This function attempts to match @p msg with its corresponding #Eina_Error value. |
186 | * If no such value is found, 0 is returned. | 186 | * If no such value is found, 0 is returned. |
diff --git a/libraries/eina/src/include/eina_file.h b/libraries/eina/src/include/eina_file.h index 422fb65..1af22af 100644 --- a/libraries/eina/src/include/eina_file.h +++ b/libraries/eina/src/include/eina_file.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <limits.h> | 23 | #include <limits.h> |
24 | #include <time.h> | 24 | #include <time.h> |
25 | #include <sys/stat.h> | ||
25 | 26 | ||
26 | #include "eina_types.h" | 27 | #include "eina_types.h" |
27 | #include "eina_array.h" | 28 | #include "eina_array.h" |
@@ -91,6 +92,13 @@ | |||
91 | typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; | 92 | typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; |
92 | 93 | ||
93 | /** | 94 | /** |
95 | * @typedef Eina_Stat | ||
96 | * A typedef to #_Eina_Stat. | ||
97 | * @since 1.2 | ||
98 | */ | ||
99 | typedef struct _Eina_Stat Eina_Stat; | ||
100 | |||
101 | /** | ||
94 | * @typedef Eina_File_Dir_List_Cb | 102 | * @typedef Eina_File_Dir_List_Cb |
95 | * Type for a callback to be called when iterating over the files of a | 103 | * Type for a callback to be called when iterating over the files of a |
96 | * directory. | 104 | * directory. |
@@ -149,6 +157,31 @@ struct _Eina_File_Direct_Info | |||
149 | }; | 157 | }; |
150 | 158 | ||
151 | /** | 159 | /** |
160 | * @struct _Eina_Stat | ||
161 | * A structure to store informations of a path. | ||
162 | * @since 1.2 | ||
163 | */ | ||
164 | struct _Eina_Stat | ||
165 | { | ||
166 | unsigned long int dev; | ||
167 | unsigned long int ino; | ||
168 | unsigned int mode; | ||
169 | unsigned int nlink; | ||
170 | unsigned int uid; | ||
171 | unsigned int gid; | ||
172 | unsigned long int rdev; | ||
173 | unsigned long int size; | ||
174 | unsigned long int blksize; | ||
175 | unsigned long int blocks; | ||
176 | unsigned long int atime; | ||
177 | unsigned long int atimensec; | ||
178 | unsigned long int mtime; | ||
179 | unsigned long int mtimensec; | ||
180 | unsigned long int ctime; | ||
181 | unsigned long int ctimensec; | ||
182 | }; | ||
183 | |||
184 | /** | ||
152 | * @def EINA_FILE_DIR_LIST_CB | 185 | * @def EINA_FILE_DIR_LIST_CB |
153 | * @brief cast to an #Eina_File_Dir_List_Cb. | 186 | * @brief cast to an #Eina_File_Dir_List_Cb. |
154 | * | 187 | * |
@@ -247,6 +280,24 @@ EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_A | |||
247 | EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; | 280 | EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; |
248 | 281 | ||
249 | /** | 282 | /** |
283 | * @brief Use information provided by Eina_Iterator of eina_file_stat_ls or eina_file_direct_ls | ||
284 | * to call stat in the most efficient way on your system. | ||
285 | * | ||
286 | * @param container The container returned by the Eina_Iterator using eina_iterator_container_get(). | ||
287 | * @param info The content of the current Eina_File_Direct_Info provided by the Eina_Iterator | ||
288 | * @param buf Where to put the result of the stat | ||
289 | * @return On success 0 is returned, On error -1 is returned and errno is set appropriately. | ||
290 | * | ||
291 | * This function calls fstatat or stat depending on what your system supports. This makes it efficient and simple | ||
292 | * to use on your side without complex detection already done inside Eina on what the system can do. | ||
293 | * | ||
294 | * @see eina_file_direct_ls() | ||
295 | * @see eina_file_stat_ls() | ||
296 | * @since 1.2 | ||
297 | */ | ||
298 | EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3); | ||
299 | |||
300 | /** | ||
250 | * @brief Get an iterator to list the content of a directory, with direct | 301 | * @brief Get an iterator to list the content of a directory, with direct |
251 | * information. | 302 | * information. |
252 | * | 303 | * |
diff --git a/libraries/eina/src/include/eina_inarray.h b/libraries/eina/src/include/eina_inarray.h index d37c76b..079f1e3 100644 --- a/libraries/eina/src/include/eina_inarray.h +++ b/libraries/eina/src/include/eina_inarray.h | |||
@@ -24,6 +24,131 @@ | |||
24 | #include "eina_accessor.h" | 24 | #include "eina_accessor.h" |
25 | 25 | ||
26 | /** | 26 | /** |
27 | * @page eina_inarray_example_01 Eina inline array usage | ||
28 | * @dontinclude eina_inarray_01.c | ||
29 | * | ||
30 | * This example will create an inline array of chars, add some elements, print | ||
31 | * it, re-purpose the array to store ints, add some elements and print that. | ||
32 | * | ||
33 | * We'll start with a function to compare ints we need this because the '>' | ||
34 | * operator is not a function and can't be used where Eina_Compare_Cb is needed. | ||
35 | * @skip int | ||
36 | * @until } | ||
37 | * | ||
38 | * And then move on to the code we actually care about, starting with variable | ||
39 | * declarations and eina initialization: | ||
40 | * @until eina_init | ||
41 | * | ||
42 | * Creating an inline array is very simple, we just need to know what type we | ||
43 | * want to store: | ||
44 | * @until inarray_new | ||
45 | * @note The second parameter(the step) is left at zero which means that eina | ||
46 | * will choose an appropriate value, this should @b only be changed if it's | ||
47 | * known, beforehand, how many elements the array will have. | ||
48 | * | ||
49 | * Once we have an array we can start adding elements to it. Because the | ||
50 | * insertion function expect a memory address we have to put the value we want | ||
51 | * to store in a variable(this should be no problem since in real world usage | ||
52 | * that's usually where the value will be anyways): | ||
53 | * @until append | ||
54 | * @note Because the inline array copies the value given to it we can later | ||
55 | * change @c ch, which we do, without affecting the contents of the array. | ||
56 | * | ||
57 | * So let's add some more elements: | ||
58 | * @until append | ||
59 | * @until append | ||
60 | * @until append | ||
61 | * | ||
62 | * We will then iterate over our array and print every position of it. The thing | ||
63 | * to note here is not so much the values which will be the expected 'a', 'b', | ||
64 | * 'c' and 'd', but rather the memory address of these values, they are | ||
65 | * sequential: | ||
66 | * @until printf | ||
67 | * @until printf | ||
68 | * | ||
69 | * We'll now use our array to store ints, so we need to first erase every member | ||
70 | * currently on the array: | ||
71 | * @until _flush | ||
72 | * | ||
73 | * And then to be able to store a different type on the same array we use the | ||
74 | * eina_array_setup() function, which is just like the eina_inarray_new() | ||
75 | * function except it receives already allocated memory. This time we're going | ||
76 | * to ask eina to use a step of size 4 because that's how many elements we'll be | ||
77 | * putting on the array: | ||
78 | * @until _setup | ||
79 | * @note Strictly speaking the reason to call eina_inarray_setup() is not | ||
80 | * because we're storing different type, but rather because our types have | ||
81 | * different sizes. Eina inline arrays don't actually know anything about types, | ||
82 | * they only deal in blocks of memory of a given size. | ||
83 | * @note Since eina_array_setup() receives already allocated memory you can(and | ||
84 | * it is in fact good practice) use inline arrays not declared as pointers: | ||
85 | * @code | ||
86 | * Eina_Inarray arr; | ||
87 | * eina_inarray_setup(&arr, sizeof(int), 4); | ||
88 | * @endcode | ||
89 | * | ||
90 | * And now to add our integer values to the array: | ||
91 | * @until append | ||
92 | * @until append | ||
93 | * @until append | ||
94 | * | ||
95 | * Just to change things up a bit we've left out the 99 value, but will still | ||
96 | * add it in such a way to keep the array ordered. There are many ways to do | ||
97 | * this, we could use eina_inarray_insert_at(), or we could change the value | ||
98 | * of the last member using eina_inarray_replace_at() and then append the values | ||
99 | * in the right order, but for no particular reason we're going to use | ||
100 | * eina_inarray_insert_sorted() instead: | ||
101 | * @until insert_sorted | ||
102 | * | ||
103 | * We then print the size of our array, and the array itself, much like last | ||
104 | * time the values are not surprising, and neither should it be that the memory | ||
105 | * addresses are contiguous: | ||
106 | * @until printf | ||
107 | * @until printf | ||
108 | * | ||
109 | * Once done we free our array and shutdown eina: | ||
110 | * @until } | ||
111 | * | ||
112 | * The source for this example: @ref eina_inarray_01_c | ||
113 | */ | ||
114 | |||
115 | /** | ||
116 | * @page eina_inarray_01_c eina_inarray_01.c | ||
117 | * @include eina_inarray_01.c | ||
118 | * @example eina_inarray_01.c | ||
119 | */ | ||
120 | |||
121 | /** | ||
122 | * @page eina_inarray_example_02 Eina inline array of strings | ||
123 | * @dontinclude eina_inarray_02.c | ||
124 | * | ||
125 | * This example will create an inline array of strings, add some elements and | ||
126 | * then print them. This example is based on @ref eina_array_01_example_page and | ||
127 | * @ref eina_inarray_example_01. | ||
128 | * | ||
129 | * We start with some variable declarations and eina initialization: | ||
130 | * @skip int | ||
131 | * @until eina_init | ||
132 | * | ||
133 | * We then create the array much like we did on @ref eina_inarray_example_01: | ||
134 | * @until inarray_new | ||
135 | * | ||
136 | * The point were this example significantly differs from the first eina inline | ||
137 | * array example. We'll not be adding the strings themselves to the array since | ||
138 | * their size varies, we'll store pointer to the strings instead. We therefore | ||
139 | * use @c char** to populate our inline array: | ||
140 | * @until } | ||
141 | * | ||
142 | * The source for this example: @ref eina_inarray_02_c | ||
143 | */ | ||
144 | |||
145 | /** | ||
146 | * @page eina_inarray_02_c eina_inarray_02.c | ||
147 | * @include eina_inarray_02.c | ||
148 | * @example eina_inarray_02.c | ||
149 | */ | ||
150 | |||
151 | /** | ||
27 | * @addtogroup Eina_Data_Types_Group Data Types | 152 | * @addtogroup Eina_Data_Types_Group Data Types |
28 | * | 153 | * |
29 | * @since 1.2 | 154 | * @since 1.2 |
@@ -40,6 +165,19 @@ | |||
40 | /** | 165 | /** |
41 | * @defgroup Eina_Inline_Array_Group Inline Array | 166 | * @defgroup Eina_Inline_Array_Group Inline Array |
42 | * | 167 | * |
168 | * Inline array is a container that stores the data itself not pointers to data, | ||
169 | * this means there is no memory fragmentation, also for small data types(such | ||
170 | * as char, short, int, etc.) it's more memory efficient. | ||
171 | * | ||
172 | * Usage of the inline array is very similar to that of other | ||
173 | * @ref Eina_Containers_Group, like all arrays adding elements to the beginning | ||
174 | * of the array is a lot more costly than appending, so those operations should | ||
175 | * be minimized. | ||
176 | * | ||
177 | * Examples: | ||
178 | * @li @ref eina_inarray_example_01 | ||
179 | * @li @ref eina_inarray_example_02 | ||
180 | * | ||
43 | * @{ | 181 | * @{ |
44 | */ | 182 | */ |
45 | 183 | ||
@@ -531,8 +669,8 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA | |||
531 | * @since 1.2 | 669 | * @since 1.2 |
532 | */ | 670 | */ |
533 | #define EINA_INARRAY_FOREACH(array, itr) \ | 671 | #define EINA_INARRAY_FOREACH(array, itr) \ |
534 | for ((itr) = array->members; \ | 672 | for ((itr) = (array)->members; \ |
535 | (itr) < (((typeof(*itr)*)array->members) + array->len); \ | 673 | (itr) < (((typeof(*itr)*)(array)->members) + (array)->len); \ |
536 | (itr)++) | 674 | (itr)++) |
537 | 675 | ||
538 | /** | 676 | /** |
@@ -552,9 +690,9 @@ EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MA | |||
552 | * @since 1.2 | 690 | * @since 1.2 |
553 | */ | 691 | */ |
554 | #define EINA_INARRAY_REVERSE_FOREACH(array, itr) \ | 692 | #define EINA_INARRAY_REVERSE_FOREACH(array, itr) \ |
555 | for ((itr) = ((((typeof(*(itr))*)array->members) + array->len) - 1); \ | 693 | for ((itr) = ((((typeof(*(itr))*)(array)->members) + (array)->len) - 1); \ |
556 | (((itr) >= (typeof(*(itr))*)array->members) \ | 694 | (((itr) >= (typeof(*(itr))*)(array)->members) \ |
557 | && (array->members != NULL)); \ | 695 | && ((array)->members != NULL)); \ |
558 | (itr)--) | 696 | (itr)--) |
559 | 697 | ||
560 | /** | 698 | /** |
diff --git a/libraries/eina/src/include/eina_inline_lock_win32.x b/libraries/eina/src/include/eina_inline_lock_win32.x index e8363d5..1988724 100644 --- a/libraries/eina/src/include/eina_inline_lock_win32.x +++ b/libraries/eina/src/include/eina_inline_lock_win32.x | |||
@@ -23,6 +23,9 @@ | |||
23 | 23 | ||
24 | typedef CRITICAL_SECTION Eina_Lock; | 24 | typedef CRITICAL_SECTION Eina_Lock; |
25 | typedef struct _Eina_Condition Eina_Condition; | 25 | typedef struct _Eina_Condition Eina_Condition; |
26 | typedef struct _Eina_RWLock Eina_RWLock; | ||
27 | typedef DWORD Eina_TLS; | ||
28 | typedef HANDLE Eina_Semaphore; | ||
26 | 29 | ||
27 | #if _WIN32_WINNT >= 0x0600 | 30 | #if _WIN32_WINNT >= 0x0600 |
28 | struct _Eina_Condition | 31 | struct _Eina_Condition |
@@ -30,6 +33,13 @@ struct _Eina_Condition | |||
30 | CRITICAL_SECTION *mutex; | 33 | CRITICAL_SECTION *mutex; |
31 | CONDITION_VARIABLE condition; | 34 | CONDITION_VARIABLE condition; |
32 | }; | 35 | }; |
36 | |||
37 | struct _Eina_RWLock | ||
38 | { | ||
39 | SRWLOCK mutex; | ||
40 | |||
41 | Eina_Bool is_read_mode : 1; | ||
42 | }; | ||
33 | #else | 43 | #else |
34 | struct _Eina_Condition | 44 | struct _Eina_Condition |
35 | { | 45 | { |
@@ -40,28 +50,24 @@ struct _Eina_Condition | |||
40 | HANDLE waiters_done; | 50 | HANDLE waiters_done; |
41 | Eina_Bool was_broadcast; | 51 | Eina_Bool was_broadcast; |
42 | }; | 52 | }; |
43 | #endif | ||
44 | 53 | ||
45 | typedef struct _Eina_Win32_RWLock Eina_RWLock; | 54 | struct _Eina_RWLock |
46 | |||
47 | struct _Eina_Win32_RWLock | ||
48 | { | 55 | { |
49 | LONG readers_count; | 56 | LONG readers_count; |
50 | LONG writers_count; | 57 | LONG writers_count; |
51 | int readers; | 58 | int readers; |
52 | int writers; | 59 | int writers; |
53 | 60 | ||
54 | Eina_Lock mutex; | 61 | Eina_Lock mutex; |
55 | Eina_Condition cond_read; | 62 | Eina_Condition cond_read; |
56 | Eina_Condition cond_write; | 63 | Eina_Condition cond_write; |
57 | }; | 64 | }; |
65 | #endif | ||
58 | 66 | ||
59 | typedef DWORD Eina_TLS; | ||
60 | |||
61 | typedef HANDLE Eina_Semaphore; | ||
62 | 67 | ||
63 | EAPI extern Eina_Bool _eina_threads_activated; | 68 | EAPI extern Eina_Bool _eina_threads_activated; |
64 | 69 | ||
70 | |||
65 | static inline Eina_Bool | 71 | static inline Eina_Bool |
66 | eina_lock_new(Eina_Lock *mutex) | 72 | eina_lock_new(Eina_Lock *mutex) |
67 | { | 73 | { |
@@ -143,9 +149,9 @@ eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex) | |||
143 | CloseHandle(cond->semaphore); | 149 | CloseHandle(cond->semaphore); |
144 | return EINA_FALSE; | 150 | return EINA_FALSE; |
145 | } | 151 | } |
152 | #endif | ||
146 | 153 | ||
147 | return EINA_TRUE; | 154 | return EINA_TRUE; |
148 | #endif | ||
149 | } | 155 | } |
150 | 156 | ||
151 | static inline void | 157 | static inline void |
@@ -153,6 +159,7 @@ eina_condition_free(Eina_Condition *cond) | |||
153 | { | 159 | { |
154 | #if _WIN32_WINNT >= 0x0600 | 160 | #if _WIN32_WINNT >= 0x0600 |
155 | /* Nothing to do */ | 161 | /* Nothing to do */ |
162 | (void)cond; | ||
156 | #else | 163 | #else |
157 | CloseHandle(cond->waiters_done); | 164 | CloseHandle(cond->waiters_done); |
158 | DeleteCriticalSection(&cond->waiters_count_lock); | 165 | DeleteCriticalSection(&cond->waiters_count_lock); |
@@ -309,20 +316,29 @@ eina_condition_signal(Eina_Condition *cond) | |||
309 | if (!ReleaseSemaphore(cond->semaphore, 1, 0)) | 316 | if (!ReleaseSemaphore(cond->semaphore, 1, 0)) |
310 | return EINA_FALSE; | 317 | return EINA_FALSE; |
311 | } | 318 | } |
319 | #endif | ||
312 | 320 | ||
313 | return EINA_TRUE; | 321 | return EINA_TRUE; |
314 | #endif | ||
315 | } | 322 | } |
316 | 323 | ||
317 | static inline Eina_Bool | 324 | static inline Eina_Bool |
318 | eina_rwlock_new(Eina_RWLock *mutex) | 325 | eina_rwlock_new(Eina_RWLock *mutex) |
319 | { | 326 | { |
327 | #if _WIN32_WINNT >= 0x0600 | ||
328 | InitializeSRWLock(&mutex->mutex); | ||
329 | return EINA_TRUE; | ||
330 | #else | ||
320 | if (!eina_lock_new(&(mutex->mutex))) return EINA_FALSE; | 331 | if (!eina_lock_new(&(mutex->mutex))) return EINA_FALSE; |
321 | if (!eina_condition_new(&(mutex->cond_read), &(mutex->mutex))) | 332 | if (!eina_condition_new(&(mutex->cond_read), &(mutex->mutex))) |
322 | goto on_error1; | 333 | goto on_error1; |
323 | if (!eina_condition_new(&(mutex->cond_write), &(mutex->mutex))) | 334 | if (!eina_condition_new(&(mutex->cond_write), &(mutex->mutex))) |
324 | goto on_error2; | 335 | goto on_error2; |
325 | 336 | ||
337 | mutex->readers_count = 0; | ||
338 | mutex->writers_count = 0; | ||
339 | mutex->readers = 0; | ||
340 | mutex->writers = 0; | ||
341 | |||
326 | return EINA_TRUE; | 342 | return EINA_TRUE; |
327 | 343 | ||
328 | on_error2: | 344 | on_error2: |
@@ -330,20 +346,29 @@ eina_rwlock_new(Eina_RWLock *mutex) | |||
330 | on_error1: | 346 | on_error1: |
331 | eina_lock_free(&(mutex->mutex)); | 347 | eina_lock_free(&(mutex->mutex)); |
332 | return EINA_FALSE; | 348 | return EINA_FALSE; |
349 | #endif | ||
333 | } | 350 | } |
334 | 351 | ||
335 | static inline void | 352 | static inline void |
336 | eina_rwlock_free(Eina_RWLock *mutex) | 353 | eina_rwlock_free(Eina_RWLock *mutex) |
337 | { | 354 | { |
355 | #if _WIN32_WINNT >= 0x0600 | ||
356 | (void)mutex; | ||
357 | #else | ||
338 | eina_condition_free(&(mutex->cond_read)); | 358 | eina_condition_free(&(mutex->cond_read)); |
339 | eina_condition_free(&(mutex->cond_write)); | 359 | eina_condition_free(&(mutex->cond_write)); |
340 | eina_lock_free(&(mutex->mutex)); | 360 | eina_lock_free(&(mutex->mutex)); |
361 | #endif | ||
341 | } | 362 | } |
342 | 363 | ||
343 | static inline Eina_Lock_Result | 364 | static inline Eina_Lock_Result |
344 | eina_rwlock_take_read(Eina_RWLock *mutex) | 365 | eina_rwlock_take_read(Eina_RWLock *mutex) |
345 | { | 366 | { |
346 | DWORD res; | 367 | #if _WIN32_WINNT >= 0x0600 |
368 | AcquireSRWLockShared(&mutex->mutex); | ||
369 | mutex->is_read_mode = EINA_TRUE; | ||
370 | #else | ||
371 | DWORD res = 0; | ||
347 | 372 | ||
348 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) | 373 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) |
349 | return EINA_LOCK_FAIL; | 374 | return EINA_LOCK_FAIL; |
@@ -364,6 +389,7 @@ eina_rwlock_take_read(Eina_RWLock *mutex) | |||
364 | if (res == 0) | 389 | if (res == 0) |
365 | mutex->readers++; | 390 | mutex->readers++; |
366 | eina_lock_release(&(mutex->mutex)); | 391 | eina_lock_release(&(mutex->mutex)); |
392 | #endif | ||
367 | 393 | ||
368 | return EINA_LOCK_SUCCEED; | 394 | return EINA_LOCK_SUCCEED; |
369 | } | 395 | } |
@@ -371,7 +397,11 @@ eina_rwlock_take_read(Eina_RWLock *mutex) | |||
371 | static inline Eina_Lock_Result | 397 | static inline Eina_Lock_Result |
372 | eina_rwlock_take_write(Eina_RWLock *mutex) | 398 | eina_rwlock_take_write(Eina_RWLock *mutex) |
373 | { | 399 | { |
374 | DWORD res; | 400 | #if _WIN32_WINNT >= 0x0600 |
401 | AcquireSRWLockExclusive(&mutex->mutex); | ||
402 | mutex->is_read_mode = EINA_FALSE; | ||
403 | #else | ||
404 | DWORD res = 0; | ||
375 | 405 | ||
376 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) | 406 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) |
377 | return EINA_LOCK_FAIL; | 407 | return EINA_LOCK_FAIL; |
@@ -389,8 +419,9 @@ eina_rwlock_take_write(Eina_RWLock *mutex) | |||
389 | } | 419 | } |
390 | mutex->writers_count--; | 420 | mutex->writers_count--; |
391 | } | 421 | } |
392 | if (res == 0) mutex->writers_count = 1; | 422 | if (res == 0) mutex->writers = 1; |
393 | eina_lock_release(&(mutex->mutex)); | 423 | eina_lock_release(&(mutex->mutex)); |
424 | #endif | ||
394 | 425 | ||
395 | return EINA_LOCK_SUCCEED; | 426 | return EINA_LOCK_SUCCEED; |
396 | } | 427 | } |
@@ -398,6 +429,12 @@ eina_rwlock_take_write(Eina_RWLock *mutex) | |||
398 | static inline Eina_Lock_Result | 429 | static inline Eina_Lock_Result |
399 | eina_rwlock_release(Eina_RWLock *mutex) | 430 | eina_rwlock_release(Eina_RWLock *mutex) |
400 | { | 431 | { |
432 | #if _WIN32_WINNT >= 0x0600 | ||
433 | if (mutex->is_read_mode) | ||
434 | ReleaseSRWLockShared(&mutex->mutex); | ||
435 | else | ||
436 | ReleaseSRWLockExclusive(&mutex->mutex); | ||
437 | #else | ||
401 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) | 438 | if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) |
402 | return EINA_LOCK_FAIL; | 439 | return EINA_LOCK_FAIL; |
403 | 440 | ||
@@ -433,6 +470,7 @@ eina_rwlock_release(Eina_RWLock *mutex) | |||
433 | } | 470 | } |
434 | } | 471 | } |
435 | eina_lock_release(&(mutex->mutex)); | 472 | eina_lock_release(&(mutex->mutex)); |
473 | #endif | ||
436 | 474 | ||
437 | return EINA_LOCK_SUCCEED; | 475 | return EINA_LOCK_SUCCEED; |
438 | } | 476 | } |
diff --git a/libraries/eina/src/include/eina_inline_stringshare.x b/libraries/eina/src/include/eina_inline_stringshare.x index bfd7677..19827c5 100644 --- a/libraries/eina/src/include/eina_inline_stringshare.x +++ b/libraries/eina/src/include/eina_inline_stringshare.x | |||
@@ -43,7 +43,7 @@ | |||
43 | * #EINA_FALSE if the strings were the same after shared. | 43 | * #EINA_FALSE if the strings were the same after shared. |
44 | */ | 44 | */ |
45 | static inline Eina_Bool | 45 | static inline Eina_Bool |
46 | eina_stringshare_replace(const char **p_str, const char *news) | 46 | eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) |
47 | { | 47 | { |
48 | if (*p_str == news) return EINA_FALSE; | 48 | if (*p_str == news) return EINA_FALSE; |
49 | 49 | ||
@@ -72,7 +72,7 @@ eina_stringshare_replace(const char **p_str, const char *news) | |||
72 | * #EINA_FALSE if the strings were the same after shared. | 72 | * #EINA_FALSE if the strings were the same after shared. |
73 | */ | 73 | */ |
74 | static inline Eina_Bool | 74 | static inline Eina_Bool |
75 | eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) | 75 | eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsigned int slen) |
76 | { | 76 | { |
77 | if (*p_str == news) return EINA_FALSE; | 77 | if (*p_str == news) return EINA_FALSE; |
78 | 78 | ||
diff --git a/libraries/eina/src/include/eina_inline_value.x b/libraries/eina/src/include/eina_inline_value.x index 59ec315..33c83f5 100644 --- a/libraries/eina/src/include/eina_inline_value.x +++ b/libraries/eina/src/include/eina_inline_value.x | |||
@@ -19,8 +19,8 @@ | |||
19 | #ifndef EINA_INLINE_VALUE_X_ | 19 | #ifndef EINA_INLINE_VALUE_X_ |
20 | #define EINA_INLINE_VALUE_X_ | 20 | #define EINA_INLINE_VALUE_X_ |
21 | 21 | ||
22 | #include <stdlib.h> | ||
22 | #include <string.h> | 23 | #include <string.h> |
23 | #include <alloca.h> | ||
24 | 24 | ||
25 | #include "eina_stringshare.h" | 25 | #include "eina_stringshare.h" |
26 | 26 | ||
@@ -210,7 +210,7 @@ eina_value_compare(const Eina_Value *a, const Eina_Value *b) | |||
210 | return 1; | 210 | return 1; |
211 | return 0; | 211 | return 0; |
212 | } | 212 | } |
213 | else if (type == EINA_VALUE_TYPE_ULONG) | 213 | else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP)) |
214 | { | 214 | { |
215 | unsigned long *ta = (unsigned long *) pa, *tb = (unsigned long *) pb; | 215 | unsigned long *ta = (unsigned long *) pa, *tb = (unsigned long *) pb; |
216 | if (*ta < *tb) | 216 | if (*ta < *tb) |
@@ -362,7 +362,7 @@ eina_value_vset(Eina_Value *value, va_list args) | |||
362 | *tmem = va_arg(args, unsigned int); | 362 | *tmem = va_arg(args, unsigned int); |
363 | return EINA_TRUE; | 363 | return EINA_TRUE; |
364 | } | 364 | } |
365 | else if (type == EINA_VALUE_TYPE_ULONG) | 365 | else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP)) |
366 | { | 366 | { |
367 | unsigned long *tmem = (unsigned long *) mem; | 367 | unsigned long *tmem = (unsigned long *) mem; |
368 | *tmem = va_arg(args, unsigned long); | 368 | *tmem = va_arg(args, unsigned long); |
@@ -424,17 +424,22 @@ eina_value_vset(Eina_Value *value, va_list args) | |||
424 | else if (type == EINA_VALUE_TYPE_STRING) | 424 | else if (type == EINA_VALUE_TYPE_STRING) |
425 | { | 425 | { |
426 | const char *str = (const char *) va_arg(args, const char *); | 426 | const char *str = (const char *) va_arg(args, const char *); |
427 | free(value->value.ptr); | 427 | if (value->value.ptr == str) return EINA_TRUE; |
428 | if (!str) | 428 | if (!str) |
429 | value->value.ptr = NULL; | 429 | { |
430 | free(value->value.ptr); | ||
431 | value->value.ptr = NULL; | ||
432 | } | ||
430 | else | 433 | else |
431 | { | 434 | { |
432 | value->value.ptr = strdup(str); | 435 | char *tmp = strdup(str); |
433 | if (!value->value.ptr) | 436 | if (!tmp) |
434 | { | 437 | { |
435 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 438 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
436 | return EINA_FALSE; | 439 | return EINA_FALSE; |
437 | } | 440 | } |
441 | free(value->value.ptr); | ||
442 | value->value.ptr = tmp; | ||
438 | } | 443 | } |
439 | return EINA_TRUE; | 444 | return EINA_TRUE; |
440 | } | 445 | } |
@@ -494,18 +499,22 @@ eina_value_pset(Eina_Value *value, const void *ptr) | |||
494 | { | 499 | { |
495 | const char * const * pstr = (const char * const *) ptr; | 500 | const char * const * pstr = (const char * const *) ptr; |
496 | const char *str = *pstr; | 501 | const char *str = *pstr; |
497 | 502 | if (value->value.ptr == str) return EINA_TRUE; | |
498 | free(value->value.ptr); | ||
499 | if (!str) | 503 | if (!str) |
500 | value->value.ptr = NULL; | 504 | { |
505 | free(value->value.ptr); | ||
506 | value->value.ptr = NULL; | ||
507 | } | ||
501 | else | 508 | else |
502 | { | 509 | { |
503 | value->value.ptr = strdup(str); | 510 | char *tmp = strdup(str); |
504 | if (!value->value.ptr) | 511 | if (!tmp) |
505 | { | 512 | { |
506 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 513 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
507 | return EINA_FALSE; | 514 | return EINA_FALSE; |
508 | } | 515 | } |
516 | free(value->value.ptr); | ||
517 | value->value.ptr = tmp; | ||
509 | } | 518 | } |
510 | return EINA_TRUE; | 519 | return EINA_TRUE; |
511 | } | 520 | } |
@@ -607,16 +616,7 @@ eina_value_array_vset(Eina_Value *value, unsigned int position, va_list args) | |||
607 | if (!mem) | 616 | if (!mem) |
608 | return EINA_FALSE; | 617 | return EINA_FALSE; |
609 | 618 | ||
610 | eina_value_type_flush(desc.subtype, mem); | 619 | return eina_value_type_vset(desc.subtype, mem, args); |
611 | |||
612 | if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup; | ||
613 | if (!eina_value_type_vset(desc.subtype, mem, args)) goto error_set; | ||
614 | return EINA_TRUE; | ||
615 | |||
616 | error_set: | ||
617 | eina_value_type_flush(desc.subtype, mem); | ||
618 | error_setup: | ||
619 | return EINA_FALSE; | ||
620 | } | 620 | } |
621 | 621 | ||
622 | static inline Eina_Bool | 622 | static inline Eina_Bool |
@@ -749,16 +749,7 @@ eina_value_array_pset(Eina_Value *value, unsigned int position, const void *ptr) | |||
749 | if (!mem) | 749 | if (!mem) |
750 | return EINA_FALSE; | 750 | return EINA_FALSE; |
751 | 751 | ||
752 | eina_value_type_flush(desc.subtype, mem); | 752 | return eina_value_type_pset(desc.subtype, mem, ptr); |
753 | |||
754 | if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup; | ||
755 | if (!eina_value_type_pset(desc.subtype, mem, ptr)) goto error_set; | ||
756 | return EINA_TRUE; | ||
757 | |||
758 | error_set: | ||
759 | eina_value_type_flush(desc.subtype, mem); | ||
760 | error_setup: | ||
761 | return EINA_FALSE; | ||
762 | } | 753 | } |
763 | 754 | ||
764 | static inline Eina_Bool | 755 | static inline Eina_Bool |
@@ -832,6 +823,29 @@ eina_value_array_pappend(Eina_Value *value, const void *ptr) | |||
832 | return EINA_FALSE; | 823 | return EINA_FALSE; |
833 | } | 824 | } |
834 | 825 | ||
826 | static inline Eina_Bool | ||
827 | eina_value_array_value_get(const Eina_Value *src, unsigned int position, Eina_Value *dst) | ||
828 | { | ||
829 | Eina_Value_Array desc; | ||
830 | |||
831 | EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(src, EINA_FALSE); | ||
832 | EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE); | ||
833 | |||
834 | if (!eina_value_pget(src, &desc)) | ||
835 | return EINA_FALSE; | ||
836 | if (position >= eina_inarray_count(desc.array)) | ||
837 | return EINA_FALSE; | ||
838 | if (!eina_value_setup(dst, desc.subtype)) | ||
839 | return EINA_FALSE; | ||
840 | if (!eina_value_pset(dst, eina_inarray_nth(desc.array, position))) | ||
841 | { | ||
842 | eina_value_flush(dst); | ||
843 | return EINA_FALSE; | ||
844 | } | ||
845 | |||
846 | return EINA_TRUE; | ||
847 | } | ||
848 | |||
835 | #undef EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL | 849 | #undef EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL |
836 | 850 | ||
837 | #define EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, retval) \ | 851 | #define EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, retval) \ |
@@ -929,16 +943,7 @@ eina_value_list_vset(Eina_Value *value, unsigned int position, va_list args) | |||
929 | if (!mem) | 943 | if (!mem) |
930 | return EINA_FALSE; | 944 | return EINA_FALSE; |
931 | 945 | ||
932 | eina_value_type_flush(desc->subtype, mem); | 946 | return eina_value_type_vset(desc->subtype, mem, args); |
933 | |||
934 | if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup; | ||
935 | if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set; | ||
936 | return EINA_TRUE; | ||
937 | |||
938 | error_set: | ||
939 | eina_value_type_flush(desc->subtype, mem); | ||
940 | error_setup: | ||
941 | return EINA_FALSE; | ||
942 | } | 947 | } |
943 | 948 | ||
944 | static inline Eina_Bool | 949 | static inline Eina_Bool |
@@ -1105,16 +1110,7 @@ eina_value_list_pset(Eina_Value *value, unsigned int position, const void *ptr) | |||
1105 | if (!mem) | 1110 | if (!mem) |
1106 | return EINA_FALSE; | 1111 | return EINA_FALSE; |
1107 | 1112 | ||
1108 | eina_value_type_flush(desc->subtype, mem); | 1113 | return eina_value_type_pset(desc->subtype, mem, ptr); |
1109 | |||
1110 | if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup; | ||
1111 | if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set; | ||
1112 | return EINA_TRUE; | ||
1113 | |||
1114 | error_set: | ||
1115 | eina_value_type_flush(desc->subtype, mem); | ||
1116 | error_setup: | ||
1117 | return EINA_FALSE; | ||
1118 | } | 1114 | } |
1119 | 1115 | ||
1120 | static inline Eina_Bool | 1116 | static inline Eina_Bool |
@@ -1284,9 +1280,7 @@ eina_value_hash_vset(Eina_Value *value, const char *key, va_list args) | |||
1284 | return EINA_FALSE; | 1280 | return EINA_FALSE; |
1285 | 1281 | ||
1286 | mem = eina_hash_find(desc->hash, key); | 1282 | mem = eina_hash_find(desc->hash, key); |
1287 | if (mem) | 1283 | if (!mem) |
1288 | eina_value_type_flush(desc->subtype, mem); | ||
1289 | else | ||
1290 | { | 1284 | { |
1291 | mem = malloc(desc->subtype->value_size); | 1285 | mem = malloc(desc->subtype->value_size); |
1292 | if (!mem) | 1286 | if (!mem) |
@@ -1299,18 +1293,15 @@ eina_value_hash_vset(Eina_Value *value, const char *key, va_list args) | |||
1299 | free(mem); | 1293 | free(mem); |
1300 | return EINA_FALSE; | 1294 | return EINA_FALSE; |
1301 | } | 1295 | } |
1296 | if (!eina_value_type_setup(desc->subtype, mem)) | ||
1297 | { | ||
1298 | eina_value_type_flush(desc->subtype, mem); | ||
1299 | eina_hash_del_by_key(desc->hash, key); | ||
1300 | free(mem); | ||
1301 | } | ||
1302 | } | 1302 | } |
1303 | 1303 | ||
1304 | if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup; | 1304 | return eina_value_type_vset(desc->subtype, mem, args); |
1305 | if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set; | ||
1306 | return EINA_TRUE; | ||
1307 | |||
1308 | error_set: | ||
1309 | eina_value_type_flush(desc->subtype, mem); | ||
1310 | error_setup: | ||
1311 | eina_hash_del_by_key(desc->hash, key); | ||
1312 | free(mem); | ||
1313 | return EINA_FALSE; | ||
1314 | } | 1305 | } |
1315 | 1306 | ||
1316 | static inline Eina_Bool | 1307 | static inline Eina_Bool |
@@ -1371,9 +1362,7 @@ eina_value_hash_pset(Eina_Value *value, const char *key, const void *ptr) | |||
1371 | return EINA_FALSE; | 1362 | return EINA_FALSE; |
1372 | 1363 | ||
1373 | mem = eina_hash_find(desc->hash, key); | 1364 | mem = eina_hash_find(desc->hash, key); |
1374 | if (mem) | 1365 | if (!mem) |
1375 | eina_value_type_flush(desc->subtype, mem); | ||
1376 | else | ||
1377 | { | 1366 | { |
1378 | mem = malloc(desc->subtype->value_size); | 1367 | mem = malloc(desc->subtype->value_size); |
1379 | if (!mem) | 1368 | if (!mem) |
@@ -1386,18 +1375,15 @@ eina_value_hash_pset(Eina_Value *value, const char *key, const void *ptr) | |||
1386 | free(mem); | 1375 | free(mem); |
1387 | return EINA_FALSE; | 1376 | return EINA_FALSE; |
1388 | } | 1377 | } |
1378 | if (!eina_value_type_setup(desc->subtype, mem)) | ||
1379 | { | ||
1380 | eina_value_type_flush(desc->subtype, mem); | ||
1381 | eina_hash_del_by_key(desc->hash, key); | ||
1382 | free(mem); | ||
1383 | } | ||
1389 | } | 1384 | } |
1390 | 1385 | ||
1391 | if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup; | 1386 | return eina_value_type_pset(desc->subtype, mem, ptr); |
1392 | if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set; | ||
1393 | return EINA_TRUE; | ||
1394 | |||
1395 | error_set: | ||
1396 | eina_value_type_flush(desc->subtype, mem); | ||
1397 | error_setup: | ||
1398 | eina_hash_del_by_key(desc->hash, key); | ||
1399 | free(mem); | ||
1400 | return EINA_FALSE; | ||
1401 | } | 1387 | } |
1402 | 1388 | ||
1403 | static inline Eina_Bool | 1389 | static inline Eina_Bool |
@@ -1474,15 +1460,7 @@ eina_value_struct_vset(Eina_Value *value, const char *name, va_list args) | |||
1474 | if (!mem) | 1460 | if (!mem) |
1475 | return EINA_FALSE; | 1461 | return EINA_FALSE; |
1476 | 1462 | ||
1477 | eina_value_type_flush(member->type, mem); | 1463 | return eina_value_type_vset(member->type, mem, args); |
1478 | if (!eina_value_type_setup(member->type, mem)) goto error_setup; | ||
1479 | if (!eina_value_type_vset(member->type, mem, args)) goto error_set; | ||
1480 | return EINA_TRUE; | ||
1481 | |||
1482 | error_set: | ||
1483 | eina_value_type_flush(member->type, mem); | ||
1484 | error_setup: | ||
1485 | return EINA_FALSE; | ||
1486 | } | 1464 | } |
1487 | 1465 | ||
1488 | static inline Eina_Bool | 1466 | static inline Eina_Bool |
@@ -1540,8 +1518,9 @@ eina_value_struct_pset(Eina_Value *value, const char *name, const void *ptr) | |||
1540 | Eina_Value_Struct *st; | 1518 | Eina_Value_Struct *st; |
1541 | void *mem; | 1519 | void *mem; |
1542 | 1520 | ||
1543 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, 0); | 1521 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE); |
1544 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); | 1522 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); |
1523 | EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE); | ||
1545 | st = (Eina_Value_Struct *)eina_value_memory_get(value); | 1524 | st = (Eina_Value_Struct *)eina_value_memory_get(value); |
1546 | if (!st) | 1525 | if (!st) |
1547 | return EINA_FALSE; | 1526 | return EINA_FALSE; |
@@ -1552,15 +1531,7 @@ eina_value_struct_pset(Eina_Value *value, const char *name, const void *ptr) | |||
1552 | if (!mem) | 1531 | if (!mem) |
1553 | return EINA_FALSE; | 1532 | return EINA_FALSE; |
1554 | 1533 | ||
1555 | eina_value_type_flush(member->type, mem); | 1534 | return eina_value_type_pset(member->type, mem, ptr); |
1556 | if (!eina_value_type_setup(member->type, mem)) goto error_setup; | ||
1557 | if (!eina_value_type_pset(member->type, mem, ptr)) goto error_set; | ||
1558 | return EINA_TRUE; | ||
1559 | |||
1560 | error_set: | ||
1561 | eina_value_type_flush(member->type, mem); | ||
1562 | error_setup: | ||
1563 | return EINA_FALSE; | ||
1564 | } | 1535 | } |
1565 | 1536 | ||
1566 | static inline Eina_Bool | 1537 | static inline Eina_Bool |
@@ -1571,8 +1542,9 @@ eina_value_struct_pget(const Eina_Value *value, const char *name, void *ptr) | |||
1571 | const void *mem; | 1542 | const void *mem; |
1572 | Eina_Bool ret; | 1543 | Eina_Bool ret; |
1573 | 1544 | ||
1574 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, 0); | 1545 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE); |
1575 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); | 1546 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); |
1547 | EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE); | ||
1576 | st = (const Eina_Value_Struct *)eina_value_memory_get(value); | 1548 | st = (const Eina_Value_Struct *)eina_value_memory_get(value); |
1577 | if (!st) | 1549 | if (!st) |
1578 | return EINA_FALSE; | 1550 | return EINA_FALSE; |
@@ -1586,6 +1558,119 @@ eina_value_struct_pget(const Eina_Value *value, const char *name, void *ptr) | |||
1586 | ret = eina_value_type_pget(member->type, mem, ptr); | 1558 | ret = eina_value_type_pget(member->type, mem, ptr); |
1587 | return ret; | 1559 | return ret; |
1588 | } | 1560 | } |
1561 | |||
1562 | static inline Eina_Bool | ||
1563 | eina_value_struct_value_get(const Eina_Value *src, const char *name, Eina_Value *dst) | ||
1564 | { | ||
1565 | const Eina_Value_Struct_Member *member; | ||
1566 | const Eina_Value_Struct *st; | ||
1567 | const void *mem; | ||
1568 | |||
1569 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE); | ||
1570 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); | ||
1571 | EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE); | ||
1572 | st = (const Eina_Value_Struct *)eina_value_memory_get(src); | ||
1573 | if (!st) | ||
1574 | return EINA_FALSE; | ||
1575 | member = eina_value_struct_member_find(st, name); | ||
1576 | if (!member) | ||
1577 | return EINA_FALSE; | ||
1578 | mem = eina_value_struct_member_memory_get(st, member); | ||
1579 | if (!mem) | ||
1580 | return EINA_FALSE; | ||
1581 | if (!eina_value_setup(dst, member->type)) | ||
1582 | return EINA_FALSE; | ||
1583 | if (!eina_value_pset(dst, mem)) | ||
1584 | { | ||
1585 | eina_value_flush(dst); | ||
1586 | return EINA_FALSE; | ||
1587 | } | ||
1588 | return EINA_TRUE; | ||
1589 | } | ||
1590 | |||
1591 | static inline Eina_Bool | ||
1592 | eina_value_struct_value_set(Eina_Value *dst, const char *name, const Eina_Value *src) | ||
1593 | { | ||
1594 | const Eina_Value_Struct_Member *member; | ||
1595 | Eina_Value_Struct *st; | ||
1596 | void *mem; | ||
1597 | const void *ptr; | ||
1598 | |||
1599 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE); | ||
1600 | EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE); | ||
1601 | EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE); | ||
1602 | |||
1603 | st = (Eina_Value_Struct *)eina_value_memory_get(dst); | ||
1604 | if (!st) | ||
1605 | return EINA_FALSE; | ||
1606 | member = eina_value_struct_member_find(st, name); | ||
1607 | if (!member) | ||
1608 | return EINA_FALSE; | ||
1609 | EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE); | ||
1610 | |||
1611 | mem = eina_value_struct_member_memory_get(st, member); | ||
1612 | if (!mem) | ||
1613 | return EINA_FALSE; | ||
1614 | |||
1615 | ptr = eina_value_memory_get(src); | ||
1616 | if (!ptr) | ||
1617 | return EINA_FALSE; | ||
1618 | |||
1619 | return eina_value_type_pset(member->type, mem, ptr); | ||
1620 | } | ||
1621 | |||
1622 | static inline Eina_Bool | ||
1623 | eina_value_struct_member_value_get(const Eina_Value *src, const Eina_Value_Struct_Member *member, Eina_Value *dst) | ||
1624 | { | ||
1625 | const Eina_Value_Struct *st; | ||
1626 | const void *mem; | ||
1627 | |||
1628 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE); | ||
1629 | EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE); | ||
1630 | EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE); | ||
1631 | st = (const Eina_Value_Struct *)eina_value_memory_get(src); | ||
1632 | if (!st) | ||
1633 | return EINA_FALSE; | ||
1634 | mem = eina_value_struct_member_memory_get(st, member); | ||
1635 | if (!mem) | ||
1636 | return EINA_FALSE; | ||
1637 | if (!eina_value_setup(dst, member->type)) | ||
1638 | return EINA_FALSE; | ||
1639 | if (!eina_value_pset(dst, mem)) | ||
1640 | { | ||
1641 | eina_value_flush(dst); | ||
1642 | return EINA_FALSE; | ||
1643 | } | ||
1644 | return EINA_TRUE; | ||
1645 | } | ||
1646 | |||
1647 | static inline Eina_Bool | ||
1648 | eina_value_struct_member_value_set(Eina_Value *dst, const Eina_Value_Struct_Member *member, const Eina_Value *src) | ||
1649 | { | ||
1650 | Eina_Value_Struct *st; | ||
1651 | void *mem; | ||
1652 | const void *ptr; | ||
1653 | |||
1654 | EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE); | ||
1655 | EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE); | ||
1656 | EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE); | ||
1657 | |||
1658 | st = (Eina_Value_Struct *)eina_value_memory_get(dst); | ||
1659 | if (!st) | ||
1660 | return EINA_FALSE; | ||
1661 | EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE); | ||
1662 | |||
1663 | mem = eina_value_struct_member_memory_get(st, member); | ||
1664 | if (!mem) | ||
1665 | return EINA_FALSE; | ||
1666 | |||
1667 | ptr = eina_value_memory_get(src); | ||
1668 | if (!ptr) | ||
1669 | return EINA_FALSE; | ||
1670 | |||
1671 | return eina_value_type_pset(member->type, mem, ptr); | ||
1672 | } | ||
1673 | |||
1589 | #undef EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL | 1674 | #undef EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL |
1590 | 1675 | ||
1591 | 1676 | ||
diff --git a/libraries/eina/src/include/eina_list.h b/libraries/eina/src/include/eina_list.h index db65e17..c8ef06d 100644 --- a/libraries/eina/src/include/eina_list.h +++ b/libraries/eina/src/include/eina_list.h | |||
@@ -881,13 +881,13 @@ EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUS | |||
881 | * @brief Sort a list according to the ordering func will return. | 881 | * @brief Sort a list according to the ordering func will return. |
882 | * | 882 | * |
883 | * @param list The list handle to sort. | 883 | * @param list The list handle to sort. |
884 | * @param size The length of the list to sort. | 884 | * @param limit The maximum number of list elements to sort. |
885 | * @param func A function pointer that can handle comparing the list data | 885 | * @param func A function pointer that can handle comparing the list data |
886 | * nodes. | 886 | * nodes. |
887 | * @return the new head of list. | 887 | * @return the new head of list. |
888 | * | 888 | * |
889 | * This function sorts @p list. @p size if the number of the first | 889 | * This function sorts @p list. @p size if the number of the first |
890 | * element to sort. If @p size is 0 or greater than the number of | 890 | * element to sort. If @p limit is 0 or greater than the number of |
891 | * elements in @p list, all the elements are sorted. @p func is used to | 891 | * elements in @p list, all the elements are sorted. @p func is used to |
892 | * compare two elements of @p list. If @p list or @p func are @c NULL, | 892 | * compare two elements of @p list. If @p list or @p func are @c NULL, |
893 | * this function returns @c NULL. | 893 | * this function returns @c NULL. |
@@ -920,7 +920,7 @@ EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUS | |||
920 | * | 920 | * |
921 | * @warning @p list must be a pointer to the first element of the list. | 921 | * @warning @p list must be a pointer to the first element of the list. |
922 | */ | 922 | */ |
923 | EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; | 923 | EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; |
924 | 924 | ||
925 | 925 | ||
926 | /** | 926 | /** |
diff --git a/libraries/eina/src/include/eina_stringshare.h b/libraries/eina/src/include/eina_stringshare.h index 862b2b2..8edadd2 100644 --- a/libraries/eina/src/include/eina_stringshare.h +++ b/libraries/eina/src/include/eina_stringshare.h | |||
@@ -126,6 +126,20 @@ | |||
126 | * string creation/destruction speed, reduces memory use and decreases | 126 | * string creation/destruction speed, reduces memory use and decreases |
127 | * memory fragmentation, so a win all-around. | 127 | * memory fragmentation, so a win all-around. |
128 | * | 128 | * |
129 | * Using eina stringshares usually boils down to: | ||
130 | * @code | ||
131 | * const char *str = eina_stringshare_add("My string"); | ||
132 | * ... | ||
133 | * //Use str | ||
134 | * ... | ||
135 | * eina_stringshare_del(str); | ||
136 | * @endcode | ||
137 | * @note It's very important to note that string shares are @b @c const, | ||
138 | * changing them will result in undefined behavior. | ||
139 | * @note eina_stringshare_del() @b doesn't guarantee the string share will be | ||
140 | * freed, it releases a reference to it, but if other references to it still | ||
141 | * exist the string share will live until those are released. | ||
142 | * | ||
129 | * The following diagram gives an idea of what happens as you create strings | 143 | * The following diagram gives an idea of what happens as you create strings |
130 | * with eina_stringshare_add(): | 144 | * with eina_stringshare_add(): |
131 | * | 145 | * |
@@ -148,6 +162,15 @@ | |||
148 | * @{ | 162 | * @{ |
149 | */ | 163 | */ |
150 | 164 | ||
165 | /** | ||
166 | * @typedef Eina_Stringshare | ||
167 | * | ||
168 | * Interchangeable with "const char *" but still a good visual hint for the | ||
169 | * purpose. Maybe in the far far future we'll even add strict type checking. | ||
170 | * | ||
171 | * @since 1.2.0 | ||
172 | */ | ||
173 | typedef const char Eina_Stringshare; | ||
151 | 174 | ||
152 | /** | 175 | /** |
153 | * @brief Retrieve an instance of a string for use in a program. | 176 | * @brief Retrieve an instance of a string for use in a program. |
@@ -168,7 +191,7 @@ | |||
168 | * | 191 | * |
169 | * @see eina_share_common_add() | 192 | * @see eina_share_common_add() |
170 | */ | 193 | */ |
171 | EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT; | 194 | EAPI Eina_Stringshare *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT; |
172 | 195 | ||
173 | /** | 196 | /** |
174 | * @brief Retrieve an instance of a string for use in a program. | 197 | * @brief Retrieve an instance of a string for use in a program. |
@@ -188,7 +211,7 @@ EAPI const char *eina_stringshare_add_length(const char *str, unsigned in | |||
188 | * | 211 | * |
189 | * @see eina_stringshare_add_length() | 212 | * @see eina_stringshare_add_length() |
190 | */ | 213 | */ |
191 | EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT; | 214 | EAPI Eina_Stringshare *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT; |
192 | 215 | ||
193 | /** | 216 | /** |
194 | * @brief Retrieve an instance of a string for use in a program | 217 | * @brief Retrieve an instance of a string for use in a program |
@@ -209,7 +232,7 @@ EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_R | |||
209 | * | 232 | * |
210 | * @see eina_stringshare_nprintf() | 233 | * @see eina_stringshare_nprintf() |
211 | */ | 234 | */ |
212 | EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2); | 235 | EAPI Eina_Stringshare *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2); |
213 | 236 | ||
214 | /** | 237 | /** |
215 | * @brief Retrieve an instance of a string for use in a program | 238 | * @brief Retrieve an instance of a string for use in a program |
@@ -231,7 +254,7 @@ EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_ | |||
231 | * | 254 | * |
232 | * @see eina_stringshare_nprintf() | 255 | * @see eina_stringshare_nprintf() |
233 | */ | 256 | */ |
234 | EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT; | 257 | EAPI Eina_Stringshare *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT; |
235 | 258 | ||
236 | /** | 259 | /** |
237 | * @brief Retrieve an instance of a string for use in a program | 260 | * @brief Retrieve an instance of a string for use in a program |
@@ -251,7 +274,7 @@ EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) | |||
251 | * | 274 | * |
252 | * @see eina_stringshare_printf() | 275 | * @see eina_stringshare_printf() |
253 | */ | 276 | */ |
254 | EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3); | 277 | EAPI Eina_Stringshare *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3); |
255 | 278 | ||
256 | /** | 279 | /** |
257 | * Increment references of the given shared string. | 280 | * Increment references of the given shared string. |
@@ -267,7 +290,7 @@ EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *f | |||
267 | * | 290 | * |
268 | * There is no unref since this is the work of eina_share_common_del(). | 291 | * There is no unref since this is the work of eina_share_common_del(). |
269 | */ | 292 | */ |
270 | EAPI const char *eina_stringshare_ref(const char *str); | 293 | EAPI Eina_Stringshare *eina_stringshare_ref(Eina_Stringshare *str); |
271 | 294 | ||
272 | /** | 295 | /** |
273 | * @brief Note that the given string has lost an instance. | 296 | * @brief Note that the given string has lost an instance. |
@@ -282,7 +305,7 @@ EAPI const char *eina_stringshare_ref(const char *str); | |||
282 | * Note that if the given pointer is not shared or NULL, bad things | 305 | * Note that if the given pointer is not shared or NULL, bad things |
283 | * will happen, likely a segmentation fault. | 306 | * will happen, likely a segmentation fault. |
284 | */ | 307 | */ |
285 | EAPI void eina_stringshare_del(const char *str); | 308 | EAPI void eina_stringshare_del(Eina_Stringshare *str); |
286 | 309 | ||
287 | /** | 310 | /** |
288 | * @brief Note that the given string @b must be shared. | 311 | * @brief Note that the given string @b must be shared. |
@@ -296,7 +319,7 @@ EAPI void eina_stringshare_del(const char *str); | |||
296 | * things will happen, likely a segmentation fault. If in doubt, try | 319 | * things will happen, likely a segmentation fault. If in doubt, try |
297 | * strlen(). | 320 | * strlen(). |
298 | */ | 321 | */ |
299 | EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_WARN_UNUSED_RESULT; | 322 | EAPI int eina_stringshare_strlen(Eina_Stringshare *str) EINA_PURE EINA_WARN_UNUSED_RESULT; |
300 | 323 | ||
301 | /** | 324 | /** |
302 | * @brief Dump the contents of the share_common. | 325 | * @brief Dump the contents of the share_common. |
@@ -306,8 +329,8 @@ EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_ | |||
306 | */ | 329 | */ |
307 | EAPI void eina_stringshare_dump(void); | 330 | EAPI void eina_stringshare_dump(void); |
308 | 331 | ||
309 | static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1); | 332 | static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) EINA_ARG_NONNULL(1); |
310 | static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1); | 333 | static inline Eina_Bool eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1); |
311 | 334 | ||
312 | #include "eina_inline_stringshare.x" | 335 | #include "eina_inline_stringshare.x" |
313 | 336 | ||
diff --git a/libraries/eina/src/include/eina_types.h b/libraries/eina/src/include/eina_types.h index 1653949..b0a7cf8 100644 --- a/libraries/eina/src/include/eina_types.h +++ b/libraries/eina/src/include/eina_types.h | |||
@@ -98,13 +98,13 @@ | |||
98 | 98 | ||
99 | #ifdef __GNUC__ | 99 | #ifdef __GNUC__ |
100 | # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) | 100 | # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) |
101 | # define EINA_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) | 101 | # define EINA_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) |
102 | # else | 102 | # else |
103 | # define EINA_WARN_UNUSED_RESULT | 103 | # define EINA_WARN_UNUSED_RESULT |
104 | # endif | 104 | # endif |
105 | 105 | ||
106 | # if (!defined(EINA_SAFETY_CHECKS)) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) | 106 | # if (!defined(EINA_SAFETY_CHECKS)) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) |
107 | # define EINA_ARG_NONNULL(idx, ...) __attribute__ ((nonnull(idx, ## __VA_ARGS__))) | 107 | # define EINA_ARG_NONNULL(idx, ...) __attribute__ ((__nonnull__(idx, ## __VA_ARGS__))) |
108 | # else | 108 | # else |
109 | # define EINA_ARG_NONNULL(idx, ...) | 109 | # define EINA_ARG_NONNULL(idx, ...) |
110 | # endif | 110 | # endif |
@@ -116,19 +116,23 @@ | |||
116 | # endif | 116 | # endif |
117 | 117 | ||
118 | # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) | 118 | # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) |
119 | # define EINA_MALLOC __attribute__ ((malloc)) | 119 | # define EINA_MALLOC __attribute__ ((__malloc__)) |
120 | # define EINA_PURE __attribute__ ((pure)) | 120 | # define EINA_PURE __attribute__ ((__pure__)) |
121 | # else | 121 | # else |
122 | # define EINA_MALLOC | 122 | # define EINA_MALLOC |
123 | # define EINA_PURE | 123 | # define EINA_PURE |
124 | # endif | 124 | # endif |
125 | 125 | ||
126 | # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) | 126 | # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) |
127 | # define EINA_PRINTF(fmt, arg) __attribute__((format (printf, fmt, arg))) | 127 | # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 3) |
128 | # define EINA_SCANF(fmt, arg) __attribute__((format (scanf, fmt, arg))) | 128 | # define EINA_PRINTF(fmt, arg) __attribute__((__format__ (__gnu_printf__, fmt, arg))) |
129 | # define EINA_FORMAT(fmt) __attribute__((format_arg(fmt))) | 129 | # else |
130 | # define EINA_CONST __attribute__((const)) | 130 | # define EINA_PRINTF(fmt, arg) __attribute__((__format__ (__printf__, fmt, arg))) |
131 | # define EINA_NOINSTRUMENT __attribute__((no_instrument_function)) | 131 | # endif |
132 | # define EINA_SCANF(fmt, arg) __attribute__((__format__ (__scanf__, fmt, arg))) | ||
133 | # define EINA_FORMAT(fmt) __attribute__((__format_arg__(fmt))) | ||
134 | # define EINA_CONST __attribute__((__const__)) | ||
135 | # define EINA_NOINSTRUMENT __attribute__((__no_instrument_function__)) | ||
132 | # define EINA_UNLIKELY(exp) __builtin_expect((exp), 0) | 136 | # define EINA_UNLIKELY(exp) __builtin_expect((exp), 0) |
133 | # define EINA_LIKELY(exp) __builtin_expect((exp), 1) | 137 | # define EINA_LIKELY(exp) __builtin_expect((exp), 1) |
134 | # else | 138 | # else |
@@ -276,6 +280,16 @@ typedef void (*Eina_Free_Cb)(void *data); | |||
276 | #define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function) | 280 | #define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function) |
277 | 281 | ||
278 | /** | 282 | /** |
283 | * @def EINA_C_ARRAY_LENGTH | ||
284 | * Macro to return the array length of a standard c array. | ||
285 | * For example: | ||
286 | * int foo[] = { 0, 1, 2, 3 }; | ||
287 | * would return 4 and not 4 * sizeof(int). | ||
288 | * @since 1.2.0 | ||
289 | */ | ||
290 | #define EINA_C_ARRAY_LENGTH(arr) (sizeof(arr) / sizeof((arr)[0])) | ||
291 | |||
292 | /** | ||
279 | * @} | 293 | * @} |
280 | */ | 294 | */ |
281 | 295 | ||
diff --git a/libraries/eina/src/include/eina_value.h b/libraries/eina/src/include/eina_value.h index 846c4ef..341781f 100644 --- a/libraries/eina/src/include/eina_value.h +++ b/libraries/eina/src/include/eina_value.h | |||
@@ -19,12 +19,244 @@ | |||
19 | #ifndef EINA_VALUE_H_ | 19 | #ifndef EINA_VALUE_H_ |
20 | #define EINA_VALUE_H_ | 20 | #define EINA_VALUE_H_ |
21 | 21 | ||
22 | #include <stdarg.h> | ||
23 | |||
22 | #include "eina_types.h" | 24 | #include "eina_types.h" |
23 | #include "eina_fp.h" /* defines int64_t and uint64_t */ | 25 | #include "eina_fp.h" /* defines int64_t and uint64_t */ |
24 | #include "eina_inarray.h" | 26 | #include "eina_inarray.h" |
25 | #include "eina_list.h" | 27 | #include "eina_list.h" |
26 | #include "eina_hash.h" | 28 | #include "eina_hash.h" |
27 | #include <stdarg.h> | 29 | |
30 | /** | ||
31 | * @page eina_value_example_01_page Eina_Value usage | ||
32 | * @dontinclude eina_value_01.c | ||
33 | * | ||
34 | * This very simple example shows how to use some of the basic features of eina | ||
35 | * value: setting and getting values, converting between types and printing a | ||
36 | * value as a string. | ||
37 | * | ||
38 | * Our main function starts out with the basic, declaring some variables and | ||
39 | * initializing eina: | ||
40 | * @until eina_init | ||
41 | * | ||
42 | * Now we can jump into using eina value. We set a value, get this value and | ||
43 | * then print it: | ||
44 | * @until printf | ||
45 | * | ||
46 | * In the above snippet of code we printed an @c int value, we can however print | ||
47 | * the value as a string: | ||
48 | * @until free | ||
49 | * | ||
50 | * And once done with a value it's good practice to destroy it: | ||
51 | * @until eina_value_flush | ||
52 | * | ||
53 | * We now reuse @c v to store a string, get its value and print it: | ||
54 | * @until printf | ||
55 | * @note Since @c s is the value and not returned by @c eina_value_to_string() | ||
56 | * we don't need to free it. | ||
57 | * | ||
58 | * Just because we stored a string doesn't mean we can't use the @c | ||
59 | * eina_value_to_string() function, we can and it's important to note that it | ||
60 | * will return not the stored string but rather a copy of it(one we have to | ||
61 | * free): | ||
62 | * @until eina_value_flush | ||
63 | * | ||
64 | * And now to explore conversions between two type we'll create another value: | ||
65 | * @until eina_value_setup | ||
66 | * | ||
67 | * And make sure @c v and @c otherv have different types: | ||
68 | * @until eina_value_setup | ||
69 | * | ||
70 | * We then set a value to @c v and have it converted, to do this we don't need | ||
71 | * to tell to which type we want to convert, we just say were we want to store | ||
72 | * the converted value and eina value will figure out what to convert to, and | ||
73 | * how: | ||
74 | * @until eina_value_convert | ||
75 | * | ||
76 | * And now let's check the conversion worked: | ||
77 | * @until printf | ||
78 | * | ||
79 | * But converting to strings is not particularly exciting, @c | ||
80 | * eina_value_to_string() already did that, so now let's make the conversion the | ||
81 | * other way around, from string to @c int: | ||
82 | * @until printf | ||
83 | * | ||
84 | * And once done, destroy the values: | ||
85 | * @until } | ||
86 | * | ||
87 | * Full source code: @ref eina_value_01_c | ||
88 | */ | ||
89 | |||
90 | /** | ||
91 | * @page eina_value_01_c eina_value_01.c | ||
92 | * @include eina_value_01.c | ||
93 | * @example eina_value_01.c | ||
94 | */ | ||
95 | |||
96 | /** | ||
97 | * @page eina_value_example_02_page Eina_Value struct usage | ||
98 | * @dontinclude eina_value_02.c | ||
99 | * | ||
100 | * This example will examine a hypothetical situation in which we had a | ||
101 | * structure(which represented parameters) with two fields, and then need to add | ||
102 | * a third field to our structure. If using structs directly we'd need to | ||
103 | * rewrite every piece of code that touches the struct, by using eina value, and | ||
104 | * thus having the compiler not even know the struct, we can reduce the amount | ||
105 | * of changes needed and retain interoperability between the old and new format. | ||
106 | * | ||
107 | * Our example will start with a function that creates descriptions of both of | ||
108 | * our structs for eina value usage. The first step is to create a struct and | ||
109 | * describe its members: | ||
110 | * @until v1_members[1] | ||
111 | * @note We can't pass the types of the members to EINA_VALUE_STRUCT_MEMBER | ||
112 | * macro because they are not constant initializers. | ||
113 | * | ||
114 | * So far it should be pretty easy to understand, we said @c My_Struct_V1 has | ||
115 | * two members, one of type @c int and another of type @c char. We now create | ||
116 | * the description of the actual struct, again nothing overly complex, we signal | ||
117 | * which version of EINA_VALUE_STRUCT we're using, we declare no special | ||
118 | * operations, our members and our size: | ||
119 | * @until V1_DESC | ||
120 | * | ||
121 | * We now repeat the process for the second version of our struct, the only | ||
122 | * difference is the addition of a third parameter of type @c int : | ||
123 | * @until V2_DESC | ||
124 | * @until } | ||
125 | * | ||
126 | * We'll now look at a function that sets the values of our structs. For | ||
127 | * simplicity's sake we initialize it we random values, a real world case would | ||
128 | * read these values from a file, a database or even from the network. The | ||
129 | * fundamental detail here is that this function works for both V1 and V2 | ||
130 | * structs, this is because setting a parameter that a struct that doesn't have | ||
131 | * does nothing without throwing any errors: | ||
132 | * @until } | ||
133 | * @note While using eina_value_struct_set() with an in-existing parameter | ||
134 | * causes no error, it does return #EINA_FALSE, to notify it was not possible | ||
135 | * to set the value. This could be used to determine that we're handling a V1 | ||
136 | * struct and take some action based on that. | ||
137 | * | ||
138 | * The next thing is to do is see what a function that uses the values of the | ||
139 | * struct looks like. We'll again be very simplistic in our usage, we'll just | ||
140 | * print the values, but a real world case, might send these values to another | ||
141 | * process use them to open a network/database connection or anything else. | ||
142 | * Since all versions of the struct have @c param1 and @c param2 we'll | ||
143 | * unconditionally use them: | ||
144 | * @until printf | ||
145 | * | ||
146 | * The next step is to conditionally use @c param3, which can fortunately be | ||
147 | * done in the same step in which we get it's value: | ||
148 | * @until } | ||
149 | * | ||
150 | * There we've now got functions that can both populate and use values from both | ||
151 | * our structs, so now let's actually use them in our main function by creating | ||
152 | * a struct of each type, initializing them and them using them: | ||
153 | * @until } | ||
154 | * | ||
155 | * This concludes our example. For the full source code see @ref | ||
156 | * eina_value_02_c. | ||
157 | */ | ||
158 | |||
159 | /** | ||
160 | * @page eina_value_02_c eina_value_02.c | ||
161 | * @include eina_value_02.c | ||
162 | * @example eina_value_02.c | ||
163 | */ | ||
164 | |||
165 | /** | ||
166 | * @page eina_value_example_03_page Eina value custom type example | ||
167 | * @dontinclude eina_value_03.c | ||
168 | * | ||
169 | * For this example we'll be creating our own custom type of eina value. Eina | ||
170 | * value can already store struct timeval(man gettimeofday for more information) | ||
171 | * but it has no type to store struct timezone, so that's what this example will | ||
172 | * do. | ||
173 | * @note struct timezone is actually obsolete, so using it in real world | ||
174 | * programs is probably not a good idea, but this is an example so, bear with | ||
175 | * us. | ||
176 | * | ||
177 | * To create our own custom eina value type we need to define functions to | ||
178 | * do the following operations on it: | ||
179 | * @li Setup | ||
180 | * @li Flush | ||
181 | * @li Copy | ||
182 | * @li Compare | ||
183 | * @li Set | ||
184 | * @li Get | ||
185 | * @li Conversion | ||
186 | * | ||
187 | * Most of this functions are very simple, so let's look at them, starting with | ||
188 | * setup which only clear the memory so that we can be certain we won't be using | ||
189 | * stale data: | ||
190 | * @until } | ||
191 | * | ||
192 | * Now the flush function, which is even simpler, it does nothing, that's | ||
193 | * because there is nothing we need to do, all the necessary steps are taken by | ||
194 | * eina value itself: | ||
195 | * @until } | ||
196 | * | ||
197 | * Our next function, copy, is a bit more interesting, but not much, it just | ||
198 | * casts our void pointers to struct timezone pointers and does the copy: | ||
199 | * @until } | ||
200 | * @note By now you might be wondering why our functions receive void pointers | ||
201 | * instead of pointers to struct timezone, and this is a good point. The reason | ||
202 | * for this is that eina value doesn't know anything about our type so it must | ||
203 | * use a generic void pointer, casting that pointer into a proper value is the | ||
204 | * job of the implementor of the new type. | ||
205 | * | ||
206 | * Next we have the comparison function, which compares the @c tz_minuteswest | ||
207 | * field of struct timezone, we don't compare @c tz_dsttime because that field | ||
208 | * is not used in linux: | ||
209 | * @until } | ||
210 | * | ||
211 | * Next we have setting, this however requires not one but rather two functions, | ||
212 | * the reason for this is because to be able to receive arguments of any type | ||
213 | * eina value uses @ref https://wikipedia.org/wiki/Variadic_functions "variadic | ||
214 | * functions", so we need a function to get the argument from a va_list and | ||
215 | * another to actually to the setting. | ||
216 | * | ||
217 | * Lets first look at the pset function which sets the received value to a | ||
218 | * pointer: | ||
219 | * @until } | ||
220 | * | ||
221 | * Next we have the vset function which get the argument from the va_list and | ||
222 | * passes it to the pset function: | ||
223 | * @until } | ||
224 | * | ||
225 | * And now the function to get the value, a very simple copying of the value to | ||
226 | * the given pointer: | ||
227 | * @until } | ||
228 | * | ||
229 | * And finally our conversion function, this is our longest and most interesting | ||
230 | * one. For numeric type we simply assign the value of @c tz_minuteswest to the | ||
231 | * new type and call a set function using it: | ||
232 | * @until EINA_VALUE_TYPE_DOUBLE | ||
233 | * @until return | ||
234 | * @note It would be a good idea to add checks for over and underflow for these | ||
235 | * types and return #EINA_FALSE in thoses cases, we omit this here for brevity. | ||
236 | * | ||
237 | * For string types we use @c snprintf() to format our @c tz_minuteswest field | ||
238 | * and put it in a string(again @c tz_dsttime is ignored because it's not used): | ||
239 | * @until } | ||
240 | * | ||
241 | * Finally we handle any other types by returning an error in that case: | ||
242 | * @until } | ||
243 | * | ||
244 | * Now that we have all the functions, we can populate an @c Eina_Value_Type to | ||
245 | * later use it with @c eina_value_setup(): | ||
246 | * @until } | ||
247 | * | ||
248 | * We can now finally use our new TZ_TYPE with eina value, so lets conclude our | ||
249 | * example by practicing that by setting its value and printing it: | ||
250 | * @until } | ||
251 | * | ||
252 | * For the full source code see @ref eina_value_03_c. | ||
253 | */ | ||
254 | |||
255 | /** | ||
256 | * @page eina_value_03_c eina_value_03.c | ||
257 | * @include eina_value_03.c | ||
258 | * @example eina_value_03.c | ||
259 | */ | ||
28 | 260 | ||
29 | /** | 261 | /** |
30 | * @addtogroup Eina_Data_Types_Group Data Types | 262 | * @addtogroup Eina_Data_Types_Group Data Types |
@@ -43,6 +275,24 @@ | |||
43 | /** | 275 | /** |
44 | * @defgroup Eina_Value_Group Generic Value Storage | 276 | * @defgroup Eina_Value_Group Generic Value Storage |
45 | * | 277 | * |
278 | * Abstracts generic data storage and access to it in an extensible | ||
279 | * and efficient way. | ||
280 | * | ||
281 | * It comes with pre-defined types for numbers, array, list, hash, | ||
282 | * blob and structs. It is able to convert between data types, | ||
283 | * including to string. | ||
284 | * | ||
285 | * It is meant for simple data types, providing uniform access and | ||
286 | * release functions, useful to exchange data preserving their | ||
287 | * types. For more complex hierarchical data, with properties and | ||
288 | * children, reference counting, inheritance and interfaces, see @ref | ||
289 | * Eina_Model_Group. | ||
290 | * | ||
291 | * Examples of usage of the Eina_Value API: | ||
292 | * @li @ref eina_value_example_01_page | ||
293 | * @li @ref eina_value_example_02_page | ||
294 | * @li @ref eina_value_example_03_page | ||
295 | * | ||
46 | * @{ | 296 | * @{ |
47 | */ | 297 | */ |
48 | 298 | ||
@@ -67,6 +317,9 @@ typedef struct _Eina_Value_Type Eina_Value_Type; | |||
67 | * @typedef Eina_Value_Union | 317 | * @typedef Eina_Value_Union |
68 | * Union of all known value types. | 318 | * Union of all known value types. |
69 | * | 319 | * |
320 | * This is only used to specify the minimum payload memory for #Eina_Value. | ||
321 | * | ||
322 | * @internal | ||
70 | * @since 1.2 | 323 | * @since 1.2 |
71 | */ | 324 | */ |
72 | typedef union _Eina_Value_Union Eina_Value_Union; | 325 | typedef union _Eina_Value_Union Eina_Value_Union; |
@@ -75,6 +328,9 @@ typedef union _Eina_Value_Union Eina_Value_Union; | |||
75 | * @union _Eina_Value_Union | 328 | * @union _Eina_Value_Union |
76 | * All possible value types. | 329 | * All possible value types. |
77 | * | 330 | * |
331 | * This is only used to specify the minimum payload memory for #Eina_Value. | ||
332 | * | ||
333 | * @internal | ||
78 | * @since 1.2 | 334 | * @since 1.2 |
79 | */ | 335 | */ |
80 | union _Eina_Value_Union | 336 | union _Eina_Value_Union |
@@ -117,6 +373,15 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT; | |||
117 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG; | 373 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG; |
118 | 374 | ||
119 | /** | 375 | /** |
376 | * @var EINA_VALUE_TYPE_TIMESTAMP | ||
377 | * manages unsigned long type used for timestamps. | ||
378 | * @note this is identical in function to EINA_VALUE_TYPE_ULONG | ||
379 | * | ||
380 | * @since 1.2 | ||
381 | */ | ||
382 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP; | ||
383 | |||
384 | /** | ||
120 | * @var EINA_VALUE_TYPE_UINT64 | 385 | * @var EINA_VALUE_TYPE_UINT64 |
121 | * manages unsigned integer of 64 bits type. | 386 | * manages unsigned integer of 64 bits type. |
122 | * | 387 | * |
@@ -206,10 +471,11 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRING; | |||
206 | * @li eina_value_array_pget() and eina_value_array_pset() | 471 | * @li eina_value_array_pget() and eina_value_array_pset() |
207 | * | 472 | * |
208 | * eina_value_set() takes an #Eina_Value_Array where just @c subtype | 473 | * eina_value_set() takes an #Eina_Value_Array where just @c subtype |
209 | * and @c step are used. If there is an @c array, it will be adopted | 474 | * and @c step are used. If there is an @c array, it will be copied |
210 | * and its contents must be properly configurable as @c subtype | 475 | * (including each item) and its contents must be properly |
211 | * expects. eina_value_pset() takes a pointer to an #Eina_Value_Array. | 476 | * configurable as @c subtype expects. eina_value_pset() takes a |
212 | * For your convenience, use eina_value_array_setup(). | 477 | * pointer to an #Eina_Value_Array. For your convenience, use |
478 | * eina_value_array_setup(). | ||
213 | * | 479 | * |
214 | * eina_value_get() and eina_value_pget() takes a pointer to | 480 | * eina_value_get() and eina_value_pget() takes a pointer to |
215 | * #Eina_Value_Array, it's an exact copy of the current structure in | 481 | * #Eina_Value_Array, it's an exact copy of the current structure in |
@@ -228,10 +494,11 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY; | |||
228 | * @li eina_value_list_pget() and eina_value_list_pset() | 494 | * @li eina_value_list_pget() and eina_value_list_pset() |
229 | * | 495 | * |
230 | * eina_value_set() takes an #Eina_Value_List where just @c subtype is | 496 | * eina_value_set() takes an #Eina_Value_List where just @c subtype is |
231 | * used. If there is an @c list, it will be adopted and its contents | 497 | * used. If there is an @c list, it will be copied (including each |
232 | * must be properly configurable as @c subtype | 498 | * item) and its contents must be properly configurable as @c |
233 | * expects. eina_value_pset() takes a pointer to an #Eina_Value_List. | 499 | * subtype expects. eina_value_pset() takes a pointer to an |
234 | * For your convenience, use eina_value_list_setup(). | 500 | * #Eina_Value_List. For your convenience, use |
501 | * eina_value_list_setup(). | ||
235 | * | 502 | * |
236 | * eina_value_get() and eina_value_pget() takes a pointer to | 503 | * eina_value_get() and eina_value_pget() takes a pointer to |
237 | * #Eina_Value_List, it's an exact copy of the current structure in | 504 | * #Eina_Value_List, it's an exact copy of the current structure in |
@@ -251,9 +518,9 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LIST; | |||
251 | * | 518 | * |
252 | * eina_value_set() takes an #Eina_Value_Hash where just @c subtype | 519 | * eina_value_set() takes an #Eina_Value_Hash where just @c subtype |
253 | * and @c buckets_power_size are used. If there is an @c hash, it will | 520 | * and @c buckets_power_size are used. If there is an @c hash, it will |
254 | * be adopted and its contents must be properly configurable as @c | 521 | * be copied (including each item) and its contents must be |
255 | * subtype expects. eina_value_pset() takes a pointer to an | 522 | * properly configurable as @c subtype expects. eina_value_pset() |
256 | * #Eina_Value_Hash. For your convenience, use | 523 | * takes a pointer to an #Eina_Value_Hash. For your convenience, use |
257 | * eina_value_hash_setup(). | 524 | * eina_value_hash_setup(). |
258 | * | 525 | * |
259 | * eina_value_get() and eina_value_pget() takes a pointer to | 526 | * eina_value_get() and eina_value_pget() takes a pointer to |
@@ -310,9 +577,10 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB; | |||
310 | * @li eina_value_struct_pget() and eina_value_struct_pset() | 577 | * @li eina_value_struct_pget() and eina_value_struct_pset() |
311 | * | 578 | * |
312 | * eina_value_set() takes an #Eina_Value_Struct where just @c desc is | 579 | * eina_value_set() takes an #Eina_Value_Struct where just @c desc is |
313 | * used. If there is an @c memory, it will be adopted and its contents | 580 | * used. If there is an @c memory, it will be copied (including each |
314 | * must be properly configurable as @c desc expects. eina_value_pset() | 581 | * member) and its contents must be properly configurable as @c desc |
315 | * takes a pointer to an #Eina_Value_Struct. For your convenience, use | 582 | * expects. eina_value_pset() takes a pointer to an |
583 | * #Eina_Value_Struct. For your convenience, use | ||
316 | * eina_value_struct_setup(). | 584 | * eina_value_struct_setup(). |
317 | * | 585 | * |
318 | * eina_value_get() and eina_value_pget() takes a pointer to | 586 | * eina_value_get() and eina_value_pget() takes a pointer to |
@@ -324,6 +592,23 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB; | |||
324 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT; | 592 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT; |
325 | 593 | ||
326 | /** | 594 | /** |
595 | * @var EINA_VALUE_TYPE_MODEL | ||
596 | * | ||
597 | * manages Eina_Model type. Use the value get/set to change the model | ||
598 | * in use, it will increase the reference while in use by the value. | ||
599 | * | ||
600 | * eina_value_set() takes a pointer to #Eina_Model, increasing the | ||
601 | * reference. | ||
602 | * | ||
603 | * eina_value_get() takes a pointer to pointer to #Eina_Model, it's an | ||
604 | * exact copy of the current model, no copies are done, no references | ||
605 | * are increased. | ||
606 | * | ||
607 | * @since 1.2 | ||
608 | */ | ||
609 | EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_MODEL; | ||
610 | |||
611 | /** | ||
327 | * @var EINA_ERROR_VALUE_FAILED | 612 | * @var EINA_ERROR_VALUE_FAILED |
328 | * Error identifier corresponding to value check failure. | 613 | * Error identifier corresponding to value check failure. |
329 | * | 614 | * |
@@ -435,7 +720,7 @@ static inline void eina_value_flush(Eina_Value *value) EINA_ARG_NONNULL(1); | |||
435 | * @param copy destination value object | 720 | * @param copy destination value object |
436 | * @return #EINA_TRUE on success, #EINA_FALSE otherwise. | 721 | * @return #EINA_TRUE on success, #EINA_FALSE otherwise. |
437 | * | 722 | * |
438 | * The @a copy object is considered internalized and its existing | 723 | * The @a copy object is considered uninitialized and its existing |
439 | * contents are overwritten (just as if eina_value_flush() was called on | 724 | * contents are overwritten (just as if eina_value_flush() was called on |
440 | * it). | 725 | * it). |
441 | * | 726 | * |
@@ -812,8 +1097,9 @@ static inline const Eina_Value_Type *eina_value_type_get(const Eina_Value *value | |||
812 | 1097 | ||
813 | /** | 1098 | /** |
814 | * @typedef Eina_Value_Array | 1099 | * @typedef Eina_Value_Array |
815 | * Value type for #EINA_VALUE_TYPE_ARRAY | 1100 | * Value type for #EINA_VALUE_TYPE_ARRAY. |
816 | * | 1101 | * |
1102 | * @see #_Eina_Value_Array explains fields. | ||
817 | * @since 1.2 | 1103 | * @since 1.2 |
818 | */ | 1104 | */ |
819 | typedef struct _Eina_Value_Array Eina_Value_Array; | 1105 | typedef struct _Eina_Value_Array Eina_Value_Array; |
@@ -821,6 +1107,7 @@ typedef struct _Eina_Value_Array Eina_Value_Array; | |||
821 | /** | 1107 | /** |
822 | * @struct _Eina_Value_Array | 1108 | * @struct _Eina_Value_Array |
823 | * Used to store the array and its subtype. | 1109 | * Used to store the array and its subtype. |
1110 | * @since 1.2 | ||
824 | */ | 1111 | */ |
825 | struct _Eina_Value_Array | 1112 | struct _Eina_Value_Array |
826 | { | 1113 | { |
@@ -1433,6 +1720,22 @@ static inline Eina_Bool eina_value_array_pappend(Eina_Value *value, | |||
1433 | const void *ptr) EINA_ARG_NONNULL(1); | 1720 | const void *ptr) EINA_ARG_NONNULL(1); |
1434 | 1721 | ||
1435 | /** | 1722 | /** |
1723 | * @brief Retrieves a value from the array as an Eina_Value copy. | ||
1724 | * @param value source value object | ||
1725 | * @param position index of the member | ||
1726 | * @param dst where to return the array member | ||
1727 | * @return #EINA_TRUE on success, #EINA_FALSE otherwise. | ||
1728 | * | ||
1729 | * The argument @a dst is considered uninitialized and it's setup to | ||
1730 | * the type of the member. | ||
1731 | * | ||
1732 | * @since 1.2 | ||
1733 | */ | ||
1734 | static inline Eina_Bool eina_value_array_value_get(const Eina_Value *src, | ||
1735 | unsigned int position, | ||
1736 | Eina_Value *dst) EINA_ARG_NONNULL(1, 3); | ||
1737 | |||
1738 | /** | ||
1436 | * @} | 1739 | * @} |
1437 | */ | 1740 | */ |
1438 | 1741 | ||
@@ -1446,8 +1749,9 @@ static inline Eina_Bool eina_value_array_pappend(Eina_Value *value, | |||
1446 | 1749 | ||
1447 | /** | 1750 | /** |
1448 | * @typedef Eina_Value_List | 1751 | * @typedef Eina_Value_List |
1449 | * Value type for #EINA_VALUE_TYPE_LIST | 1752 | * Value type for #EINA_VALUE_TYPE_LIST. |
1450 | * | 1753 | * |
1754 | * @see #_Eina_Value_List explains fields. | ||
1451 | * @since 1.2 | 1755 | * @since 1.2 |
1452 | */ | 1756 | */ |
1453 | typedef struct _Eina_Value_List Eina_Value_List; | 1757 | typedef struct _Eina_Value_List Eina_Value_List; |
@@ -1455,6 +1759,7 @@ typedef struct _Eina_Value_List Eina_Value_List; | |||
1455 | /** | 1759 | /** |
1456 | * @struct _Eina_Value_List | 1760 | * @struct _Eina_Value_List |
1457 | * Used to store the list and its subtype. | 1761 | * Used to store the list and its subtype. |
1762 | * @since 1.2 | ||
1458 | */ | 1763 | */ |
1459 | struct _Eina_Value_List | 1764 | struct _Eina_Value_List |
1460 | { | 1765 | { |
@@ -2067,8 +2372,9 @@ static inline Eina_Bool eina_value_list_pappend(Eina_Value *value, | |||
2067 | 2372 | ||
2068 | /** | 2373 | /** |
2069 | * @typedef Eina_Value_Hash | 2374 | * @typedef Eina_Value_Hash |
2070 | * Value type for #EINA_VALUE_TYPE_HASH | 2375 | * Value type for #EINA_VALUE_TYPE_HASH. |
2071 | * | 2376 | * |
2377 | * @see #_Eina_Value_Hash explains fields. | ||
2072 | * @since 1.2 | 2378 | * @since 1.2 |
2073 | */ | 2379 | */ |
2074 | typedef struct _Eina_Value_Hash Eina_Value_Hash; | 2380 | typedef struct _Eina_Value_Hash Eina_Value_Hash; |
@@ -2076,6 +2382,7 @@ typedef struct _Eina_Value_Hash Eina_Value_Hash; | |||
2076 | /** | 2382 | /** |
2077 | * @struct _Eina_Value_Hash | 2383 | * @struct _Eina_Value_Hash |
2078 | * Used to store the hash and its subtype. | 2384 | * Used to store the hash and its subtype. |
2385 | * @since 1.2 | ||
2079 | */ | 2386 | */ |
2080 | struct _Eina_Value_Hash | 2387 | struct _Eina_Value_Hash |
2081 | { | 2388 | { |
@@ -2409,19 +2716,25 @@ static inline Eina_Bool eina_value_hash_pget(const Eina_Value *value, | |||
2409 | /** | 2716 | /** |
2410 | * @typedef Eina_Value_Blob_Operations | 2717 | * @typedef Eina_Value_Blob_Operations |
2411 | * How to manage blob. Any @c NULL callback is ignored. | 2718 | * How to manage blob. Any @c NULL callback is ignored. |
2719 | * @see #_Eina_Value_Blob_Operations explains fields. | ||
2412 | * @since 1.2 | 2720 | * @since 1.2 |
2413 | */ | 2721 | */ |
2414 | typedef struct _Eina_Value_Blob_Operations Eina_Value_Blob_Operations; | 2722 | typedef struct _Eina_Value_Blob_Operations Eina_Value_Blob_Operations; |
2415 | 2723 | ||
2416 | /** | 2724 | /** |
2725 | * @def EINA_VALUE_BLOB_OPERATIONS_VERSION | ||
2726 | * Current API version, used to validate #_Eina_Value_Blob_Operations. | ||
2727 | */ | ||
2728 | #define EINA_VALUE_BLOB_OPERATIONS_VERSION (1) | ||
2729 | |||
2730 | /** | ||
2417 | * @struct _Eina_Value_Blob_Operations | 2731 | * @struct _Eina_Value_Blob_Operations |
2418 | * How to manage blob. Any @c NULL callback is ignored. | 2732 | * How to manage blob. Any @c NULL callback is ignored. |
2419 | * @since 1.2 | 2733 | * @since 1.2 |
2420 | */ | 2734 | */ |
2421 | struct _Eina_Value_Blob_Operations | 2735 | struct _Eina_Value_Blob_Operations |
2422 | { | 2736 | { |
2423 | #define EINA_VALUE_BLOB_OPERATIONS_VERSION (1) | 2737 | unsigned int version; /**< must be #EINA_VALUE_BLOB_OPERATIONS_VERSION */ |
2424 | unsigned int version; /**< must be EINA_VALUE_BLOB_OPERATIONS_VERSION */ | ||
2425 | void (*free)(const Eina_Value_Blob_Operations *ops, void *memory, size_t size); | 2738 | void (*free)(const Eina_Value_Blob_Operations *ops, void *memory, size_t size); |
2426 | void *(*copy)(const Eina_Value_Blob_Operations *ops, const void *memory, size_t size); | 2739 | void *(*copy)(const Eina_Value_Blob_Operations *ops, const void *memory, size_t size); |
2427 | int (*compare)(const Eina_Value_Blob_Operations *ops, const void *data1, size_t size_data1, const void *data2, size_t size_data2); | 2740 | int (*compare)(const Eina_Value_Blob_Operations *ops, const void *data1, size_t size_data1, const void *data2, size_t size_data2); |
@@ -2441,12 +2754,16 @@ EAPI extern const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC; | |||
2441 | 2754 | ||
2442 | /** | 2755 | /** |
2443 | * @typedef Eina_Value_Blob | 2756 | * @typedef Eina_Value_Blob |
2757 | * Value type for #EINA_VALUE_TYPE_BLOB. | ||
2758 | * | ||
2759 | * @see #_Eina_Value_Blob explains fields. | ||
2444 | * @since 1.2 | 2760 | * @since 1.2 |
2445 | */ | 2761 | */ |
2446 | typedef struct _Eina_Value_Blob Eina_Value_Blob; | 2762 | typedef struct _Eina_Value_Blob Eina_Value_Blob; |
2447 | 2763 | ||
2448 | /** | 2764 | /** |
2449 | * @struct _Eina_Value_Blob | 2765 | * @struct _Eina_Value_Blob |
2766 | * Used to store the blob information and management operations. | ||
2450 | * @since 1.2 | 2767 | * @since 1.2 |
2451 | */ | 2768 | */ |
2452 | struct _Eina_Value_Blob | 2769 | struct _Eina_Value_Blob |
@@ -2469,6 +2786,11 @@ struct _Eina_Value_Blob | |||
2469 | /** | 2786 | /** |
2470 | * @typedef Eina_Value_Struct_Operations | 2787 | * @typedef Eina_Value_Struct_Operations |
2471 | * How to manage struct. Any @c NULL callback is ignored. | 2788 | * How to manage struct. Any @c NULL callback is ignored. |
2789 | * | ||
2790 | * A structure can specify alternative methods to allocate, free and | ||
2791 | * copy itself. See structure definition for all methods. | ||
2792 | * | ||
2793 | * @see #_Eina_Value_Struct_Operations explains fields. | ||
2472 | * @since 1.2 | 2794 | * @since 1.2 |
2473 | */ | 2795 | */ |
2474 | typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations; | 2796 | typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations; |
@@ -2476,6 +2798,12 @@ typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations; | |||
2476 | /** | 2798 | /** |
2477 | * @typedef Eina_Value_Struct_Member | 2799 | * @typedef Eina_Value_Struct_Member |
2478 | * Describes a single member of struct. | 2800 | * Describes a single member of struct. |
2801 | * | ||
2802 | * The member holds a name, type and its byte offset within the struct | ||
2803 | * memory. Most Eina_Value_Struct functions takes the member name as | ||
2804 | * parameter, as in eina_value_struct_set(). | ||
2805 | * | ||
2806 | * @see #_Eina_Value_Struct_Member explains fields. | ||
2479 | * @since 1.2 | 2807 | * @since 1.2 |
2480 | */ | 2808 | */ |
2481 | typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member; | 2809 | typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member; |
@@ -2483,30 +2811,39 @@ typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member; | |||
2483 | /** | 2811 | /** |
2484 | * @typedef Eina_Value_Struct_Desc | 2812 | * @typedef Eina_Value_Struct_Desc |
2485 | * Describes the struct by listing its size, members and operations. | 2813 | * Describes the struct by listing its size, members and operations. |
2814 | * @see #_Eina_Value_Struct_Desc explains fields. | ||
2486 | * @since 1.2 | 2815 | * @since 1.2 |
2487 | */ | 2816 | */ |
2488 | typedef struct _Eina_Value_Struct_Desc Eina_Value_Struct_Desc; | 2817 | typedef struct _Eina_Value_Struct_Desc Eina_Value_Struct_Desc; |
2489 | 2818 | ||
2490 | /** | 2819 | /** |
2491 | * @typedef Eina_Value_Struct | 2820 | * @typedef Eina_Value_Struct |
2821 | * Value type for #EINA_VALUE_TYPE_STRUCT. | ||
2822 | * | ||
2823 | * @see #_Eina_Value_Struct explains fields. | ||
2492 | * @since 1.2 | 2824 | * @since 1.2 |
2493 | */ | 2825 | */ |
2494 | typedef struct _Eina_Value_Struct Eina_Value_Struct; | 2826 | typedef struct _Eina_Value_Struct Eina_Value_Struct; |
2495 | 2827 | ||
2496 | /** | 2828 | /** |
2829 | * @def EINA_VALUE_STRUCT_OPERATIONS_VERSION | ||
2830 | * Current API version, used to validate #_Eina_Value_Struct_Operations. | ||
2831 | */ | ||
2832 | #define EINA_VALUE_STRUCT_OPERATIONS_VERSION (1) | ||
2833 | |||
2834 | /** | ||
2497 | * @struct _Eina_Value_Struct_Operations | 2835 | * @struct _Eina_Value_Struct_Operations |
2498 | * How to manage struct. Any @c NULL callback is ignored. | 2836 | * How to manage struct. Any @c NULL callback is ignored. |
2499 | * @since 1.2 | 2837 | * @since 1.2 |
2500 | */ | 2838 | */ |
2501 | struct _Eina_Value_Struct_Operations | 2839 | struct _Eina_Value_Struct_Operations |
2502 | { | 2840 | { |
2503 | #define EINA_VALUE_STRUCT_OPERATIONS_VERSION (1) | 2841 | unsigned int version; /**< must be #EINA_VALUE_STRUCT_OPERATIONS_VERSION */ |
2504 | unsigned int version; /**< must be EINA_VALUE_STRUCT_OPERATIONS_VERSION */ | 2842 | void *(*alloc)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc); /**< How to allocate struct memory to be managed by the Eina_Value */ |
2505 | void *(*alloc)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc); | 2843 | void (*free)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, void *memory); /**< How to release memory managed by the Eina_Value */ |
2506 | void (*free)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, void *memory); | 2844 | void *(*copy)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *memory); /**< How to copy struct memory from an existing Eina_Value, if not provided alloc() will be used, then every member is copied using eina_value_type_copy() with member's type. */ |
2507 | void *(*copy)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *memory); | 2845 | int (*compare)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *data1, const void *data2); /**< How to compare two struct memories */ |
2508 | int (*compare)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *data1, const void *data2); | 2846 | const Eina_Value_Struct_Member *(*find_member)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const char *name); /**< How to find description for member. For huge structures consider using binary search, stringshared, hash or gperf. The default function does linear search using strcmp(). */ |
2509 | const Eina_Value_Struct_Member *(*find_member)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const char *name); /**< replace the function to find description for member. For huge structures consider using binary search, stringshared, hash or gperf. The default function does linear search using strcmp(). */ | ||
2510 | }; | 2847 | }; |
2511 | 2848 | ||
2512 | /** | 2849 | /** |
@@ -2539,23 +2876,48 @@ EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STR | |||
2539 | 2876 | ||
2540 | /** | 2877 | /** |
2541 | * @struct _Eina_Value_Struct_Member | 2878 | * @struct _Eina_Value_Struct_Member |
2879 | * Describes a single member of struct. | ||
2880 | * | ||
2881 | * The name is used to lookup the member description. This is done as | ||
2882 | * specified as _Eina_Value_Struct_Operations::find_member(). For | ||
2883 | * structures with huge number of members, consider using a better | ||
2884 | * find_member function to quickly finding it! There are two helper | ||
2885 | * operations provided to help this: | ||
2886 | * #EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH and | ||
2887 | * #EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE, both depend on properly | ||
2888 | * set #_Eina_Value_Struct_Desc and #_Eina_Value_Struct_Member. | ||
2889 | * | ||
2890 | * @see #EINA_VALUE_STRUCT_MEMBER | ||
2891 | * @see #EINA_VALUE_STRUCT_MEMBER_SENTINEL | ||
2892 | * | ||
2542 | * @since 1.2 | 2893 | * @since 1.2 |
2543 | */ | 2894 | */ |
2544 | struct _Eina_Value_Struct_Member | 2895 | struct _Eina_Value_Struct_Member |
2545 | { | 2896 | { |
2546 | const char *name; | 2897 | const char *name; /**< member name, used in lookups such as eina_value_struct_get() */ |
2547 | const Eina_Value_Type *type; | 2898 | const Eina_Value_Type *type; /**< how to use this member */ |
2548 | unsigned int offset; | 2899 | unsigned int offset; /**< where this member is located within the structure memory */ |
2549 | }; | 2900 | }; |
2550 | 2901 | ||
2551 | /** | 2902 | /** |
2903 | * @def EINA_VALUE_STRUCT_DESC_VERSION | ||
2904 | * Current API version, used to validate #_Eina_Value_Struct_Desc. | ||
2905 | */ | ||
2906 | #define EINA_VALUE_STRUCT_DESC_VERSION (1) | ||
2907 | |||
2908 | /** | ||
2552 | * @struct _Eina_Value_Struct_Desc | 2909 | * @struct _Eina_Value_Struct_Desc |
2910 | * Describes the struct by listing its size, members and operations. | ||
2911 | * | ||
2912 | * This is the root of Eina_Value knowledge about the memory it's | ||
2913 | * handling as a structure. It adds introspection, saying the byte | ||
2914 | * size of the structure, its members and how to manage such members. | ||
2915 | * | ||
2553 | * @since 1.2 | 2916 | * @since 1.2 |
2554 | */ | 2917 | */ |
2555 | struct _Eina_Value_Struct_Desc | 2918 | struct _Eina_Value_Struct_Desc |
2556 | { | 2919 | { |
2557 | #define EINA_VALUE_STRUCT_DESC_VERSION (1) | 2920 | unsigned int version; /**< must be #EINA_VALUE_STRUCT_DESC_VERSION */ |
2558 | unsigned int version; /**< must be EINA_VALUE_STRUCT_DESC_VERSION */ | ||
2559 | const Eina_Value_Struct_Operations *ops; /**< operations, if @c NULL defaults will be used. You may use operations to optimize member lookup using binary search or gperf hash. */ | 2921 | const Eina_Value_Struct_Operations *ops; /**< operations, if @c NULL defaults will be used. You may use operations to optimize member lookup using binary search or gperf hash. */ |
2560 | const Eina_Value_Struct_Member *members; /**< array of member descriptions, if @c member_count is zero, then it must be @c NULL terminated. */ | 2922 | const Eina_Value_Struct_Member *members; /**< array of member descriptions, if @c member_count is zero, then it must be @c NULL terminated. */ |
2561 | unsigned int member_count; /**< if > 0, specifies number of members. If zero then @c members must be NULL terminated. */ | 2923 | unsigned int member_count; /**< if > 0, specifies number of members. If zero then @c members must be NULL terminated. */ |
@@ -2586,12 +2948,13 @@ struct _Eina_Value_Struct_Desc | |||
2586 | 2948 | ||
2587 | /** | 2949 | /** |
2588 | * @struct _Eina_Value_Struct | 2950 | * @struct _Eina_Value_Struct |
2951 | * Used to store the memory and its description. | ||
2589 | * @since 1.2 | 2952 | * @since 1.2 |
2590 | */ | 2953 | */ |
2591 | struct _Eina_Value_Struct | 2954 | struct _Eina_Value_Struct |
2592 | { | 2955 | { |
2593 | const Eina_Value_Struct_Desc *desc; | 2956 | const Eina_Value_Struct_Desc *desc; /**< How to manage the structure */ |
2594 | void *memory; | 2957 | void *memory; /**< The managed structure memory */ |
2595 | }; | 2958 | }; |
2596 | 2959 | ||
2597 | /** | 2960 | /** |
@@ -2702,7 +3065,7 @@ static inline Eina_Bool eina_value_struct_setup(Eina_Value *value, | |||
2702 | */ | 3065 | */ |
2703 | static inline Eina_Bool eina_value_struct_set(Eina_Value *value, | 3066 | static inline Eina_Bool eina_value_struct_set(Eina_Value *value, |
2704 | const char *name, | 3067 | const char *name, |
2705 | ...) EINA_ARG_NONNULL(1); | 3068 | ...) EINA_ARG_NONNULL(1, 2); |
2706 | 3069 | ||
2707 | /** | 3070 | /** |
2708 | * @brief Get the generic value from an struct member. | 3071 | * @brief Get the generic value from an struct member. |
@@ -2770,7 +3133,7 @@ static inline Eina_Bool eina_value_struct_set(Eina_Value *value, | |||
2770 | */ | 3133 | */ |
2771 | static inline Eina_Bool eina_value_struct_get(const Eina_Value *value, | 3134 | static inline Eina_Bool eina_value_struct_get(const Eina_Value *value, |
2772 | const char *name, | 3135 | const char *name, |
2773 | ...) EINA_ARG_NONNULL(1); | 3136 | ...) EINA_ARG_NONNULL(1, 2); |
2774 | 3137 | ||
2775 | /** | 3138 | /** |
2776 | * @brief Set the generic value in an struct member. | 3139 | * @brief Set the generic value in an struct member. |
@@ -2786,7 +3149,7 @@ static inline Eina_Bool eina_value_struct_get(const Eina_Value *value, | |||
2786 | */ | 3149 | */ |
2787 | static inline Eina_Bool eina_value_struct_vset(Eina_Value *value, | 3150 | static inline Eina_Bool eina_value_struct_vset(Eina_Value *value, |
2788 | const char *name, | 3151 | const char *name, |
2789 | va_list args) EINA_ARG_NONNULL(1); | 3152 | va_list args) EINA_ARG_NONNULL(1, 2); |
2790 | 3153 | ||
2791 | /** | 3154 | /** |
2792 | * @brief Get the generic value from an struct member. | 3155 | * @brief Get the generic value from an struct member. |
@@ -2808,7 +3171,7 @@ static inline Eina_Bool eina_value_struct_vset(Eina_Value *value, | |||
2808 | */ | 3171 | */ |
2809 | static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value, | 3172 | static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value, |
2810 | const char *name, | 3173 | const char *name, |
2811 | va_list args) EINA_ARG_NONNULL(1); | 3174 | va_list args) EINA_ARG_NONNULL(1, 2); |
2812 | 3175 | ||
2813 | /** | 3176 | /** |
2814 | * @brief Set the generic value in an struct member from pointer. | 3177 | * @brief Set the generic value in an struct member from pointer. |
@@ -2875,7 +3238,7 @@ static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value, | |||
2875 | */ | 3238 | */ |
2876 | static inline Eina_Bool eina_value_struct_pset(Eina_Value *value, | 3239 | static inline Eina_Bool eina_value_struct_pset(Eina_Value *value, |
2877 | const char *name, | 3240 | const char *name, |
2878 | const void *ptr) EINA_ARG_NONNULL(1, 3); | 3241 | const void *ptr) EINA_ARG_NONNULL(1, 2, 3); |
2879 | 3242 | ||
2880 | /** | 3243 | /** |
2881 | * @brief Get the generic value to pointer from an struct member. | 3244 | * @brief Get the generic value to pointer from an struct member. |
@@ -2944,7 +3307,62 @@ static inline Eina_Bool eina_value_struct_pset(Eina_Value *value, | |||
2944 | */ | 3307 | */ |
2945 | static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value, | 3308 | static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value, |
2946 | const char *name, | 3309 | const char *name, |
2947 | void *ptr) EINA_ARG_NONNULL(1, 3); | 3310 | void *ptr) EINA_ARG_NONNULL(1, 2, 3); |
3311 | |||
3312 | /** | ||
3313 | * @brief Get the member as Eina_Value copy | ||
3314 | * @param src source value object | ||
3315 | * @param name name to find the member | ||
3316 | * @param dst where to return the member value. | ||
3317 | * | ||
3318 | * The argument @a dst is considered uninitialized and it's setup to | ||
3319 | * the type of the member. | ||
3320 | * | ||
3321 | * @since 1.2 | ||
3322 | */ | ||
3323 | static inline Eina_Bool eina_value_struct_value_get(const Eina_Value *src, | ||
3324 | const char *name, | ||
3325 | Eina_Value *dst) EINA_ARG_NONNULL(1, 2, 3); | ||
3326 | |||
3327 | /** | ||
3328 | * @brief Set the member from Eina_Value source | ||
3329 | * @param dst destination value object | ||
3330 | * @param name name to find the member | ||
3331 | * @param src source value | ||
3332 | * | ||
3333 | * @since 1.2 | ||
3334 | */ | ||
3335 | static inline Eina_Bool eina_value_struct_value_set(Eina_Value *dst, | ||
3336 | const char *name, | ||
3337 | const Eina_Value *src) EINA_ARG_NONNULL(1, 2, 3); | ||
3338 | |||
3339 | /** | ||
3340 | * @brief Get the member as Eina_Value copy given its member description. | ||
3341 | * @param src source value object | ||
3342 | * @param member the member description to use | ||
3343 | * @param dst where to return the member value. | ||
3344 | * | ||
3345 | * The argument @a dst is considered uninitialized and it's setup to | ||
3346 | * the type of the member. | ||
3347 | * | ||
3348 | * @since 1.2 | ||
3349 | */ | ||
3350 | static inline Eina_Bool eina_value_struct_member_value_get(const Eina_Value *src, | ||
3351 | const Eina_Value_Struct_Member *member, | ||
3352 | Eina_Value *dst) EINA_ARG_NONNULL(1, 2, 3); | ||
3353 | |||
3354 | /** | ||
3355 | * @brief Set the member from Eina_Value source | ||
3356 | * @param dst destination value object | ||
3357 | * @param member the member description to use | ||
3358 | * @param src source value | ||
3359 | * | ||
3360 | * @since 1.2 | ||
3361 | */ | ||
3362 | static inline Eina_Bool eina_value_struct_member_value_set(Eina_Value *dst, | ||
3363 | const Eina_Value_Struct_Member *member, | ||
3364 | const Eina_Value *src) EINA_ARG_NONNULL(1, 2, 3); | ||
3365 | |||
2948 | 3366 | ||
2949 | /** | 3367 | /** |
2950 | * @} | 3368 | * @} |
@@ -2958,6 +3376,12 @@ static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value, | |||
2958 | */ | 3376 | */ |
2959 | 3377 | ||
2960 | /** | 3378 | /** |
3379 | * @def EINA_VALUE_TYPE_VERSION | ||
3380 | * Current API version, used to validate type. | ||
3381 | */ | ||
3382 | #define EINA_VALUE_TYPE_VERSION (1) | ||
3383 | |||
3384 | /** | ||
2961 | * @struct _Eina_Value_Type | 3385 | * @struct _Eina_Value_Type |
2962 | * API to access values. | 3386 | * API to access values. |
2963 | * | 3387 | * |
@@ -2965,11 +3389,6 @@ static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value, | |||
2965 | */ | 3389 | */ |
2966 | struct _Eina_Value_Type | 3390 | struct _Eina_Value_Type |
2967 | { | 3391 | { |
2968 | /** | ||
2969 | * @def EINA_VALUE_TYPE_VERSION | ||
2970 | * Current API version, used to validate type. | ||
2971 | */ | ||
2972 | #define EINA_VALUE_TYPE_VERSION (1) | ||
2973 | unsigned int version; /**< must be #EINA_VALUE_TYPE_VERSION */ | 3392 | unsigned int version; /**< must be #EINA_VALUE_TYPE_VERSION */ |
2974 | unsigned int value_size; /**< byte size of value */ | 3393 | unsigned int value_size; /**< byte size of value */ |
2975 | const char *name; /**< name for debug and introspection */ | 3394 | const char *name; /**< name for debug and introspection */ |
diff --git a/libraries/eina/src/lib/Makefile.am b/libraries/eina/src/lib/Makefile.am index d8c9d20..5de2848 100644 --- a/libraries/eina/src/lib/Makefile.am +++ b/libraries/eina/src/lib/Makefile.am | |||
@@ -6,8 +6,8 @@ AM_CPPFLAGS = \ | |||
6 | -DPACKAGE_BIN_DIR=\"$(bindir)\" \ | 6 | -DPACKAGE_BIN_DIR=\"$(bindir)\" \ |
7 | -DPACKAGE_LIB_DIR=\"$(libdir)\" \ | 7 | -DPACKAGE_LIB_DIR=\"$(libdir)\" \ |
8 | -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ | 8 | -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ |
9 | @EINA_CPPFLAGS@ \ | 9 | @EFL_EINA_BUILD@ \ |
10 | @EFL_EINA_BUILD@ | 10 | @VALGRIND_CFLAGS@ |
11 | 11 | ||
12 | base_sources = \ | 12 | base_sources = \ |
13 | eina_accessor.c \ | 13 | eina_accessor.c \ |
@@ -33,6 +33,7 @@ eina_main.c \ | |||
33 | eina_matrixsparse.c \ | 33 | eina_matrixsparse.c \ |
34 | eina_mempool.c \ | 34 | eina_mempool.c \ |
35 | eina_mmap.c \ | 35 | eina_mmap.c \ |
36 | eina_model.c \ | ||
36 | eina_module.c \ | 37 | eina_module.c \ |
37 | eina_prefix.c \ | 38 | eina_prefix.c \ |
38 | eina_quadtree.c \ | 39 | eina_quadtree.c \ |
diff --git a/libraries/eina/src/lib/Makefile.in b/libraries/eina/src/lib/Makefile.in index 878bcbe..f15bb00 100644 --- a/libraries/eina/src/lib/Makefile.in +++ b/libraries/eina/src/lib/Makefile.in | |||
@@ -49,20 +49,24 @@ host_triplet = @host@ | |||
49 | subdir = src/lib | 49 | subdir = src/lib |
50 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 50 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
51 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 51 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
52 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 52 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
53 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 53 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
54 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 54 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
55 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 55 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
56 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 56 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
57 | $(top_srcdir)/m4/efl_examples.m4 \ | 57 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
58 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 58 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
59 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 59 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
60 | $(top_srcdir)/m4/efl_threads.m4 \ | 60 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
61 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 61 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
62 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 62 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
63 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 63 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
64 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 64 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
65 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 65 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
66 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
67 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
68 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
69 | $(top_srcdir)/configure.ac | ||
66 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 70 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
67 | $(ACLOCAL_M4) | 71 | $(ACLOCAL_M4) |
68 | mkinstalldirs = $(install_sh) -d | 72 | mkinstalldirs = $(install_sh) -d |
@@ -99,13 +103,13 @@ am__libeina_la_SOURCES_DIST = eina_accessor.c eina_array.c \ | |||
99 | eina_hamster.c eina_hash.c eina_inarray.c eina_inlist.c \ | 103 | eina_hamster.c eina_hash.c eina_inarray.c eina_inlist.c \ |
100 | eina_iterator.c eina_lalloc.c eina_list.c eina_log.c \ | 104 | eina_iterator.c eina_lalloc.c eina_list.c eina_log.c \ |
101 | eina_magic.c eina_main.c eina_matrixsparse.c eina_mempool.c \ | 105 | eina_magic.c eina_main.c eina_matrixsparse.c eina_mempool.c \ |
102 | eina_mmap.c eina_module.c eina_prefix.c eina_quadtree.c \ | 106 | eina_mmap.c eina_model.c eina_module.c eina_prefix.c \ |
103 | eina_rbtree.c eina_rectangle.c eina_safety_checks.c \ | 107 | eina_quadtree.c eina_rbtree.c eina_rectangle.c \ |
104 | eina_sched.c eina_share_common.c eina_simple_xml_parser.c \ | 108 | eina_safety_checks.c eina_sched.c eina_share_common.c \ |
105 | eina_str.c eina_strbuf.c eina_strbuf_common.c \ | 109 | eina_simple_xml_parser.c eina_str.c eina_strbuf.c \ |
106 | eina_stringshare.c eina_tiler.c eina_unicode.c eina_ustrbuf.c \ | 110 | eina_strbuf_common.c eina_stringshare.c eina_tiler.c \ |
107 | eina_ustringshare.c eina_value.c eina_xattr.c \ | 111 | eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \ |
108 | eina_file_win32.c eina_file.c \ | 112 | eina_xattr.c eina_file_win32.c eina_file.c \ |
109 | $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c \ | 113 | $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c \ |
110 | $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c \ | 114 | $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c \ |
111 | $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c \ | 115 | $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c \ |
@@ -135,11 +139,11 @@ am__objects_10 = libeina_la-eina_accessor.lo libeina_la-eina_array.lo \ | |||
135 | libeina_la-eina_list.lo libeina_la-eina_log.lo \ | 139 | libeina_la-eina_list.lo libeina_la-eina_log.lo \ |
136 | libeina_la-eina_magic.lo libeina_la-eina_main.lo \ | 140 | libeina_la-eina_magic.lo libeina_la-eina_main.lo \ |
137 | libeina_la-eina_matrixsparse.lo libeina_la-eina_mempool.lo \ | 141 | libeina_la-eina_matrixsparse.lo libeina_la-eina_mempool.lo \ |
138 | libeina_la-eina_mmap.lo libeina_la-eina_module.lo \ | 142 | libeina_la-eina_mmap.lo libeina_la-eina_model.lo \ |
139 | libeina_la-eina_prefix.lo libeina_la-eina_quadtree.lo \ | 143 | libeina_la-eina_module.lo libeina_la-eina_prefix.lo \ |
140 | libeina_la-eina_rbtree.lo libeina_la-eina_rectangle.lo \ | 144 | libeina_la-eina_quadtree.lo libeina_la-eina_rbtree.lo \ |
141 | libeina_la-eina_safety_checks.lo libeina_la-eina_sched.lo \ | 145 | libeina_la-eina_rectangle.lo libeina_la-eina_safety_checks.lo \ |
142 | libeina_la-eina_share_common.lo \ | 146 | libeina_la-eina_sched.lo libeina_la-eina_share_common.lo \ |
143 | libeina_la-eina_simple_xml_parser.lo libeina_la-eina_str.lo \ | 147 | libeina_la-eina_simple_xml_parser.lo libeina_la-eina_str.lo \ |
144 | libeina_la-eina_strbuf.lo libeina_la-eina_strbuf_common.lo \ | 148 | libeina_la-eina_strbuf.lo libeina_la-eina_strbuf_common.lo \ |
145 | libeina_la-eina_stringshare.lo libeina_la-eina_tiler.lo \ | 149 | libeina_la-eina_stringshare.lo libeina_la-eina_tiler.lo \ |
@@ -236,13 +240,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
236 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 240 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
237 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 241 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
238 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 242 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
243 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
239 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 244 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
240 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 245 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
241 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 246 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
242 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 247 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
243 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 248 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
244 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 249 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
245 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
246 | EINA_LIBS = @EINA_LIBS@ | 250 | EINA_LIBS = @EINA_LIBS@ |
247 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 251 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
248 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 252 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -252,6 +256,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
252 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 256 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
253 | EVIL_LIBS = @EVIL_LIBS@ | 257 | EVIL_LIBS = @EVIL_LIBS@ |
254 | EXEEXT = @EXEEXT@ | 258 | EXEEXT = @EXEEXT@ |
259 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
260 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
255 | FGREP = @FGREP@ | 261 | FGREP = @FGREP@ |
256 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 262 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
257 | GLIB_LIBS = @GLIB_LIBS@ | 263 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -287,6 +293,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
287 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 293 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
288 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 294 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
289 | PKG_CONFIG = @PKG_CONFIG@ | 295 | PKG_CONFIG = @PKG_CONFIG@ |
296 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
297 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
290 | RANLIB = @RANLIB@ | 298 | RANLIB = @RANLIB@ |
291 | SED = @SED@ | 299 | SED = @SED@ |
292 | SET_MAKE = @SET_MAKE@ | 300 | SET_MAKE = @SET_MAKE@ |
@@ -367,23 +375,24 @@ AM_CPPFLAGS = \ | |||
367 | -DPACKAGE_BIN_DIR=\"$(bindir)\" \ | 375 | -DPACKAGE_BIN_DIR=\"$(bindir)\" \ |
368 | -DPACKAGE_LIB_DIR=\"$(libdir)\" \ | 376 | -DPACKAGE_LIB_DIR=\"$(libdir)\" \ |
369 | -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ | 377 | -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ |
370 | @EINA_CPPFLAGS@ \ | 378 | @EFL_EINA_BUILD@ \ |
371 | @EFL_EINA_BUILD@ | 379 | @VALGRIND_CFLAGS@ |
372 | 380 | ||
373 | base_sources = eina_accessor.c eina_array.c eina_benchmark.c \ | 381 | base_sources = eina_accessor.c eina_array.c eina_benchmark.c \ |
374 | eina_binbuf.c eina_binshare.c eina_convert.c eina_counter.c \ | 382 | eina_binbuf.c eina_binshare.c eina_convert.c eina_counter.c \ |
375 | eina_cpu.c eina_error.c eina_fp.c eina_hamster.c eina_hash.c \ | 383 | eina_cpu.c eina_error.c eina_fp.c eina_hamster.c eina_hash.c \ |
376 | eina_inarray.c eina_inlist.c eina_iterator.c eina_lalloc.c \ | 384 | eina_inarray.c eina_inlist.c eina_iterator.c eina_lalloc.c \ |
377 | eina_list.c eina_log.c eina_magic.c eina_main.c \ | 385 | eina_list.c eina_log.c eina_magic.c eina_main.c \ |
378 | eina_matrixsparse.c eina_mempool.c eina_mmap.c eina_module.c \ | 386 | eina_matrixsparse.c eina_mempool.c eina_mmap.c eina_model.c \ |
379 | eina_prefix.c eina_quadtree.c eina_rbtree.c eina_rectangle.c \ | 387 | eina_module.c eina_prefix.c eina_quadtree.c eina_rbtree.c \ |
380 | eina_safety_checks.c eina_sched.c eina_share_common.c \ | 388 | eina_rectangle.c eina_safety_checks.c eina_sched.c \ |
381 | eina_simple_xml_parser.c eina_str.c eina_strbuf.c \ | 389 | eina_share_common.c eina_simple_xml_parser.c eina_str.c \ |
382 | eina_strbuf_common.c eina_stringshare.c eina_tiler.c \ | 390 | eina_strbuf.c eina_strbuf_common.c eina_stringshare.c \ |
383 | eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \ | 391 | eina_tiler.c eina_unicode.c eina_ustrbuf.c eina_ustringshare.c \ |
384 | eina_xattr.c $(am__append_1) $(am__append_2) $(am__append_3) \ | 392 | eina_value.c eina_xattr.c $(am__append_1) $(am__append_2) \ |
385 | $(am__append_4) $(am__append_5) $(am__append_6) \ | 393 | $(am__append_3) $(am__append_4) $(am__append_5) \ |
386 | $(am__append_7) $(am__append_8) $(am__append_9) | 394 | $(am__append_6) $(am__append_7) $(am__append_8) \ |
395 | $(am__append_9) | ||
387 | EXTRA_DIST = \ | 396 | EXTRA_DIST = \ |
388 | eina_share_common.h \ | 397 | eina_share_common.h \ |
389 | eina_private.h \ | 398 | eina_private.h \ |
@@ -502,6 +511,7 @@ distclean-compile: | |||
502 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_matrixsparse.Plo@am__quote@ | 511 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_matrixsparse.Plo@am__quote@ |
503 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mempool.Plo@am__quote@ | 512 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mempool.Plo@am__quote@ |
504 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mmap.Plo@am__quote@ | 513 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mmap.Plo@am__quote@ |
514 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_model.Plo@am__quote@ | ||
505 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_module.Plo@am__quote@ | 515 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_module.Plo@am__quote@ |
506 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_one_big.Plo@am__quote@ | 516 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_one_big.Plo@am__quote@ |
507 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_pass_through.Plo@am__quote@ | 517 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_pass_through.Plo@am__quote@ |
@@ -732,6 +742,14 @@ libeina_la-eina_mmap.lo: eina_mmap.c | |||
732 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | 742 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
733 | @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_mmap.lo `test -f 'eina_mmap.c' || echo '$(srcdir)/'`eina_mmap.c | 743 | @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_mmap.lo `test -f 'eina_mmap.c' || echo '$(srcdir)/'`eina_mmap.c |
734 | 744 | ||
745 | libeina_la-eina_model.lo: eina_model.c | ||
746 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_model.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_model.Tpo -c -o libeina_la-eina_model.lo `test -f 'eina_model.c' || echo '$(srcdir)/'`eina_model.c | ||
747 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_model.Tpo $(DEPDIR)/libeina_la-eina_model.Plo | ||
748 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | ||
749 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_model.c' object='libeina_la-eina_model.lo' libtool=yes @AMDEPBACKSLASH@ | ||
750 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||
751 | @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_model.lo `test -f 'eina_model.c' || echo '$(srcdir)/'`eina_model.c | ||
752 | |||
735 | libeina_la-eina_module.lo: eina_module.c | 753 | libeina_la-eina_module.lo: eina_module.c |
736 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_module.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_module.Tpo -c -o libeina_la-eina_module.lo `test -f 'eina_module.c' || echo '$(srcdir)/'`eina_module.c | 754 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_module.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_module.Tpo -c -o libeina_la-eina_module.lo `test -f 'eina_module.c' || echo '$(srcdir)/'`eina_module.c |
737 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_module.Tpo $(DEPDIR)/libeina_la-eina_module.Plo | 755 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_module.Tpo $(DEPDIR)/libeina_la-eina_module.Plo |
diff --git a/libraries/eina/src/lib/eina_binshare.c b/libraries/eina/src/lib/eina_binshare.c index 68a82fc..01e8046 100644 --- a/libraries/eina/src/lib/eina_binshare.c +++ b/libraries/eina/src/lib/eina_binshare.c | |||
@@ -21,9 +21,18 @@ | |||
21 | 21 | ||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include "eina_share_common.h" | 24 | #ifdef HAVE_CONFIG_H |
25 | #include "eina_unicode.h" | 25 | # include "config.h" |
26 | #endif | ||
27 | |||
28 | #include "eina_config.h" | ||
26 | #include "eina_private.h" | 29 | #include "eina_private.h" |
30 | #include "eina_unicode.h" | ||
31 | #include "eina_log.h" | ||
32 | #include "eina_share_common.h" | ||
33 | |||
34 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | ||
35 | #include "eina_safety_checks.h" | ||
27 | #include "eina_binshare.h" | 36 | #include "eina_binshare.h" |
28 | 37 | ||
29 | /*============================================================================* | 38 | /*============================================================================* |
@@ -34,6 +43,23 @@ | |||
34 | * @cond LOCAL | 43 | * @cond LOCAL |
35 | */ | 44 | */ |
36 | 45 | ||
46 | #ifdef CRITICAL | ||
47 | #undef CRITICAL | ||
48 | #endif | ||
49 | #define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_binshare_log_dom, __VA_ARGS__) | ||
50 | |||
51 | #ifdef ERR | ||
52 | #undef ERR | ||
53 | #endif | ||
54 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_share_binshare_log_dom, __VA_ARGS__) | ||
55 | |||
56 | #ifdef DBG | ||
57 | #undef DBG | ||
58 | #endif | ||
59 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_share_binshare_log_dom, __VA_ARGS__) | ||
60 | |||
61 | static int _eina_share_binshare_log_dom = -1; | ||
62 | |||
37 | /* The actual share */ | 63 | /* The actual share */ |
38 | static Eina_Share *binshare_share; | 64 | static Eina_Share *binshare_share; |
39 | static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; | 65 | static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; |
@@ -42,7 +68,6 @@ static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; | |||
42 | * @endcond | 68 | * @endcond |
43 | */ | 69 | */ |
44 | 70 | ||
45 | |||
46 | /*============================================================================* | 71 | /*============================================================================* |
47 | * Global * | 72 | * Global * |
48 | *============================================================================*/ | 73 | *============================================================================*/ |
@@ -61,9 +86,31 @@ static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; | |||
61 | EAPI Eina_Bool | 86 | EAPI Eina_Bool |
62 | eina_binshare_init(void) | 87 | eina_binshare_init(void) |
63 | { | 88 | { |
64 | return eina_share_common_init(&binshare_share, | 89 | Eina_Bool ret; |
65 | EINA_MAGIC_BINSHARE_NODE, | 90 | |
66 | EINA_MAGIC_BINSHARE_NODE_STR); | 91 | if (_eina_share_binshare_log_dom < 0) |
92 | { | ||
93 | _eina_share_binshare_log_dom = eina_log_domain_register | ||
94 | ("eina_binshare", EINA_LOG_COLOR_DEFAULT); | ||
95 | |||
96 | if (_eina_share_binshare_log_dom < 0) | ||
97 | { | ||
98 | EINA_LOG_ERR("Could not register log domain: eina_binshare"); | ||
99 | return EINA_FALSE; | ||
100 | } | ||
101 | } | ||
102 | |||
103 | ret = eina_share_common_init(&binshare_share, | ||
104 | EINA_MAGIC_BINSHARE_NODE, | ||
105 | EINA_MAGIC_BINSHARE_NODE_STR); | ||
106 | |||
107 | if (!ret) | ||
108 | { | ||
109 | eina_log_domain_unregister(_eina_share_binshare_log_dom); | ||
110 | _eina_share_binshare_log_dom = -1; | ||
111 | } | ||
112 | |||
113 | return ret; | ||
67 | } | 114 | } |
68 | 115 | ||
69 | /** | 116 | /** |
@@ -82,6 +129,13 @@ eina_binshare_shutdown(void) | |||
82 | { | 129 | { |
83 | Eina_Bool ret; | 130 | Eina_Bool ret; |
84 | ret = eina_share_common_shutdown(&binshare_share); | 131 | ret = eina_share_common_shutdown(&binshare_share); |
132 | |||
133 | if (_eina_share_binshare_log_dom > 0) | ||
134 | { | ||
135 | eina_log_domain_unregister(_eina_share_binshare_log_dom); | ||
136 | _eina_share_binshare_log_dom = -1; | ||
137 | } | ||
138 | |||
85 | return ret; | 139 | return ret; |
86 | } | 140 | } |
87 | 141 | ||
@@ -96,7 +150,8 @@ eina_binshare_del(const void *obj) | |||
96 | if (!obj) | 150 | if (!obj) |
97 | return; | 151 | return; |
98 | 152 | ||
99 | eina_share_common_del(binshare_share, obj); | 153 | if (!eina_share_common_del(binshare_share, obj)) |
154 | CRITICAL("EEEK trying to del non-shared binshare %p", obj); | ||
100 | } | 155 | } |
101 | 156 | ||
102 | EAPI const void * | 157 | EAPI const void * |
diff --git a/libraries/eina/src/lib/eina_file.c b/libraries/eina/src/lib/eina_file.c index 0b836b3..c465301 100644 --- a/libraries/eina/src/lib/eina_file.c +++ b/libraries/eina/src/lib/eina_file.c | |||
@@ -362,41 +362,15 @@ _eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator *it) | |||
362 | static Eina_Bool | 362 | static Eina_Bool |
363 | _eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) | 363 | _eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) |
364 | { | 364 | { |
365 | struct stat st; | 365 | Eina_Stat st; |
366 | 366 | ||
367 | if (!_eina_file_direct_ls_iterator_next(it, data)) | 367 | if (!_eina_file_direct_ls_iterator_next(it, data)) |
368 | return EINA_FALSE; | 368 | return EINA_FALSE; |
369 | 369 | ||
370 | if (it->info.type == EINA_FILE_UNKNOWN) | 370 | if (it->info.type == EINA_FILE_UNKNOWN) |
371 | { | 371 | { |
372 | #ifdef HAVE_FSTATAT | 372 | if (eina_file_statat(it->dirp, &it->info, &st) != 0) |
373 | int fd; | ||
374 | |||
375 | fd = dirfd(it->dirp); | ||
376 | if (fstatat(fd, it->info.path + it->info.name_start, &st, 0)) | ||
377 | #else | ||
378 | if (stat(it->info.path, &st)) | ||
379 | #endif | ||
380 | it->info.type = EINA_FILE_UNKNOWN; | 373 | it->info.type = EINA_FILE_UNKNOWN; |
381 | else | ||
382 | { | ||
383 | if (S_ISREG(st.st_mode)) | ||
384 | it->info.type = EINA_FILE_REG; | ||
385 | else if (S_ISDIR(st.st_mode)) | ||
386 | it->info.type = EINA_FILE_DIR; | ||
387 | else if (S_ISCHR(st.st_mode)) | ||
388 | it->info.type = EINA_FILE_CHR; | ||
389 | else if (S_ISBLK(st.st_mode)) | ||
390 | it->info.type = EINA_FILE_BLK; | ||
391 | else if (S_ISFIFO(st.st_mode)) | ||
392 | it->info.type = EINA_FILE_FIFO; | ||
393 | else if (S_ISLNK(st.st_mode)) | ||
394 | it->info.type = EINA_FILE_LNK; | ||
395 | else if (S_ISSOCK(st.st_mode)) | ||
396 | it->info.type = EINA_FILE_SOCK; | ||
397 | else | ||
398 | it->info.type = EINA_FILE_UNKNOWN; | ||
399 | } | ||
400 | } | 374 | } |
401 | 375 | ||
402 | return EINA_TRUE; | 376 | return EINA_TRUE; |
@@ -593,6 +567,14 @@ _eina_file_escape(const char *path, int *length) | |||
593 | return result; | 567 | return result; |
594 | } | 568 | } |
595 | 569 | ||
570 | /** | ||
571 | * @endcond | ||
572 | */ | ||
573 | |||
574 | /*============================================================================* | ||
575 | * Global * | ||
576 | *============================================================================*/ | ||
577 | |||
596 | Eina_Bool | 578 | Eina_Bool |
597 | eina_file_init(void) | 579 | eina_file_init(void) |
598 | { | 580 | { |
@@ -641,13 +623,60 @@ eina_file_shutdown(void) | |||
641 | return EINA_TRUE; | 623 | return EINA_TRUE; |
642 | } | 624 | } |
643 | 625 | ||
644 | /** | 626 | void |
645 | * @endcond | 627 | eina_file_mmap_faulty(void *addr, long page_size) |
646 | */ | 628 | { |
629 | Eina_File_Map *m; | ||
630 | Eina_File *f; | ||
631 | Eina_Iterator *itf; | ||
632 | Eina_Iterator *itm; | ||
647 | 633 | ||
648 | /*============================================================================* | 634 | /* NOTE: I actually don't know if other thread are running, I will try to take the lock. |
649 | * Global * | 635 | It may be possible that if other thread are not running and they were in the middle of |
650 | *============================================================================*/ | 636 | accessing an Eina_File this lock are still taken and we will result as a deadlock. */ |
637 | eina_lock_take(&_eina_file_lock_cache); | ||
638 | |||
639 | itf = eina_hash_iterator_data_new(_eina_file_cache); | ||
640 | EINA_ITERATOR_FOREACH(itf, f) | ||
641 | { | ||
642 | Eina_Bool faulty = EINA_FALSE; | ||
643 | |||
644 | eina_lock_take(&f->lock); | ||
645 | |||
646 | if (f->global_map) | ||
647 | { | ||
648 | if ((unsigned char *) addr < (((unsigned char *)f->global_map) + f->length) && | ||
649 | (((unsigned char *) addr) + page_size) >= (unsigned char *) f->global_map) | ||
650 | { | ||
651 | f->global_faulty = EINA_TRUE; | ||
652 | faulty = EINA_TRUE; | ||
653 | } | ||
654 | } | ||
655 | |||
656 | if (!faulty) | ||
657 | { | ||
658 | itm = eina_hash_iterator_data_new(f->map); | ||
659 | EINA_ITERATOR_FOREACH(itm, m) | ||
660 | { | ||
661 | if ((unsigned char *) addr < (((unsigned char *)m->map) + m->length) && | ||
662 | (((unsigned char *) addr) + page_size) >= (unsigned char *) m->map) | ||
663 | { | ||
664 | m->faulty = EINA_TRUE; | ||
665 | faulty = EINA_TRUE; | ||
666 | break; | ||
667 | } | ||
668 | } | ||
669 | eina_iterator_free(itm); | ||
670 | } | ||
671 | |||
672 | eina_lock_release(&f->lock); | ||
673 | |||
674 | if (faulty) break; | ||
675 | } | ||
676 | eina_iterator_free(itf); | ||
677 | |||
678 | eina_lock_release(&_eina_file_lock_cache); | ||
679 | } | ||
651 | 680 | ||
652 | /*============================================================================* | 681 | /*============================================================================* |
653 | * API * | 682 | * API * |
@@ -950,7 +979,7 @@ eina_file_open(const char *path, Eina_Bool shared) | |||
950 | eina_lock_take(&_eina_file_lock_cache); | 979 | eina_lock_take(&_eina_file_lock_cache); |
951 | 980 | ||
952 | file = eina_hash_find(_eina_file_cache, filename); | 981 | file = eina_hash_find(_eina_file_cache, filename); |
953 | if ((file) && _eina_file_timestamp_compare(file, &file_stat)) | 982 | if ((file) && !_eina_file_timestamp_compare(file, &file_stat)) |
954 | { | 983 | { |
955 | file->delete_me = EINA_TRUE; | 984 | file->delete_me = EINA_TRUE; |
956 | eina_hash_del(_eina_file_cache, file->filename, file); | 985 | eina_hash_del(_eina_file_cache, file->filename, file); |
@@ -1029,7 +1058,7 @@ eina_file_close(Eina_File *file) | |||
1029 | 1058 | ||
1030 | eina_hash_del(_eina_file_cache, file->filename, file); | 1059 | eina_hash_del(_eina_file_cache, file->filename, file); |
1031 | _eina_file_real_close(file); | 1060 | _eina_file_real_close(file); |
1032 | 1061 | ||
1033 | eina_lock_release(&_eina_file_lock_cache); | 1062 | eina_lock_release(&_eina_file_lock_cache); |
1034 | } | 1063 | } |
1035 | 1064 | ||
@@ -1196,7 +1225,7 @@ eina_file_map_free(Eina_File *file, void *map) | |||
1196 | unsigned long int key[2]; | 1225 | unsigned long int key[2]; |
1197 | 1226 | ||
1198 | em = eina_hash_find(file->rmap, &map); | 1227 | em = eina_hash_find(file->rmap, &map); |
1199 | if (!em) return ; | 1228 | if (!em) goto on_exit; |
1200 | 1229 | ||
1201 | em->refcount--; | 1230 | em->refcount--; |
1202 | 1231 | ||
@@ -1217,17 +1246,25 @@ EAPI Eina_Bool | |||
1217 | eina_file_map_faulted(Eina_File *file, void *map) | 1246 | eina_file_map_faulted(Eina_File *file, void *map) |
1218 | { | 1247 | { |
1219 | Eina_File_Map *em; | 1248 | Eina_File_Map *em; |
1249 | Eina_Bool r = EINA_FALSE; | ||
1220 | 1250 | ||
1221 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE); | 1251 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE); |
1222 | 1252 | ||
1223 | eina_lock_take(&file->lock); | 1253 | eina_lock_take(&file->lock); |
1224 | 1254 | ||
1225 | if (file->global_map == map) return file->global_faulty; | 1255 | if (file->global_map == map) |
1256 | { | ||
1257 | r = file->global_faulty; | ||
1258 | } | ||
1259 | else | ||
1260 | { | ||
1261 | em = eina_hash_find(file->rmap, &map); | ||
1262 | if (em) r = em->faulty; | ||
1263 | } | ||
1226 | 1264 | ||
1227 | em = eina_hash_find(file->rmap, &map); | 1265 | eina_lock_release(&file->lock); |
1228 | if (!em) return EINA_FALSE; | ||
1229 | 1266 | ||
1230 | return em->faulty; | 1267 | return r; |
1231 | } | 1268 | } |
1232 | 1269 | ||
1233 | EAPI Eina_Iterator * | 1270 | EAPI Eina_Iterator * |
@@ -1246,58 +1283,77 @@ eina_file_xattr_value_get(Eina_File *file) | |||
1246 | return eina_xattr_value_fd_ls(file->fd); | 1283 | return eina_xattr_value_fd_ls(file->fd); |
1247 | } | 1284 | } |
1248 | 1285 | ||
1249 | void | 1286 | EAPI int |
1250 | eina_file_mmap_faulty(void *addr, long page_size) | 1287 | eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st) |
1251 | { | 1288 | { |
1252 | Eina_File_Map *m; | 1289 | struct stat buf; |
1253 | Eina_File *f; | 1290 | #ifdef HAVE_FSTATAT |
1254 | Eina_Iterator *itf; | 1291 | int fd; |
1255 | Eina_Iterator *itm; | 1292 | #endif |
1256 | 1293 | ||
1257 | /* NOTE: I actually don't know if other thread are running, I will try to take the lock. | 1294 | EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1); |
1258 | It may be possible that if other thread are not running and they were in the middle of | 1295 | EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1); |
1259 | accessing an Eina_File this lock are still taken and we will result as a deadlock. */ | ||
1260 | eina_lock_take(&_eina_file_lock_cache); | ||
1261 | 1296 | ||
1262 | itf = eina_hash_iterator_data_new(_eina_file_cache); | 1297 | #ifdef HAVE_FSTATAT |
1263 | EINA_ITERATOR_FOREACH(itf, f) | 1298 | fd = dirfd((DIR*) container); |
1299 | if (fstatat(fd, info->path + info->name_start, &buf, 0)) | ||
1300 | #else | ||
1301 | (void)container; | ||
1302 | if (stat(info->path, &buf)) | ||
1303 | #endif | ||
1264 | { | 1304 | { |
1265 | Eina_Bool faulty = EINA_FALSE; | 1305 | if (info->type != EINA_FILE_LNK) |
1266 | 1306 | info->type = EINA_FILE_UNKNOWN; | |
1267 | eina_lock_take(&f->lock); | 1307 | return -1; |
1268 | 1308 | } | |
1269 | if (f->global_map) | ||
1270 | { | ||
1271 | if ((unsigned char *) addr < (((unsigned char *)f->global_map) + f->length) && | ||
1272 | (((unsigned char *) addr) + page_size) >= (unsigned char *) f->global_map) | ||
1273 | { | ||
1274 | f->global_faulty = EINA_TRUE; | ||
1275 | faulty = EINA_TRUE; | ||
1276 | } | ||
1277 | } | ||
1278 | |||
1279 | if (!faulty) | ||
1280 | { | ||
1281 | itm = eina_hash_iterator_data_new(f->map); | ||
1282 | EINA_ITERATOR_FOREACH(itm, m) | ||
1283 | { | ||
1284 | if ((unsigned char *) addr < (((unsigned char *)m->map) + m->length) && | ||
1285 | (((unsigned char *) addr) + page_size) >= (unsigned char *) m->map) | ||
1286 | { | ||
1287 | m->faulty = EINA_TRUE; | ||
1288 | faulty = EINA_TRUE; | ||
1289 | break; | ||
1290 | } | ||
1291 | } | ||
1292 | eina_iterator_free(itm); | ||
1293 | } | ||
1294 | |||
1295 | eina_lock_release(&f->lock); | ||
1296 | 1309 | ||
1297 | if (faulty) break; | 1310 | if (info->type == EINA_FILE_UNKNOWN) |
1311 | { | ||
1312 | if (S_ISREG(buf.st_mode)) | ||
1313 | info->type = EINA_FILE_REG; | ||
1314 | else if (S_ISDIR(buf.st_mode)) | ||
1315 | info->type = EINA_FILE_DIR; | ||
1316 | else if (S_ISCHR(buf.st_mode)) | ||
1317 | info->type = EINA_FILE_CHR; | ||
1318 | else if (S_ISBLK(buf.st_mode)) | ||
1319 | info->type = EINA_FILE_BLK; | ||
1320 | else if (S_ISFIFO(buf.st_mode)) | ||
1321 | info->type = EINA_FILE_FIFO; | ||
1322 | else if (S_ISLNK(buf.st_mode)) | ||
1323 | info->type = EINA_FILE_LNK; | ||
1324 | else if (S_ISSOCK(buf.st_mode)) | ||
1325 | info->type = EINA_FILE_SOCK; | ||
1326 | else | ||
1327 | info->type = EINA_FILE_UNKNOWN; | ||
1298 | } | 1328 | } |
1299 | eina_iterator_free(itf); | ||
1300 | 1329 | ||
1301 | eina_lock_release(&_eina_file_lock_cache); | 1330 | st->dev = buf.st_dev; |
1331 | st->ino = buf.st_ino; | ||
1332 | st->mode = buf.st_mode; | ||
1333 | st->nlink = buf.st_nlink; | ||
1334 | st->uid = buf.st_uid; | ||
1335 | st->gid = buf.st_gid; | ||
1336 | st->rdev = buf.st_rdev; | ||
1337 | st->size = buf.st_size; | ||
1338 | st->blksize = buf.st_blksize; | ||
1339 | st->blocks = buf.st_blocks; | ||
1340 | st->atime = buf.st_atime; | ||
1341 | st->mtime = buf.st_mtime; | ||
1342 | st->ctime = buf.st_ctime; | ||
1343 | #ifdef _STAT_VER_LINUX | ||
1344 | # if (defined __USE_MISC && defined st_mtime) | ||
1345 | st->atimensec = buf.st_atim.tv_nsec; | ||
1346 | st->mtimensec = buf.st_mtim.tv_nsec; | ||
1347 | st->ctimensec = buf.st_ctim.tv_nsec; | ||
1348 | # else | ||
1349 | st->atimensec = buf.st_atimensec; | ||
1350 | st->mtimensec = buf.st_mtimensec; | ||
1351 | st->ctimensec = buf.st_ctimensec; | ||
1352 | # endif | ||
1353 | #else | ||
1354 | st->atimensec = 0; | ||
1355 | st->mtimensec = 0; | ||
1356 | st->ctimensec = 0; | ||
1357 | #endif | ||
1358 | return 0; | ||
1302 | } | 1359 | } |
1303 | |||
diff --git a/libraries/eina/src/lib/eina_file_win32.c b/libraries/eina/src/lib/eina_file_win32.c index 1cd8665..5c20fdd 100644 --- a/libraries/eina/src/lib/eina_file_win32.c +++ b/libraries/eina/src/lib/eina_file_win32.c | |||
@@ -1,1021 +1,1214 @@ | |||
1 | /* EINA - EFL data type library | 1 | /* EINA - EFL data type library |
2 | * Copyright (C) 2010 Vincent Torri | 2 | * Copyright (C) 2010 Vincent Torri |
3 | * | 3 | * |
4 | * This library is free software; you can redistribute it and/or | 4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Lesser General Public | 5 | * modify it under the terms of the GNU Lesser General Public |
6 | * License as published by the Free Software Foundation; either | 6 | * License as published by the Free Software Foundation; either |
7 | * version 2.1 of the License, or (at your option) any later version. | 7 | * version 2.1 of the License, or (at your option) any later version. |
8 | * | 8 | * |
9 | * This library is distributed in the hope that it will be useful, | 9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Lesser General Public License for more details. | 12 | * Lesser General Public License for more details. |
13 | * | 13 | * |
14 | * You should have received a copy of the GNU Lesser General Public | 14 | * You should have received a copy of the GNU Lesser General Public |
15 | * License along with this library; | 15 | * License along with this library; |
16 | * if not, see <http://www.gnu.org/licenses/>. | 16 | * if not, see <http://www.gnu.org/licenses/>. |
17 | */ | 17 | */ |
18 | 18 | ||
19 | #ifdef HAVE_CONFIG_H | 19 | #ifdef HAVE_CONFIG_H |
20 | # include "config.h" | 20 | # include "config.h" |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #ifdef HAVE_ALLOCA_H | 23 | #ifdef HAVE_ALLOCA_H |
24 | # include <alloca.h> | 24 | # include <alloca.h> |
25 | #elif defined __GNUC__ | 25 | #elif defined __GNUC__ |
26 | # define alloca __builtin_alloca | 26 | # define alloca __builtin_alloca |
27 | #elif defined _AIX | 27 | #elif defined _AIX |
28 | # define alloca __alloca | 28 | # define alloca __alloca |
29 | #elif defined _MSC_VER | 29 | #elif defined _MSC_VER |
30 | # include <malloc.h> | 30 | # include <malloc.h> |
31 | # define alloca _alloca | 31 | # define alloca _alloca |
32 | #else | 32 | #else |
33 | # include <stddef.h> | 33 | # include <stddef.h> |
34 | # ifdef __cplusplus | 34 | # ifdef __cplusplus |
35 | extern "C" | 35 | extern "C" |
36 | # endif | 36 | # endif |
37 | void *alloca (size_t); | 37 | void *alloca (size_t); |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #define WIN32_LEAN_AND_MEAN | 40 | #include <sys/types.h> |
41 | #include <windows.h> | 41 | #include <sys/stat.h> |
42 | #undef WIN32_LEAN_AND_MEAN | 42 | |
43 | 43 | #define WIN32_LEAN_AND_MEAN | |
44 | //#include <Evil.h> | 44 | #include <windows.h> |
45 | 45 | #undef WIN32_LEAN_AND_MEAN | |
46 | #include "eina_config.h" | 46 | |
47 | #include "eina_private.h" | 47 | #include <Evil.h> |
48 | 48 | ||
49 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | 49 | #include "eina_config.h" |
50 | #include "eina_safety_checks.h" | 50 | #include "eina_private.h" |
51 | #include "eina_file.h" | 51 | |
52 | #include "eina_stringshare.h" | 52 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ |
53 | #include "eina_hash.h" | 53 | #include "eina_safety_checks.h" |
54 | #include "eina_list.h" | 54 | #include "eina_file.h" |
55 | 55 | #include "eina_stringshare.h" | |
56 | /*============================================================================* | 56 | #include "eina_hash.h" |
57 | * Local * | 57 | #include "eina_list.h" |
58 | *============================================================================*/ | 58 | #include "eina_lock.h" |
59 | 59 | #include "eina_log.h" | |
60 | /** | 60 | |
61 | * @cond LOCAL | 61 | /*============================================================================* |
62 | */ | 62 | * Local * |
63 | 63 | *============================================================================*/ | |
64 | #ifndef EINA_LOG_COLOR_DEFAULT | 64 | |
65 | #define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN | 65 | /** |
66 | #endif | 66 | * @cond LOCAL |
67 | 67 | */ | |
68 | #ifdef ERR | 68 | |
69 | #undef ERR | 69 | #ifndef EINA_LOG_COLOR_DEFAULT |
70 | #endif | 70 | #define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN |
71 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__) | 71 | #endif |
72 | 72 | ||
73 | #ifdef WRN | 73 | #ifdef ERR |
74 | #undef WRN | 74 | #undef ERR |
75 | #endif | 75 | #endif |
76 | #define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__) | 76 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__) |
77 | 77 | ||
78 | #ifdef DBG | 78 | #ifdef WRN |
79 | #undef DBG | 79 | #undef WRN |
80 | #endif | 80 | #endif |
81 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__) | 81 | #define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__) |
82 | 82 | ||
83 | #ifdef MAP_FAILED | 83 | #ifdef DBG |
84 | # undef MAP_FAILED | 84 | #undef DBG |
85 | #endif | 85 | #endif |
86 | #define MAP_FAILED ((void *)-1) | 86 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__) |
87 | 87 | ||
88 | typedef struct _Eina_File_Iterator Eina_File_Iterator; | 88 | #ifdef MAP_FAILED |
89 | typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; | 89 | # undef MAP_FAILED |
90 | typedef struct _Eina_File_Map Eina_File_Map; | 90 | #endif |
91 | 91 | #define MAP_FAILED ((void *)-1) | |
92 | struct _Eina_File_Iterator | 92 | |
93 | { | 93 | typedef struct _Eina_File_Iterator Eina_File_Iterator; |
94 | Eina_Iterator iterator; | 94 | typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; |
95 | 95 | typedef struct _Eina_File_Map Eina_File_Map; | |
96 | WIN32_FIND_DATA data; | 96 | |
97 | HANDLE handle; | 97 | struct _Eina_File_Iterator |
98 | size_t length; | 98 | { |
99 | Eina_Bool is_last : 1; | 99 | Eina_Iterator iterator; |
100 | 100 | ||
101 | char dir[1]; | 101 | WIN32_FIND_DATA data; |
102 | }; | 102 | HANDLE handle; |
103 | 103 | size_t length; | |
104 | struct _Eina_File_Direct_Iterator | 104 | Eina_Bool is_last : 1; |
105 | { | 105 | |
106 | Eina_Iterator iterator; | 106 | char dir[1]; |
107 | 107 | }; | |
108 | WIN32_FIND_DATA data; | 108 | |
109 | HANDLE handle; | 109 | struct _Eina_File_Direct_Iterator |
110 | size_t length; | 110 | { |
111 | Eina_Bool is_last : 1; | 111 | Eina_Iterator iterator; |
112 | 112 | ||
113 | Eina_File_Direct_Info info; | 113 | WIN32_FIND_DATA data; |
114 | 114 | HANDLE handle; | |
115 | char dir[1]; | 115 | size_t length; |
116 | }; | 116 | Eina_Bool is_last : 1; |
117 | 117 | ||
118 | struct _Eina_File | 118 | Eina_File_Direct_Info info; |
119 | { | 119 | |
120 | const char *filename; | 120 | char dir[1]; |
121 | 121 | }; | |
122 | Eina_Hash *map; | 122 | |
123 | Eina_Hash *rmap; | 123 | struct _Eina_File |
124 | void *global_map; | 124 | { |
125 | 125 | const char *filename; | |
126 | ULONGLONG length; | 126 | |
127 | ULONGLONG mtime; | 127 | Eina_Hash *map; |
128 | 128 | Eina_Hash *rmap; | |
129 | int refcount; | 129 | void *global_map; |
130 | int global_refcount; | 130 | |
131 | 131 | Eina_Lock lock; | |
132 | HANDLE handle; | 132 | |
133 | HANDLE fm; | 133 | ULONGLONG length; |
134 | 134 | ULONGLONG mtime; | |
135 | Eina_Bool shared : 1; | 135 | |
136 | Eina_Bool delete_me : 1; | 136 | int refcount; |
137 | }; | 137 | int global_refcount; |
138 | 138 | ||
139 | struct _Eina_File_Map | 139 | HANDLE handle; |
140 | { | 140 | HANDLE fm; |
141 | void *map; | 141 | |
142 | 142 | Eina_Bool shared : 1; | |
143 | unsigned long int offset; | 143 | Eina_Bool delete_me : 1; |
144 | unsigned long int length; | 144 | }; |
145 | 145 | ||
146 | int refcount; | 146 | struct _Eina_File_Map |
147 | }; | 147 | { |
148 | 148 | void *map; | |
149 | static Eina_Hash *_eina_file_cache = NULL; | 149 | |
150 | static Eina_List *_eina_file_cache_lru = NULL; | 150 | unsigned long int offset; |
151 | static Eina_List *_eina_file_cache_delete = NULL; | 151 | unsigned long int length; |
152 | 152 | ||
153 | static int _eina_file_log_dom = -1; | 153 | int refcount; |
154 | 154 | }; | |
155 | static void | 155 | |
156 | _eina_file_win32_backslash_change(char *dir) | 156 | static Eina_Hash *_eina_file_cache = NULL; |
157 | { | 157 | static Eina_Lock _eina_file_lock_cache; |
158 | char *tmp; | 158 | |
159 | 159 | static int _eina_file_log_dom = -1; | |
160 | tmp = dir; | 160 | |
161 | while (*tmp) | 161 | static void |
162 | { | 162 | _eina_file_win32_backslash_change(char *dir) |
163 | if (*tmp == '/') *tmp = '\\'; | 163 | { |
164 | tmp++; | 164 | char *tmp; |
165 | } | 165 | |
166 | } | 166 | tmp = dir; |
167 | 167 | while (*tmp) | |
168 | static Eina_Bool | 168 | { |
169 | _eina_file_win32_is_dir(const char *dir) | 169 | if (*tmp == '/') *tmp = '\\'; |
170 | { | 170 | tmp++; |
171 | #ifdef UNICODE | 171 | } |
172 | wchar_t *wdir = NULL; | 172 | } |
173 | #endif | 173 | |
174 | DWORD attr; | 174 | static Eina_Bool |
175 | 175 | _eina_file_win32_is_dir(const char *dir) | |
176 | /* check if it's a directory */ | 176 | { |
177 | #ifdef UNICODE | 177 | #ifdef UNICODE |
178 | wdir = evil_char_to_wchar(dir); | 178 | wchar_t *wdir = NULL; |
179 | if (!wdir) | 179 | #endif |
180 | return EINA_FALSE; | 180 | DWORD attr; |
181 | 181 | ||
182 | attr = GetFileAttributes(wdir); | 182 | /* check if it's a directory */ |
183 | free(wdir); | 183 | #ifdef UNICODE |
184 | #else | 184 | wdir = evil_char_to_wchar(dir); |
185 | attr = GetFileAttributes(dir); | 185 | if (!wdir) |
186 | #endif | 186 | return EINA_FALSE; |
187 | 187 | ||
188 | if (attr == 0xFFFFFFFF) | 188 | attr = GetFileAttributes(wdir); |
189 | return EINA_FALSE; | 189 | free(wdir); |
190 | 190 | #else | |
191 | if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) | 191 | attr = GetFileAttributes(dir); |
192 | return EINA_FALSE; | 192 | #endif |
193 | 193 | ||
194 | return EINA_TRUE; | 194 | if (attr == 0xFFFFFFFF) |
195 | } | 195 | return EINA_FALSE; |
196 | 196 | ||
197 | static char * | 197 | if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) |
198 | _eina_file_win32_dir_new(const char *dir) | 198 | return EINA_FALSE; |
199 | { | 199 | |
200 | char *new_dir; | 200 | return EINA_TRUE; |
201 | size_t length; | 201 | } |
202 | 202 | ||
203 | length = strlen(dir); | 203 | static char * |
204 | 204 | _eina_file_win32_dir_new(const char *dir) | |
205 | new_dir = (char *)malloc(sizeof(char) * length + 5); | 205 | { |
206 | if (!new_dir) | 206 | char *new_dir; |
207 | return NULL; | 207 | size_t length; |
208 | 208 | ||
209 | memcpy(new_dir, dir, length); | 209 | length = strlen(dir); |
210 | memcpy(new_dir + length, "\\*.*", 5); | 210 | |
211 | _eina_file_win32_backslash_change(new_dir); | 211 | new_dir = (char *)malloc(sizeof(char) * length + 5); |
212 | 212 | if (!new_dir) | |
213 | return new_dir; | 213 | return NULL; |
214 | } | 214 | |
215 | 215 | memcpy(new_dir, dir, length); | |
216 | static HANDLE | 216 | memcpy(new_dir + length, "\\*.*", 5); |
217 | _eina_file_win32_first_file(const char *dir, WIN32_FIND_DATA *fd) | 217 | _eina_file_win32_backslash_change(new_dir); |
218 | { | 218 | |
219 | HANDLE h; | 219 | return new_dir; |
220 | #ifdef UNICODE | 220 | } |
221 | wchar_t *wdir = NULL; | 221 | |
222 | 222 | static HANDLE | |
223 | wdir = evil_char_to_wchar(dir); | 223 | _eina_file_win32_first_file(const char *dir, WIN32_FIND_DATA *fd) |
224 | if (!wdir) | 224 | { |
225 | return NULL; | 225 | HANDLE h; |
226 | 226 | #ifdef UNICODE | |
227 | h = FindFirstFile(wdir, fd); | 227 | wchar_t *wdir = NULL; |
228 | free(wdir); | 228 | |
229 | #else | 229 | wdir = evil_char_to_wchar(dir); |
230 | h = FindFirstFile(dir, fd); | 230 | if (!wdir) |
231 | #endif | 231 | return NULL; |
232 | 232 | ||
233 | if (!h) | 233 | h = FindFirstFile(wdir, fd); |
234 | return NULL; | 234 | free(wdir); |
235 | 235 | #else | |
236 | while ((fd->cFileName[0] == '.') && | 236 | h = FindFirstFile(dir, fd); |
237 | ((fd->cFileName[1] == '\0') || | 237 | #endif |
238 | ((fd->cFileName[1] == '.') && (fd->cFileName[2] == '\0')))) | 238 | |
239 | { | 239 | if (!h) |
240 | if (!FindNextFile(h, fd)) | 240 | return NULL; |
241 | return NULL; | 241 | |
242 | } | 242 | while ((fd->cFileName[0] == '.') && |
243 | 243 | ((fd->cFileName[1] == '\0') || | |
244 | return h; | 244 | ((fd->cFileName[1] == '.') && (fd->cFileName[2] == '\0')))) |
245 | } | 245 | { |
246 | 246 | if (!FindNextFile(h, fd)) | |
247 | static Eina_Bool | 247 | return NULL; |
248 | _eina_file_win32_ls_iterator_next(Eina_File_Iterator *it, void **data) | 248 | } |
249 | { | 249 | |
250 | #ifdef UNICODE | 250 | return h; |
251 | wchar_t *old_name; | 251 | } |
252 | #else | 252 | |
253 | char *old_name; | 253 | static Eina_Bool |
254 | #endif | 254 | _eina_file_win32_ls_iterator_next(Eina_File_Iterator *it, void **data) |
255 | char *name; | 255 | { |
256 | char *cname; | 256 | #ifdef UNICODE |
257 | size_t length; | 257 | wchar_t *old_name; |
258 | Eina_Bool is_last; | 258 | #else |
259 | Eina_Bool res = EINA_TRUE; | 259 | char *old_name; |
260 | 260 | #endif | |
261 | if (it->handle == INVALID_HANDLE_VALUE) | 261 | char *name; |
262 | return EINA_FALSE; | 262 | char *cname; |
263 | 263 | size_t length; | |
264 | is_last = it->is_last; | 264 | Eina_Bool is_last; |
265 | #ifdef UNICODE | 265 | Eina_Bool res = EINA_TRUE; |
266 | old_name = _wcsdup(it->data.cFileName); | 266 | |
267 | #else | 267 | if (it->handle == INVALID_HANDLE_VALUE) |
268 | old_name = _strdup(it->data.cFileName); | 268 | return EINA_FALSE; |
269 | #endif | 269 | |
270 | if (!old_name) | 270 | is_last = it->is_last; |
271 | return EINA_FALSE; | 271 | #ifdef UNICODE |
272 | 272 | old_name = _wcsdup(it->data.cFileName); | |
273 | do { | 273 | #else |
274 | if (!FindNextFile(it->handle, &it->data)) | 274 | old_name = _strdup(it->data.cFileName); |
275 | { | 275 | #endif |
276 | if (GetLastError() == ERROR_NO_MORE_FILES) | 276 | if (!old_name) |
277 | it->is_last = EINA_TRUE; | 277 | return EINA_FALSE; |
278 | else | 278 | |
279 | res = EINA_FALSE; | 279 | do { |
280 | } | 280 | if (!FindNextFile(it->handle, &it->data)) |
281 | } while ((it->data.cFileName[0] == '.') && | 281 | { |
282 | ((it->data.cFileName[1] == '\0') || | 282 | if (GetLastError() == ERROR_NO_MORE_FILES) |
283 | ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ | 283 | it->is_last = EINA_TRUE; |
284 | 284 | else | |
285 | #ifdef UNICODE | 285 | res = EINA_FALSE; |
286 | cname = evil_wchar_to_char(old_name); | 286 | } |
287 | if (!cname) | 287 | } while ((it->data.cFileName[0] == '.') && |
288 | return EINA_FALSE; | 288 | ((it->data.cFileName[1] == '\0') || |
289 | #else | 289 | ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ |
290 | cname = old_name; | 290 | |
291 | #endif | 291 | #ifdef UNICODE |
292 | 292 | cname = evil_wchar_to_char(old_name); | |
293 | length = strlen(cname); | 293 | if (!cname) |
294 | name = alloca(length + 2 + it->length); | 294 | return EINA_FALSE; |
295 | 295 | #else | |
296 | memcpy(name, it->dir, it->length); | 296 | cname = old_name; |
297 | memcpy(name + it->length, "\\", 1); | 297 | #endif |
298 | memcpy(name + it->length + 1, cname, length + 1); | 298 | |
299 | 299 | length = strlen(cname); | |
300 | *data = (char *)eina_stringshare_add(name); | 300 | name = alloca(length + 2 + it->length); |
301 | 301 | ||
302 | #ifdef UNICODE | 302 | memcpy(name, it->dir, it->length); |
303 | free(cname); | 303 | memcpy(name + it->length, "\\", 1); |
304 | #endif | 304 | memcpy(name + it->length + 1, cname, length + 1); |
305 | free(old_name); | 305 | |
306 | 306 | *data = (char *)eina_stringshare_add(name); | |
307 | if (is_last) | 307 | |
308 | res = EINA_FALSE; | 308 | #ifdef UNICODE |
309 | 309 | free(cname); | |
310 | return res; | 310 | #endif |
311 | } | 311 | free(old_name); |
312 | 312 | ||
313 | static HANDLE | 313 | if (is_last) |
314 | _eina_file_win32_ls_iterator_container(Eina_File_Iterator *it) | 314 | res = EINA_FALSE; |
315 | { | 315 | |
316 | return it->handle; | 316 | return res; |
317 | } | 317 | } |
318 | 318 | ||
319 | static void | 319 | static HANDLE |
320 | _eina_file_win32_ls_iterator_free(Eina_File_Iterator *it) | 320 | _eina_file_win32_ls_iterator_container(Eina_File_Iterator *it) |
321 | { | 321 | { |
322 | if (it->handle != INVALID_HANDLE_VALUE) | 322 | return it->handle; |
323 | FindClose(it->handle); | 323 | } |
324 | 324 | ||
325 | EINA_MAGIC_SET(&it->iterator, 0); | 325 | static void |
326 | free(it); | 326 | _eina_file_win32_ls_iterator_free(Eina_File_Iterator *it) |
327 | } | 327 | { |
328 | 328 | if (it->handle != INVALID_HANDLE_VALUE) | |
329 | static Eina_Bool | 329 | FindClose(it->handle); |
330 | _eina_file_win32_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) | 330 | |
331 | { | 331 | EINA_MAGIC_SET(&it->iterator, 0); |
332 | #ifdef UNICODE | 332 | free(it); |
333 | wchar_t *old_name; | 333 | } |
334 | #else | 334 | |
335 | char *old_name; | 335 | static Eina_Bool |
336 | #endif | 336 | _eina_file_win32_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) |
337 | char *cname; | 337 | { |
338 | size_t length; | 338 | #ifdef UNICODE |
339 | DWORD attr; | 339 | wchar_t *old_name; |
340 | Eina_Bool is_last; | 340 | #else |
341 | Eina_Bool res = EINA_TRUE; | 341 | char *old_name; |
342 | 342 | #endif | |
343 | if (it->handle == INVALID_HANDLE_VALUE) | 343 | char *cname; |
344 | return EINA_FALSE; | 344 | size_t length; |
345 | 345 | DWORD attr; | |
346 | attr = it->data.dwFileAttributes; | 346 | Eina_Bool is_last; |
347 | is_last = it->is_last; | 347 | Eina_Bool res = EINA_TRUE; |
348 | #ifdef UNICODE | 348 | |
349 | old_name = _wcsdup(it->data.cFileName); | 349 | if (it->handle == INVALID_HANDLE_VALUE) |
350 | #else | 350 | return EINA_FALSE; |
351 | old_name = _strdup(it->data.cFileName); | 351 | |
352 | #endif | 352 | attr = it->data.dwFileAttributes; |
353 | if (!old_name) | 353 | is_last = it->is_last; |
354 | return EINA_FALSE; | 354 | #ifdef UNICODE |
355 | 355 | old_name = _wcsdup(it->data.cFileName); | |
356 | do { | 356 | #else |
357 | if (!FindNextFile(it->handle, &it->data)) | 357 | old_name = _strdup(it->data.cFileName); |
358 | { | 358 | #endif |
359 | if (GetLastError() == ERROR_NO_MORE_FILES) | 359 | if (!old_name) |
360 | it->is_last = EINA_TRUE; | 360 | return EINA_FALSE; |
361 | else | 361 | |
362 | res = EINA_FALSE; | 362 | do { |
363 | } | 363 | if (!FindNextFile(it->handle, &it->data)) |
364 | 364 | { | |
365 | #ifdef UNICODE | 365 | if (GetLastError() == ERROR_NO_MORE_FILES) |
366 | length = wcslen(old_name); | 366 | it->is_last = EINA_TRUE; |
367 | #else | 367 | else |
368 | length = strlen(old_name); | 368 | res = EINA_FALSE; |
369 | #endif | 369 | } |
370 | if (it->info.name_start + length + 1 >= PATH_MAX) | 370 | |
371 | { | 371 | #ifdef UNICODE |
372 | free(old_name); | 372 | length = wcslen(old_name); |
373 | #ifdef UNICODE | 373 | #else |
374 | old_name = _wcsdup(it->data.cFileName); | 374 | length = strlen(old_name); |
375 | #else | 375 | #endif |
376 | old_name = _strdup(it->data.cFileName); | 376 | if (it->info.name_start + length + 1 >= PATH_MAX) |
377 | #endif | 377 | { |
378 | continue; | 378 | free(old_name); |
379 | } | 379 | #ifdef UNICODE |
380 | 380 | old_name = _wcsdup(it->data.cFileName); | |
381 | } while ((it->data.cFileName[0] == '.') && | 381 | #else |
382 | ((it->data.cFileName[1] == '\0') || | 382 | old_name = _strdup(it->data.cFileName); |
383 | ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ | 383 | #endif |
384 | 384 | continue; | |
385 | #ifdef UNICODE | 385 | } |
386 | cname = evil_wchar_to_char(old_name); | 386 | |
387 | if (!cname) | 387 | } while ((it->data.cFileName[0] == '.') && |
388 | return EINA_FALSE; | 388 | ((it->data.cFileName[1] == '\0') || |
389 | #else | 389 | ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ |
390 | cname = old_name; | 390 | |
391 | #endif | 391 | #ifdef UNICODE |
392 | 392 | cname = evil_wchar_to_char(old_name); | |
393 | memcpy(it->info.path + it->info.name_start, cname, length); | 393 | if (!cname) |
394 | it->info.name_length = length; | 394 | return EINA_FALSE; |
395 | it->info.path_length = it->info.name_start + length; | 395 | #else |
396 | it->info.path[it->info.path_length] = '\0'; | 396 | cname = old_name; |
397 | 397 | #endif | |
398 | if (attr & FILE_ATTRIBUTE_DIRECTORY) | 398 | |
399 | it->info.type = EINA_FILE_DIR; | 399 | memcpy(it->info.path + it->info.name_start, cname, length); |
400 | else if (attr & FILE_ATTRIBUTE_REPARSE_POINT) | 400 | it->info.name_length = length; |
401 | it->info.type = EINA_FILE_LNK; | 401 | it->info.path_length = it->info.name_start + length; |
402 | else if (attr & (FILE_ATTRIBUTE_ARCHIVE | | 402 | it->info.path[it->info.path_length] = '\0'; |
403 | FILE_ATTRIBUTE_COMPRESSED | | 403 | |
404 | FILE_ATTRIBUTE_COMPRESSED | | 404 | if (attr & FILE_ATTRIBUTE_DIRECTORY) |
405 | FILE_ATTRIBUTE_HIDDEN | | 405 | it->info.type = EINA_FILE_DIR; |
406 | FILE_ATTRIBUTE_NORMAL | | 406 | else if (attr & FILE_ATTRIBUTE_REPARSE_POINT) |
407 | FILE_ATTRIBUTE_SPARSE_FILE | | 407 | it->info.type = EINA_FILE_LNK; |
408 | FILE_ATTRIBUTE_TEMPORARY)) | 408 | else if (attr & (FILE_ATTRIBUTE_ARCHIVE | |
409 | it->info.type = EINA_FILE_REG; | 409 | FILE_ATTRIBUTE_COMPRESSED | |
410 | else | 410 | FILE_ATTRIBUTE_COMPRESSED | |
411 | it->info.type = EINA_FILE_UNKNOWN; | 411 | FILE_ATTRIBUTE_HIDDEN | |
412 | 412 | FILE_ATTRIBUTE_NORMAL | | |
413 | *data = &it->info; | 413 | FILE_ATTRIBUTE_SPARSE_FILE | |
414 | 414 | FILE_ATTRIBUTE_TEMPORARY)) | |
415 | #ifdef UNICODE | 415 | it->info.type = EINA_FILE_REG; |
416 | free(cname); | 416 | else |
417 | #endif | 417 | it->info.type = EINA_FILE_UNKNOWN; |
418 | 418 | ||
419 | free(old_name); | 419 | *data = &it->info; |
420 | 420 | ||
421 | if (is_last) | 421 | #ifdef UNICODE |
422 | res = EINA_FALSE; | 422 | free(cname); |
423 | 423 | #endif | |
424 | return res; | 424 | |
425 | } | 425 | free(old_name); |
426 | 426 | ||
427 | static HANDLE | 427 | if (is_last) |
428 | _eina_file_win32_direct_ls_iterator_container(Eina_File_Direct_Iterator *it) | 428 | res = EINA_FALSE; |
429 | { | 429 | |
430 | return it->handle; | 430 | return res; |
431 | } | 431 | } |
432 | 432 | ||
433 | static void | 433 | static HANDLE |
434 | _eina_file_win32_direct_ls_iterator_free(Eina_File_Direct_Iterator *it) | 434 | _eina_file_win32_direct_ls_iterator_container(Eina_File_Direct_Iterator *it) |
435 | { | 435 | { |
436 | if (it->handle != INVALID_HANDLE_VALUE) | 436 | return it->handle; |
437 | FindClose(it->handle); | 437 | } |
438 | 438 | ||
439 | EINA_MAGIC_SET(&it->iterator, 0); | 439 | static void |
440 | free(it); | 440 | _eina_file_win32_direct_ls_iterator_free(Eina_File_Direct_Iterator *it) |
441 | } | 441 | { |
442 | 442 | if (it->handle != INVALID_HANDLE_VALUE) | |
443 | static void | 443 | FindClose(it->handle); |
444 | _eina_file_real_close(Eina_File *file) | 444 | |
445 | { | 445 | EINA_MAGIC_SET(&it->iterator, 0); |
446 | eina_hash_free(file->rmap); | 446 | free(it); |
447 | eina_hash_free(file->map); | 447 | } |
448 | 448 | ||
449 | if (file->global_map != MAP_FAILED) | 449 | static void |
450 | UnmapViewOfFile(file->global_map); | 450 | _eina_file_real_close(Eina_File *file) |
451 | 451 | { | |
452 | CloseHandle(file->fm); | 452 | eina_hash_free(file->rmap); |
453 | CloseHandle(file->handle); | 453 | eina_hash_free(file->map); |
454 | 454 | ||
455 | eina_stringshare_del(file->filename); | 455 | if (file->global_map != MAP_FAILED) |
456 | 456 | UnmapViewOfFile(file->global_map); | |
457 | free(file); | 457 | |
458 | } | 458 | CloseHandle(file->fm); |
459 | 459 | CloseHandle(file->handle); | |
460 | static void | 460 | |
461 | _eina_file_map_close(Eina_File_Map *map) | 461 | free(file); |
462 | { | 462 | } |
463 | if (map->map != MAP_FAILED) | 463 | |
464 | UnmapViewOfFile(map->map); | 464 | static void |
465 | free(map); | 465 | _eina_file_map_close(Eina_File_Map *map) |
466 | } | 466 | { |
467 | 467 | if (map->map != MAP_FAILED) | |
468 | static unsigned int | 468 | UnmapViewOfFile(map->map); |
469 | _eina_file_map_key_length(const void *key __UNUSED__) | 469 | free(map); |
470 | { | 470 | } |
471 | return sizeof (unsigned long int) * 2; | 471 | |
472 | } | 472 | static unsigned int |
473 | 473 | _eina_file_map_key_length(const void *key __UNUSED__) | |
474 | static int | 474 | { |
475 | _eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__, | 475 | return sizeof (unsigned long int) * 2; |
476 | const unsigned long int *key2, int key2_length __UNUSED__) | 476 | } |
477 | { | 477 | |
478 | if (key1[0] - key2[0] == 0) return key1[1] - key2[1]; | 478 | static int |
479 | return key1[0] - key2[0]; | 479 | _eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__, |
480 | } | 480 | const unsigned long int *key2, int key2_length __UNUSED__) |
481 | 481 | { | |
482 | static int | 482 | if (key1[0] - key2[0] == 0) return key1[1] - key2[1]; |
483 | _eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__) | 483 | return key1[0] - key2[0]; |
484 | { | 484 | } |
485 | return eina_hash_int64(&key[0], sizeof (unsigned long int)) | 485 | |
486 | ^ eina_hash_int64(&key[1], sizeof (unsigned long int)); | 486 | static int |
487 | } | 487 | _eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__) |
488 | 488 | { | |
489 | Eina_Bool | 489 | return eina_hash_int64(&key[0], sizeof (unsigned long int)) |
490 | eina_file_init(void) | 490 | ^ eina_hash_int64(&key[1], sizeof (unsigned long int)); |
491 | { | 491 | } |
492 | _eina_file_log_dom = eina_log_domain_register("eina_file", | 492 | |
493 | EINA_LOG_COLOR_DEFAULT); | 493 | static char * |
494 | if (_eina_file_log_dom < 0) | 494 | _eina_file_win32_escape(const char *path, size_t *length) |
495 | { | 495 | { |
496 | EINA_LOG_ERR("Could not register log domain: eina_file"); | 496 | char *result = strdup(path ? path : ""); |
497 | return EINA_FALSE; | 497 | char *p = result; |
498 | } | 498 | char *q = result; |
499 | 499 | size_t len; | |
500 | _eina_file_cache = eina_hash_string_djb2_new(EINA_FREE_CB(_eina_file_real_close)); | 500 | |
501 | if (!_eina_file_cache) | 501 | if (!result) |
502 | { | 502 | return NULL; |
503 | ERR("Could not create cache."); | 503 | |
504 | eina_log_domain_unregister(_eina_file_log_dom); | 504 | if (length) len = *length; |
505 | _eina_file_log_dom = -1; | 505 | else len = strlen(result); |
506 | return EINA_FALSE; | 506 | |
507 | } | 507 | while ((p = strchr(p, '/'))) |
508 | 508 | { | |
509 | return EINA_TRUE; | 509 | // remove double `/' |
510 | } | 510 | if (p[1] == '/') |
511 | 511 | { | |
512 | Eina_Bool | 512 | memmove(p, p + 1, --len - (p - result)); |
513 | eina_file_shutdown(void) | 513 | result[len] = '\0'; |
514 | { | 514 | } |
515 | Eina_File *f; | 515 | else |
516 | Eina_List *l; | 516 | if (p[1] == '.' |
517 | 517 | && p[2] == '.') | |
518 | EINA_LIST_FREE(_eina_file_cache_delete, f) | 518 | { |
519 | _eina_file_real_close(f); | 519 | // remove `/../' |
520 | 520 | if (p[3] == '/') | |
521 | EINA_LIST_FOREACH(_eina_file_cache_lru, l, f) | 521 | { |
522 | eina_hash_del(_eina_file_cache, f->filename, f); | 522 | char tmp; |
523 | 523 | ||
524 | if (eina_hash_population(_eina_file_cache) > 0) | 524 | len -= p + 3 - q; |
525 | { | 525 | memmove(q, p + 3, len - (q - result)); |
526 | Eina_Iterator *it; | 526 | result[len] = '\0'; |
527 | const char *key; | 527 | p = q; |
528 | 528 | ||
529 | it = eina_hash_iterator_key_new(_eina_file_cache); | 529 | /* Update q correctly. */ |
530 | EINA_ITERATOR_FOREACH(it, key) | 530 | tmp = *p; |
531 | ERR("File [%s] still open !", key); | 531 | *p = '\0'; |
532 | eina_iterator_free(it); | 532 | q = strrchr(result, '/'); |
533 | } | 533 | if (!q) q = result; |
534 | 534 | *p = tmp; | |
535 | eina_hash_free(_eina_file_cache); | 535 | } |
536 | 536 | else | |
537 | eina_log_domain_unregister(_eina_file_log_dom); | 537 | // remove '/..$' |
538 | _eina_file_log_dom = -1; | 538 | if (p[3] == '\0') |
539 | return EINA_TRUE; | 539 | { |
540 | } | 540 | len -= p + 2 - q; |
541 | 541 | result[len] = '\0'; | |
542 | 542 | q = p; | |
543 | /** | 543 | ++p; |
544 | * @endcond | 544 | } |
545 | */ | 545 | else |
546 | 546 | { | |
547 | /*============================================================================* | 547 | q = p; |
548 | * Global * | 548 | ++p; |
549 | *============================================================================*/ | 549 | } |
550 | 550 | } | |
551 | /*============================================================================* | 551 | else |
552 | * API * | 552 | { |
553 | *============================================================================*/ | 553 | q = p; |
554 | 554 | ++p; | |
555 | EAPI Eina_Bool | 555 | } |
556 | eina_file_dir_list(const char *dir, | 556 | } |
557 | Eina_Bool recursive, | 557 | |
558 | Eina_File_Dir_List_Cb cb, | 558 | if (length) |
559 | void *data) | 559 | *length = len; |
560 | { | 560 | |
561 | WIN32_FIND_DATA file; | 561 | return result; |
562 | HANDLE h; | 562 | } |
563 | char *new_dir; | 563 | |
564 | 564 | ||
565 | EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); | 565 | /** |
566 | EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); | 566 | * @endcond |
567 | EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); | 567 | */ |
568 | 568 | ||
569 | if (!_eina_file_win32_is_dir(dir)) | 569 | /*============================================================================* |
570 | return EINA_FALSE; | 570 | * Global * |
571 | 571 | *============================================================================*/ | |
572 | new_dir = _eina_file_win32_dir_new(dir); | 572 | |
573 | if (!new_dir) | 573 | Eina_Bool |
574 | return EINA_FALSE; | 574 | eina_file_init(void) |
575 | 575 | { | |
576 | h = _eina_file_win32_first_file(new_dir, &file); | 576 | _eina_file_log_dom = eina_log_domain_register("eina_file", |
577 | 577 | EINA_LOG_COLOR_DEFAULT); | |
578 | if (h == INVALID_HANDLE_VALUE) | 578 | if (_eina_file_log_dom < 0) |
579 | return EINA_FALSE; | 579 | { |
580 | 580 | EINA_LOG_ERR("Could not register log domain: eina_file"); | |
581 | do | 581 | return EINA_FALSE; |
582 | { | 582 | } |
583 | char *filename; | 583 | |
584 | 584 | _eina_file_cache = eina_hash_string_djb2_new(NULL); | |
585 | # ifdef UNICODE | 585 | if (!_eina_file_cache) |
586 | filename = evil_wchar_to_char(file.cFileName); | 586 | { |
587 | # else | 587 | ERR("Could not create cache."); |
588 | filename = file.cFileName; | 588 | eina_log_domain_unregister(_eina_file_log_dom); |
589 | # endif /* ! UNICODE */ | 589 | _eina_file_log_dom = -1; |
590 | if (!strcmp(filename, ".") || !strcmp(filename, "..")) | 590 | return EINA_FALSE; |
591 | continue; | 591 | } |
592 | 592 | ||
593 | cb(filename, dir, data); | 593 | eina_lock_new(&_eina_file_lock_cache); |
594 | 594 | ||
595 | if (recursive == EINA_TRUE) | 595 | return EINA_TRUE; |
596 | { | 596 | } |
597 | char *path; | 597 | |
598 | 598 | Eina_Bool | |
599 | path = alloca(strlen(dir) + strlen(filename) + 2); | 599 | eina_file_shutdown(void) |
600 | strcpy(path, dir); | 600 | { |
601 | strcat(path, "/"); | 601 | if (eina_hash_population(_eina_file_cache) > 0) |
602 | strcat(path, filename); | 602 | { |
603 | 603 | Eina_Iterator *it; | |
604 | if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) | 604 | const char *key; |
605 | continue; | 605 | |
606 | 606 | it = eina_hash_iterator_key_new(_eina_file_cache); | |
607 | eina_file_dir_list(path, recursive, cb, data); | 607 | EINA_ITERATOR_FOREACH(it, key) |
608 | } | 608 | ERR("File [%s] still open !", key); |
609 | 609 | eina_iterator_free(it); | |
610 | # ifdef UNICODE | 610 | } |
611 | free(filename); | 611 | |
612 | # endif /* UNICODE */ | 612 | eina_hash_free(_eina_file_cache); |
613 | 613 | ||
614 | } while (FindNextFile(h, &file)); | 614 | eina_lock_free(&_eina_file_lock_cache); |
615 | FindClose(h); | 615 | |
616 | 616 | eina_log_domain_unregister(_eina_file_log_dom); | |
617 | return EINA_TRUE; | 617 | _eina_file_log_dom = -1; |
618 | } | 618 | return EINA_TRUE; |
619 | 619 | } | |
620 | EAPI Eina_Array * | 620 | |
621 | eina_file_split(char *path) | 621 | /*============================================================================* |
622 | { | 622 | * API * |
623 | Eina_Array *ea; | 623 | *============================================================================*/ |
624 | char *current; | 624 | |
625 | size_t length; | 625 | |
626 | 626 | EAPI char * | |
627 | EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); | 627 | eina_file_path_sanitize(const char *path) |
628 | 628 | { | |
629 | ea = eina_array_new(16); | 629 | char *result = NULL; |
630 | 630 | size_t len; | |
631 | if (!ea) | 631 | |
632 | return NULL; | 632 | if (!path) return NULL; |
633 | 633 | ||
634 | for (current = strchr(path, '\\'); | 634 | len = strlen(path); |
635 | current; | 635 | if (len < 3) return NULL; |
636 | path = current + 1, current = strchr(path, '\\')) | 636 | |
637 | { | 637 | if (!evil_path_is_absolute(path)) |
638 | length = current - path; | 638 | { |
639 | 639 | DWORD l; | |
640 | if (length <= 0) | 640 | |
641 | continue; | 641 | l = GetCurrentDirectory(0, NULL); |
642 | 642 | if (l > 0) | |
643 | eina_array_push(ea, path); | 643 | { |
644 | *current = '\0'; | 644 | char *cwd; |
645 | } | 645 | DWORD l2; |
646 | 646 | ||
647 | if (*path != '\0') | 647 | cwd = alloca(sizeof(char) * (l + 1)); |
648 | eina_array_push(ea, path); | 648 | l2 = GetCurrentDirectory(l + 1, cwd); |
649 | 649 | if (l2 == l) | |
650 | return ea; | 650 | { |
651 | } | 651 | char *tmp; |
652 | 652 | ||
653 | EAPI Eina_Iterator * | 653 | len += l + 2; |
654 | eina_file_ls(const char *dir) | 654 | tmp = alloca(sizeof (char) * len); |
655 | { | 655 | snprintf(tmp, len, "%s/%s", cwd, path); |
656 | Eina_File_Iterator *it; | 656 | tmp[len - 1] = '\0'; |
657 | char *new_dir; | 657 | result = tmp; |
658 | size_t length; | 658 | } |
659 | 659 | } | |
660 | if (!dir || !*dir) | 660 | } |
661 | return NULL; | 661 | |
662 | 662 | return _eina_file_win32_escape(result ? result : path, &len); | |
663 | if (!_eina_file_win32_is_dir(dir)) | 663 | } |
664 | return NULL; | 664 | |
665 | 665 | EAPI Eina_Bool | |
666 | length = strlen(dir); | 666 | eina_file_dir_list(const char *dir, |
667 | 667 | Eina_Bool recursive, | |
668 | it = calloc(1, sizeof (Eina_File_Iterator) + length); | 668 | Eina_File_Dir_List_Cb cb, |
669 | if (!it) | 669 | void *data) |
670 | return NULL; | 670 | { |
671 | 671 | WIN32_FIND_DATA file; | |
672 | EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); | 672 | HANDLE h; |
673 | 673 | char *new_dir; | |
674 | new_dir = _eina_file_win32_dir_new(dir); | 674 | |
675 | if (!new_dir) | 675 | EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); |
676 | goto free_it; | 676 | EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); |
677 | 677 | EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); | |
678 | it->handle = _eina_file_win32_first_file(new_dir, &it->data); | 678 | |
679 | free(new_dir); | 679 | if (!_eina_file_win32_is_dir(dir)) |
680 | if (it->handle == INVALID_HANDLE_VALUE) | 680 | return EINA_FALSE; |
681 | goto free_it; | 681 | |
682 | 682 | new_dir = _eina_file_win32_dir_new(dir); | |
683 | memcpy(it->dir, dir, length + 1); | 683 | if (!new_dir) |
684 | if (dir[length - 1] != '\\') | 684 | return EINA_FALSE; |
685 | it->length = length; | 685 | |
686 | else | 686 | h = _eina_file_win32_first_file(new_dir, &file); |
687 | it->length = length - 1; | 687 | |
688 | _eina_file_win32_backslash_change(it->dir); | 688 | if (h == INVALID_HANDLE_VALUE) |
689 | 689 | return EINA_FALSE; | |
690 | it->iterator.version = EINA_ITERATOR_VERSION; | 690 | |
691 | it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_ls_iterator_next); | 691 | do |
692 | it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_ls_iterator_container); | 692 | { |
693 | it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_ls_iterator_free); | 693 | char *filename; |
694 | 694 | ||
695 | return &it->iterator; | 695 | # ifdef UNICODE |
696 | 696 | filename = evil_wchar_to_char(file.cFileName); | |
697 | free_it: | 697 | # else |
698 | free(it); | 698 | filename = file.cFileName; |
699 | 699 | # endif /* ! UNICODE */ | |
700 | return NULL; | 700 | if (!strcmp(filename, ".") || !strcmp(filename, "..")) |
701 | } | 701 | continue; |
702 | 702 | ||
703 | EAPI Eina_Iterator * | 703 | cb(filename, dir, data); |
704 | eina_file_direct_ls(const char *dir) | 704 | |
705 | { | 705 | if (recursive == EINA_TRUE) |
706 | Eina_File_Direct_Iterator *it; | 706 | { |
707 | char *new_dir; | 707 | char *path; |
708 | size_t length; | 708 | |
709 | 709 | path = alloca(strlen(dir) + strlen(filename) + 2); | |
710 | if (!dir || !*dir) | 710 | strcpy(path, dir); |
711 | return NULL; | 711 | strcat(path, "/"); |
712 | 712 | strcat(path, filename); | |
713 | length = strlen(dir); | 713 | |
714 | 714 | if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) | |
715 | if (length + 12 + 2 >= MAX_PATH) | 715 | continue; |
716 | return NULL; | 716 | |
717 | 717 | eina_file_dir_list(path, recursive, cb, data); | |
718 | it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); | 718 | } |
719 | if (!it) | 719 | |
720 | return NULL; | 720 | # ifdef UNICODE |
721 | 721 | free(filename); | |
722 | EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); | 722 | # endif /* UNICODE */ |
723 | 723 | ||
724 | new_dir = _eina_file_win32_dir_new(dir); | 724 | } while (FindNextFile(h, &file)); |
725 | if (!new_dir) | 725 | FindClose(h); |
726 | goto free_it; | 726 | |
727 | 727 | return EINA_TRUE; | |
728 | it->handle = _eina_file_win32_first_file(new_dir, &it->data); | 728 | } |
729 | free(new_dir); | 729 | |
730 | if (it->handle == INVALID_HANDLE_VALUE) | 730 | EAPI Eina_Array * |
731 | goto free_it; | 731 | eina_file_split(char *path) |
732 | 732 | { | |
733 | memcpy(it->dir, dir, length + 1); | 733 | Eina_Array *ea; |
734 | it->length = length; | 734 | char *current; |
735 | _eina_file_win32_backslash_change(it->dir); | 735 | size_t length; |
736 | 736 | ||
737 | memcpy(it->info.path, dir, length); | 737 | EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); |
738 | if (dir[length - 1] == '\\') | 738 | |
739 | it->info.name_start = length; | 739 | ea = eina_array_new(16); |
740 | else | 740 | |
741 | { | 741 | if (!ea) |
742 | it->info.path[length] = '\\'; | 742 | return NULL; |
743 | it->info.name_start = length + 1; | 743 | |
744 | } | 744 | for (current = strchr(path, '\\'); |
745 | _eina_file_win32_backslash_change(it->info.path); | 745 | current; |
746 | 746 | path = current + 1, current = strchr(path, '\\')) | |
747 | it->iterator.version = EINA_ITERATOR_VERSION; | 747 | { |
748 | it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_direct_ls_iterator_next); | 748 | length = current - path; |
749 | it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_direct_ls_iterator_container); | 749 | |
750 | it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_direct_ls_iterator_free); | 750 | if (length <= 0) |
751 | 751 | continue; | |
752 | return &it->iterator; | 752 | |
753 | 753 | eina_array_push(ea, path); | |
754 | free_it: | 754 | *current = '\0'; |
755 | free(it); | 755 | } |
756 | 756 | ||
757 | return NULL; | 757 | if (*path != '\0') |
758 | } | 758 | eina_array_push(ea, path); |
759 | 759 | ||
760 | EAPI Eina_Iterator * | 760 | return ea; |
761 | eina_file_stat_ls(const char *dir) | 761 | } |
762 | { | 762 | |
763 | return eina_file_direct_ls(dir); | 763 | EAPI Eina_Iterator * |
764 | } | 764 | eina_file_ls(const char *dir) |
765 | 765 | { | |
766 | EAPI Eina_File * | 766 | Eina_File_Iterator *it; |
767 | eina_file_open(const char *filename, Eina_Bool shared) | 767 | char *new_dir; |
768 | { | 768 | size_t length; |
769 | Eina_File *file; | 769 | |
770 | Eina_File *n; | 770 | EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL); |
771 | HANDLE handle; | 771 | |
772 | HANDLE fm; | 772 | if (!dir || !*dir) |
773 | WIN32_FILE_ATTRIBUTE_DATA fad; | 773 | return NULL; |
774 | ULARGE_INTEGER length; | 774 | |
775 | ULARGE_INTEGER mtime; | 775 | if (!_eina_file_win32_is_dir(dir)) |
776 | Eina_Bool create = EINA_FALSE; | 776 | return NULL; |
777 | 777 | ||
778 | /* FIXME: always open absolute path (need to fix filename according to current | 778 | length = strlen(dir); |
779 | directory) */ | 779 | |
780 | 780 | it = calloc(1, sizeof (Eina_File_Iterator) + length); | |
781 | /* FIXME: how to emulate shm_open ? Just OpenFileMapping ? */ | 781 | if (!it) |
782 | #if 0 | 782 | return NULL; |
783 | if (shared) | 783 | |
784 | handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, | 784 | EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); |
785 | NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, | 785 | |
786 | NULL); | 786 | new_dir = _eina_file_win32_dir_new(dir); |
787 | else | 787 | if (!new_dir) |
788 | #endif | 788 | goto free_it; |
789 | handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, | 789 | |
790 | NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, | 790 | it->handle = _eina_file_win32_first_file(new_dir, &it->data); |
791 | NULL); | 791 | free(new_dir); |
792 | 792 | if (it->handle == INVALID_HANDLE_VALUE) | |
793 | if (handle == INVALID_HANDLE_VALUE) | 793 | goto free_it; |
794 | return NULL; | 794 | |
795 | 795 | memcpy(it->dir, dir, length + 1); | |
796 | fm = CreateFileMapping(handle, NULL, PAGE_READONLY, 0, 0, NULL); | 796 | if (dir[length - 1] != '\\') |
797 | if (!fm) | 797 | it->length = length; |
798 | goto close_handle; | 798 | else |
799 | 799 | it->length = length - 1; | |
800 | if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad)) | 800 | _eina_file_win32_backslash_change(it->dir); |
801 | goto close_fm; | 801 | |
802 | 802 | it->iterator.version = EINA_ITERATOR_VERSION; | |
803 | length.u.LowPart = fad.nFileSizeLow; | 803 | it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_ls_iterator_next); |
804 | length.u.HighPart = fad.nFileSizeHigh; | 804 | it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_ls_iterator_container); |
805 | mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime; | 805 | it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_ls_iterator_free); |
806 | mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime; | 806 | |
807 | 807 | return &it->iterator; | |
808 | file = eina_hash_find(_eina_file_cache, filename); | 808 | |
809 | if (file && | 809 | free_it: |
810 | (file->mtime != mtime.QuadPart || file->length != length.QuadPart)) | 810 | free(it); |
811 | { | 811 | |
812 | create = EINA_TRUE; | 812 | return NULL; |
813 | 813 | } | |
814 | if (file->refcount == 0) | 814 | |
815 | { | 815 | EAPI Eina_Iterator * |
816 | _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file); | 816 | eina_file_direct_ls(const char *dir) |
817 | eina_hash_del(_eina_file_cache, file->filename, file); | 817 | { |
818 | 818 | Eina_File_Direct_Iterator *it; | |
819 | file = NULL; | 819 | char *new_dir; |
820 | } | 820 | size_t length; |
821 | else if (!file->delete_me) | 821 | |
822 | { | 822 | EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL); |
823 | file->delete_me = EINA_TRUE; | 823 | |
824 | _eina_file_cache_delete = eina_list_prepend(_eina_file_cache_delete, file); | 824 | if (!dir || !*dir) |
825 | } | 825 | return NULL; |
826 | } | 826 | |
827 | 827 | length = strlen(dir); | |
828 | if (!file || create) | 828 | |
829 | { | 829 | if (length + 12 + 2 >= MAX_PATH) |
830 | n = calloc(1, sizeof (Eina_File)); | 830 | return NULL; |
831 | if (!n) | 831 | |
832 | goto close_fm; | 832 | it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); |
833 | 833 | if (!it) | |
834 | n->filename = eina_stringshare_add(filename); | 834 | return NULL; |
835 | n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length), | 835 | |
836 | EINA_KEY_CMP(_eina_file_map_key_cmp), | 836 | EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); |
837 | EINA_KEY_HASH(_eina_file_map_key_hash), | 837 | |
838 | EINA_FREE_CB(_eina_file_map_close), | 838 | new_dir = _eina_file_win32_dir_new(dir); |
839 | 3); | 839 | if (!new_dir) |
840 | n->rmap = eina_hash_pointer_new(NULL); | 840 | goto free_it; |
841 | n->global_map = MAP_FAILED; | 841 | |
842 | n->length = length.QuadPart; | 842 | it->handle = _eina_file_win32_first_file(new_dir, &it->data); |
843 | n->mtime = mtime.QuadPart; | 843 | free(new_dir); |
844 | n->refcount = 0; | 844 | if (it->handle == INVALID_HANDLE_VALUE) |
845 | n->handle = handle; | 845 | goto free_it; |
846 | n->fm = fm; | 846 | |
847 | n->shared = shared; | 847 | memcpy(it->dir, dir, length + 1); |
848 | n->delete_me = EINA_FALSE; | 848 | it->length = length; |
849 | 849 | _eina_file_win32_backslash_change(it->dir); | |
850 | eina_hash_set(_eina_file_cache, filename, n); | 850 | |
851 | } | 851 | memcpy(it->info.path, dir, length); |
852 | else | 852 | if (dir[length - 1] == '\\') |
853 | { | 853 | it->info.name_start = length; |
854 | CloseHandle(fm); | 854 | else |
855 | CloseHandle(handle); | 855 | { |
856 | 856 | it->info.path[length] = '\\'; | |
857 | n = file; | 857 | it->info.name_start = length + 1; |
858 | 858 | } | |
859 | if (n->refcount == 0) | 859 | _eina_file_win32_backslash_change(it->info.path); |
860 | _eina_file_cache_lru = eina_list_remove(_eina_file_cache_lru, n); | 860 | |
861 | } | 861 | it->iterator.version = EINA_ITERATOR_VERSION; |
862 | 862 | it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_direct_ls_iterator_next); | |
863 | n->refcount++; | 863 | it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_direct_ls_iterator_container); |
864 | 864 | it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_direct_ls_iterator_free); | |
865 | return n; | 865 | |
866 | 866 | return &it->iterator; | |
867 | close_fm: | 867 | |
868 | CloseHandle(fm); | 868 | free_it: |
869 | close_handle: | 869 | free(it); |
870 | CloseHandle(handle); | 870 | |
871 | 871 | return NULL; | |
872 | return NULL; | 872 | } |
873 | } | 873 | |
874 | 874 | EAPI Eina_Iterator * | |
875 | EAPI void | 875 | eina_file_stat_ls(const char *dir) |
876 | eina_file_close(Eina_File *file) | 876 | { |
877 | { | 877 | return eina_file_direct_ls(dir); |
878 | file->refcount--; | 878 | } |
879 | 879 | ||
880 | if (file->refcount != 0) return ; | 880 | EAPI Eina_File * |
881 | 881 | eina_file_open(const char *path, Eina_Bool shared) | |
882 | if (file->delete_me) | 882 | { |
883 | { | 883 | Eina_File *file; |
884 | _eina_file_cache_delete = eina_list_remove(_eina_file_cache_delete, file); | 884 | Eina_File *n; |
885 | _eina_file_real_close(file); | 885 | char *filename; |
886 | } | 886 | HANDLE handle; |
887 | else | 887 | HANDLE fm; |
888 | { | 888 | WIN32_FILE_ATTRIBUTE_DATA fad; |
889 | _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file); | 889 | ULARGE_INTEGER length; |
890 | } | 890 | ULARGE_INTEGER mtime; |
891 | } | 891 | |
892 | 892 | EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); | |
893 | EAPI size_t | 893 | |
894 | eina_file_size_get(Eina_File *file) | 894 | filename = eina_file_path_sanitize(path); |
895 | { | 895 | if (!filename) return NULL; |
896 | return file->length; | 896 | |
897 | } | 897 | /* FIXME: how to emulate shm_open ? Just OpenFileMapping ? */ |
898 | 898 | #if 0 | |
899 | EAPI time_t | 899 | if (shared) |
900 | eina_file_mtime_get(Eina_File *file) | 900 | handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, |
901 | { | 901 | NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, |
902 | return file->mtime; | 902 | NULL); |
903 | } | 903 | else |
904 | 904 | #endif | |
905 | EAPI const char * | 905 | handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, |
906 | eina_file_filename_get(Eina_File *file) | 906 | NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, |
907 | { | 907 | NULL); |
908 | return file->filename; | 908 | |
909 | } | 909 | if (handle == INVALID_HANDLE_VALUE) |
910 | 910 | return NULL; | |
911 | EAPI void * | 911 | |
912 | eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__) | 912 | fm = CreateFileMapping(handle, NULL, PAGE_READONLY, 0, 0, NULL); |
913 | { | 913 | if (!fm) |
914 | if (file->global_map == MAP_FAILED) | 914 | goto close_handle; |
915 | { | 915 | |
916 | void *data; | 916 | if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad)) |
917 | 917 | goto close_fm; | |
918 | data = MapViewOfFile(file->fm, FILE_MAP_READ, | 918 | |
919 | 0, 0, file->length); | 919 | length.u.LowPart = fad.nFileSizeLow; |
920 | if (!data) | 920 | length.u.HighPart = fad.nFileSizeHigh; |
921 | file->global_map = MAP_FAILED; | 921 | mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime; |
922 | else | 922 | mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime; |
923 | file->global_map = data; | 923 | |
924 | } | 924 | eina_lock_take(&_eina_file_lock_cache); |
925 | 925 | ||
926 | if (file->global_map != MAP_FAILED) | 926 | file = eina_hash_find(_eina_file_cache, filename); |
927 | { | 927 | if (file && |
928 | file->global_refcount++; | 928 | (file->mtime != mtime.QuadPart || file->length != length.QuadPart)) |
929 | return file->global_map; | 929 | { |
930 | } | 930 | file->delete_me = EINA_TRUE; |
931 | 931 | eina_hash_del(_eina_file_cache, file->filename, file); | |
932 | return NULL; | 932 | _eina_file_real_close(file); |
933 | } | 933 | file = NULL; |
934 | 934 | } | |
935 | EAPI void * | 935 | |
936 | eina_file_map_new(Eina_File *file, Eina_File_Populate rule, | 936 | if (!file) |
937 | unsigned long int offset, unsigned long int length) | 937 | { |
938 | { | 938 | n = malloc(sizeof (Eina_File) + strlen(filename) + 1); |
939 | Eina_File_Map *map; | 939 | if (!n) |
940 | unsigned long int key[2]; | 940 | { |
941 | 941 | eina_lock_release(&_eina_file_lock_cache); | |
942 | if (offset > file->length) | 942 | goto close_fm; |
943 | return NULL; | 943 | } |
944 | if (offset + length > file->length) | 944 | |
945 | return NULL; | 945 | n->filename = (char*) (n + 1); |
946 | 946 | strcpy((char*) n->filename, filename); | |
947 | if (offset == 0 && length == file->length) | 947 | n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length), |
948 | return eina_file_map_all(file, rule); | 948 | EINA_KEY_CMP(_eina_file_map_key_cmp), |
949 | 949 | EINA_KEY_HASH(_eina_file_map_key_hash), | |
950 | key[0] = offset; | 950 | EINA_FREE_CB(_eina_file_map_close), |
951 | key[1] = length; | 951 | 3); |
952 | 952 | n->rmap = eina_hash_pointer_new(NULL); | |
953 | map = eina_hash_find(file->map, &key); | 953 | n->global_map = MAP_FAILED; |
954 | if (!map) | 954 | n->global_refcount = 0; |
955 | { | 955 | n->length = length.QuadPart; |
956 | void *data; | 956 | n->mtime = mtime.QuadPart; |
957 | 957 | n->refcount = 0; | |
958 | map = malloc(sizeof (Eina_File_Map)); | 958 | n->handle = handle; |
959 | if (!map) return NULL; | 959 | n->fm = fm; |
960 | 960 | n->shared = shared; | |
961 | data = MapViewOfFile(file->fm, FILE_MAP_READ, | 961 | n->delete_me = EINA_FALSE; |
962 | offset & 0xffff0000, | 962 | eina_lock_new(&n->lock); |
963 | offset & 0x0000ffff, | 963 | eina_hash_direct_add(_eina_file_cache, n->filename, n); |
964 | length); | 964 | } |
965 | if (!data) | 965 | else |
966 | map->map = MAP_FAILED; | 966 | { |
967 | else | 967 | CloseHandle(fm); |
968 | map->map = data; | 968 | CloseHandle(handle); |
969 | 969 | ||
970 | map->offset = offset; | 970 | n = file; |
971 | map->length = length; | 971 | } |
972 | map->refcount = 0; | 972 | eina_lock_take(&n->lock); |
973 | 973 | n->refcount++; | |
974 | if (map->map == MAP_FAILED) | 974 | eina_lock_release(&n->lock); |
975 | { | 975 | |
976 | free(map); | 976 | eina_lock_release(&_eina_file_lock_cache); |
977 | return NULL; | 977 | |
978 | } | 978 | free(filename); |
979 | 979 | ||
980 | eina_hash_add(file->map, &key, map); | 980 | return n; |
981 | eina_hash_direct_add(file->rmap, map->map, map); | 981 | |
982 | } | 982 | close_fm: |
983 | 983 | CloseHandle(fm); | |
984 | map->refcount++; | 984 | close_handle: |
985 | 985 | CloseHandle(handle); | |
986 | return map->map; | 986 | |
987 | } | 987 | return NULL; |
988 | 988 | } | |
989 | EAPI void | 989 | |
990 | eina_file_map_free(Eina_File *file, void *map) | 990 | EAPI void |
991 | { | 991 | eina_file_close(Eina_File *file) |
992 | if (file->global_map == map) | 992 | { |
993 | { | 993 | EINA_SAFETY_ON_NULL_RETURN(file); |
994 | file->global_refcount--; | 994 | |
995 | 995 | eina_lock_take(&file->lock); | |
996 | if (file->global_refcount > 0) return ; | 996 | file->refcount--; |
997 | 997 | eina_lock_release(&file->lock); | |
998 | /* FIXME: are we sure that file->global_map != MAP_FAILED ? */ | 998 | |
999 | if (file->global_map != MAP_FAILED) | 999 | if (file->refcount != 0) return ; |
1000 | UnmapViewOfFile(file->global_map); | 1000 | eina_lock_take(&_eina_file_lock_cache); |
1001 | file->global_map = MAP_FAILED; | 1001 | |
1002 | } | 1002 | eina_hash_del(_eina_file_cache, file->filename, file); |
1003 | else | 1003 | _eina_file_real_close(file); |
1004 | { | 1004 | |
1005 | Eina_File_Map *em; | 1005 | eina_lock_release(&_eina_file_lock_cache); |
1006 | unsigned long int key[2]; | 1006 | } |
1007 | 1007 | ||
1008 | em = eina_hash_find(file->rmap, &map); | 1008 | EAPI size_t |
1009 | if (!em) return ; | 1009 | eina_file_size_get(Eina_File *file) |
1010 | 1010 | { | |
1011 | em->refcount--; | 1011 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0); |
1012 | 1012 | return file->length; | |
1013 | if (em->refcount > 0) return ; | 1013 | } |
1014 | 1014 | ||
1015 | key[0] = em->offset; | 1015 | EAPI time_t |
1016 | key[1] = em->length; | 1016 | eina_file_mtime_get(Eina_File *file) |
1017 | 1017 | { | |
1018 | eina_hash_del(file->rmap, &map, em); | 1018 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0); |
1019 | eina_hash_del(file->map, &key, em); | 1019 | return file->mtime; |
1020 | } | 1020 | } |
1021 | } | 1021 | |
1022 | EAPI const char * | ||
1023 | eina_file_filename_get(Eina_File *file) | ||
1024 | { | ||
1025 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); | ||
1026 | return file->filename; | ||
1027 | } | ||
1028 | |||
1029 | EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file __UNUSED__) | ||
1030 | { | ||
1031 | return NULL; | ||
1032 | } | ||
1033 | |||
1034 | EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file __UNUSED__) | ||
1035 | { | ||
1036 | return NULL; | ||
1037 | } | ||
1038 | |||
1039 | EAPI void * | ||
1040 | eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__) | ||
1041 | { | ||
1042 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); | ||
1043 | |||
1044 | eina_lock_take(&file->lock); | ||
1045 | if (file->global_map == MAP_FAILED) | ||
1046 | { | ||
1047 | void *data; | ||
1048 | |||
1049 | data = MapViewOfFile(file->fm, FILE_MAP_READ, | ||
1050 | 0, 0, file->length); | ||
1051 | if (!data) | ||
1052 | file->global_map = MAP_FAILED; | ||
1053 | else | ||
1054 | file->global_map = data; | ||
1055 | } | ||
1056 | |||
1057 | if (file->global_map != MAP_FAILED) | ||
1058 | { | ||
1059 | file->global_refcount++; | ||
1060 | return file->global_map; | ||
1061 | } | ||
1062 | |||
1063 | eina_lock_release(&file->lock); | ||
1064 | return NULL; | ||
1065 | } | ||
1066 | |||
1067 | EAPI void * | ||
1068 | eina_file_map_new(Eina_File *file, Eina_File_Populate rule, | ||
1069 | unsigned long int offset, unsigned long int length) | ||
1070 | { | ||
1071 | Eina_File_Map *map; | ||
1072 | unsigned long int key[2]; | ||
1073 | |||
1074 | EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); | ||
1075 | |||
1076 | if (offset > file->length) | ||
1077 | return NULL; | ||
1078 | if (offset + length > file->length) | ||
1079 | return NULL; | ||
1080 | |||
1081 | if (offset == 0 && length == file->length) | ||
1082 | return eina_file_map_all(file, rule); | ||
1083 | |||
1084 | key[0] = offset; | ||
1085 | key[1] = length; | ||
1086 | |||
1087 | eina_lock_take(&file->lock); | ||
1088 | |||
1089 | map = eina_hash_find(file->map, &key); | ||
1090 | if (!map) | ||
1091 | { | ||
1092 | void *data; | ||
1093 | |||
1094 | map = malloc(sizeof (Eina_File_Map)); | ||
1095 | if (!map) | ||
1096 | { | ||
1097 | eina_lock_release(&file->lock); | ||
1098 | return NULL; | ||
1099 | } | ||
1100 | |||
1101 | data = MapViewOfFile(file->fm, FILE_MAP_READ, | ||
1102 | offset & 0xffff0000, | ||
1103 | offset & 0x0000ffff, | ||
1104 | length); | ||
1105 | if (!data) | ||
1106 | map->map = MAP_FAILED; | ||
1107 | else | ||
1108 | map->map = data; | ||
1109 | |||
1110 | map->offset = offset; | ||
1111 | map->length = length; | ||
1112 | map->refcount = 0; | ||
1113 | |||
1114 | if (map->map == MAP_FAILED) | ||
1115 | { | ||
1116 | free(map); | ||
1117 | eina_lock_release(&file->lock); | ||
1118 | return NULL; | ||
1119 | } | ||
1120 | |||
1121 | eina_hash_add(file->map, &key, map); | ||
1122 | eina_hash_direct_add(file->rmap, map->map, map); | ||
1123 | } | ||
1124 | |||
1125 | map->refcount++; | ||
1126 | |||
1127 | eina_lock_release(&file->lock); | ||
1128 | |||
1129 | return map->map; | ||
1130 | } | ||
1131 | |||
1132 | EAPI void | ||
1133 | eina_file_map_free(Eina_File *file, void *map) | ||
1134 | { | ||
1135 | EINA_SAFETY_ON_NULL_RETURN(file); | ||
1136 | |||
1137 | eina_lock_take(&file->lock); | ||
1138 | |||
1139 | if (file->global_map == map) | ||
1140 | { | ||
1141 | file->global_refcount--; | ||
1142 | |||
1143 | if (file->global_refcount > 0) goto on_exit; | ||
1144 | |||
1145 | UnmapViewOfFile(file->global_map); | ||
1146 | file->global_map = MAP_FAILED; | ||
1147 | } | ||
1148 | else | ||
1149 | { | ||
1150 | Eina_File_Map *em; | ||
1151 | unsigned long int key[2]; | ||
1152 | |||
1153 | em = eina_hash_find(file->rmap, &map); | ||
1154 | if (!em) goto on_exit; | ||
1155 | |||
1156 | em->refcount--; | ||
1157 | |||
1158 | if (em->refcount > 0) goto on_exit; | ||
1159 | |||
1160 | key[0] = em->offset; | ||
1161 | key[1] = em->length; | ||
1162 | |||
1163 | eina_hash_del(file->rmap, &map, em); | ||
1164 | eina_hash_del(file->map, &key, em); | ||
1165 | } | ||
1166 | |||
1167 | on_exit: | ||
1168 | eina_lock_release(&file->lock); | ||
1169 | } | ||
1170 | |||
1171 | EAPI int | ||
1172 | eina_file_statat(void *container __UNUSED__, Eina_File_Direct_Info *info, Eina_Stat *st) | ||
1173 | { | ||
1174 | struct __stat64 buf; | ||
1175 | |||
1176 | EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1); | ||
1177 | EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1); | ||
1178 | |||
1179 | if (stat64(info->path, &buf)) | ||
1180 | { | ||
1181 | if (info->type != EINA_FILE_LNK) | ||
1182 | info->type = EINA_FILE_UNKNOWN; | ||
1183 | return -1; | ||
1184 | } | ||
1185 | |||
1186 | if (info->type == EINA_FILE_UNKNOWN) | ||
1187 | { | ||
1188 | if (S_ISREG(buf.st_mode)) | ||
1189 | info->type = EINA_FILE_REG; | ||
1190 | else if (S_ISDIR(buf.st_mode)) | ||
1191 | info->type = EINA_FILE_DIR; | ||
1192 | else | ||
1193 | info->type = EINA_FILE_UNKNOWN; | ||
1194 | } | ||
1195 | |||
1196 | st->dev = buf.st_dev; | ||
1197 | st->ino = buf.st_ino; | ||
1198 | st->mode = buf.st_mode; | ||
1199 | st->nlink = buf.st_nlink; | ||
1200 | st->uid = buf.st_uid; | ||
1201 | st->gid = buf.st_gid; | ||
1202 | st->rdev = buf.st_rdev; | ||
1203 | st->size = buf.st_size; | ||
1204 | st->blksize = 0; | ||
1205 | st->blocks = 0; | ||
1206 | st->atime = buf.st_atime; | ||
1207 | st->mtime = buf.st_mtime; | ||
1208 | st->ctime = buf.st_ctime; | ||
1209 | st->atimensec = 0; | ||
1210 | st->mtimensec = 0; | ||
1211 | st->ctimensec = 0; | ||
1212 | |||
1213 | return 0; | ||
1214 | } | ||
diff --git a/libraries/eina/src/lib/eina_inlist.c b/libraries/eina/src/lib/eina_inlist.c index 75a2cc1..c80f87b 100644 --- a/libraries/eina/src/lib/eina_inlist.c +++ b/libraries/eina/src/lib/eina_inlist.c | |||
@@ -430,6 +430,8 @@ eina_inlist_find(Eina_Inlist *list, Eina_Inlist *item) | |||
430 | { | 430 | { |
431 | Eina_Inlist *l; | 431 | Eina_Inlist *l; |
432 | 432 | ||
433 | EINA_SAFETY_ON_NULL_RETURN_VAL(item, NULL); | ||
434 | |||
433 | for (l = list; l; l = l->next) { | 435 | for (l = list; l; l = l->next) { |
434 | if (l == item) | 436 | if (l == item) |
435 | return item; | 437 | return item; |
@@ -559,6 +561,9 @@ eina_inlist_sorted_insert(Eina_Inlist *list, | |||
559 | int cur = 0; | 561 | int cur = 0; |
560 | int count; | 562 | int count; |
561 | 563 | ||
564 | EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); | ||
565 | EINA_SAFETY_ON_NULL_RETURN_VAL(func, list); | ||
566 | |||
562 | if (!list) return eina_inlist_append(NULL, item); | 567 | if (!list) return eina_inlist_append(NULL, item); |
563 | 568 | ||
564 | if (!list->next) | 569 | if (!list->next) |
diff --git a/libraries/eina/src/lib/eina_list.c b/libraries/eina/src/lib/eina_list.c index d45cffd..c85855f 100644 --- a/libraries/eina/src/lib/eina_list.c +++ b/libraries/eina/src/lib/eina_list.c | |||
@@ -1026,7 +1026,7 @@ eina_list_clone(const Eina_List *list) | |||
1026 | } | 1026 | } |
1027 | 1027 | ||
1028 | EAPI Eina_List * | 1028 | EAPI Eina_List * |
1029 | eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) | 1029 | eina_list_sort(Eina_List *list, unsigned int limit, Eina_Compare_Cb func) |
1030 | { | 1030 | { |
1031 | unsigned int i = 0; | 1031 | unsigned int i = 0; |
1032 | unsigned int n = 0; | 1032 | unsigned int n = 0; |
@@ -1040,14 +1040,14 @@ eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) | |||
1040 | 1040 | ||
1041 | EINA_MAGIC_CHECK_LIST(list, NULL); | 1041 | EINA_MAGIC_CHECK_LIST(list, NULL); |
1042 | 1042 | ||
1043 | /* if the caller specified an invalid size, sort the whole list */ | 1043 | /* if the caller specified an invalid limit, sort the whole list */ |
1044 | if ((size == 0) || | 1044 | if ((limit == 0) || |
1045 | (size > list->accounting->count)) | 1045 | (limit > list->accounting->count)) |
1046 | size = list->accounting->count; | 1046 | limit = list->accounting->count; |
1047 | 1047 | ||
1048 | if (size != list->accounting->count) | 1048 | if (limit != list->accounting->count) |
1049 | { | 1049 | { |
1050 | unsort = eina_list_nth_list(list, size); | 1050 | unsort = eina_list_nth_list(list, limit); |
1051 | if (unsort) | 1051 | if (unsort) |
1052 | unsort->prev->next = NULL; | 1052 | unsort->prev->next = NULL; |
1053 | } | 1053 | } |
@@ -1172,6 +1172,7 @@ eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) | |||
1172 | next->prev = NULL; | 1172 | next->prev = NULL; |
1173 | next->accounting = _eina_list_mempool_accounting_new(next); | 1173 | next->accounting = _eina_list_mempool_accounting_new(next); |
1174 | next->accounting->last = list->accounting->last; | 1174 | next->accounting->last = list->accounting->last; |
1175 | next->accounting->count = 0; | ||
1175 | *right = next; | 1176 | *right = next; |
1176 | 1177 | ||
1177 | itr = next; | 1178 | itr = next; |
diff --git a/libraries/eina/src/lib/eina_magic.c b/libraries/eina/src/lib/eina_magic.c index d1f71cc..a42db2d 100644 --- a/libraries/eina/src/lib/eina_magic.c +++ b/libraries/eina/src/lib/eina_magic.c | |||
@@ -102,13 +102,8 @@ _eina_magic_strings_alloc(void) | |||
102 | tmp = realloc(_eina_magic_strings, sizeof(Eina_Magic_String) * size); | 102 | tmp = realloc(_eina_magic_strings, sizeof(Eina_Magic_String) * size); |
103 | if (!tmp) | 103 | if (!tmp) |
104 | { | 104 | { |
105 | #ifdef _WIN32 | ||
106 | ERR("could not realloc magic_strings from %Iu to %Iu buckets.", | ||
107 | _eina_magic_strings_allocated, size); | ||
108 | #else | ||
109 | ERR("could not realloc magic_strings from %zu to %zu buckets.", | 105 | ERR("could not realloc magic_strings from %zu to %zu buckets.", |
110 | _eina_magic_strings_allocated, size); | 106 | _eina_magic_strings_allocated, size); |
111 | #endif | ||
112 | return NULL; | 107 | return NULL; |
113 | } | 108 | } |
114 | 109 | ||
diff --git a/libraries/eina/src/lib/eina_main.c b/libraries/eina/src/lib/eina_main.c index 79f8a36..f233929 100644 --- a/libraries/eina/src/lib/eina_main.c +++ b/libraries/eina/src/lib/eina_main.c | |||
@@ -69,6 +69,7 @@ | |||
69 | #include "eina_inlist.h" | 69 | #include "eina_inlist.h" |
70 | #include "eina_inarray.h" | 70 | #include "eina_inarray.h" |
71 | #include "eina_value.h" | 71 | #include "eina_value.h" |
72 | #include "eina_model.h" | ||
72 | 73 | ||
73 | /*============================================================================* | 74 | /*============================================================================* |
74 | * Local * | 75 | * Local * |
@@ -153,6 +154,7 @@ EAPI Eina_Inlist *_eina_tracking = NULL; | |||
153 | S(file); | 154 | S(file); |
154 | S(prefix); | 155 | S(prefix); |
155 | S(value); | 156 | S(value); |
157 | S(model); | ||
156 | #undef S | 158 | #undef S |
157 | 159 | ||
158 | struct eina_desc_setup | 160 | struct eina_desc_setup |
@@ -189,7 +191,8 @@ static const struct eina_desc_setup _eina_desc_setup[] = { | |||
189 | S(simple_xml), | 191 | S(simple_xml), |
190 | S(file), | 192 | S(file), |
191 | S(prefix), | 193 | S(prefix), |
192 | S(value) | 194 | S(value), |
195 | S(model) | ||
193 | #undef S | 196 | #undef S |
194 | }; | 197 | }; |
195 | static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / | 198 | static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / |
diff --git a/libraries/eina/src/lib/eina_matrixsparse.c b/libraries/eina/src/lib/eina_matrixsparse.c index 3ac0439..59cd66b 100644 --- a/libraries/eina/src/lib/eina_matrixsparse.c +++ b/libraries/eina/src/lib/eina_matrixsparse.c | |||
@@ -1078,6 +1078,8 @@ eina_matrixsparse_size_set(Eina_Matrixsparse *m, | |||
1078 | 1078 | ||
1079 | r = r->next; | 1079 | r = r->next; |
1080 | _eina_matrixsparse_row_free(r_aux, free_func, user_data); | 1080 | _eina_matrixsparse_row_free(r_aux, free_func, user_data); |
1081 | if ((update_last_used_row) && (m->last_used == r_aux)) | ||
1082 | m->last_used = r; | ||
1081 | } | 1083 | } |
1082 | else | 1084 | else |
1083 | { | 1085 | { |
diff --git a/libraries/eina/src/lib/eina_module.c b/libraries/eina/src/lib/eina_module.c index 26df980..f4f3242 100644 --- a/libraries/eina/src/lib/eina_module.c +++ b/libraries/eina/src/lib/eina_module.c | |||
@@ -58,6 +58,10 @@ void *alloca (size_t); | |||
58 | # include <Escape.h> | 58 | # include <Escape.h> |
59 | #endif | 59 | #endif |
60 | 60 | ||
61 | #ifdef HAVE_EXOTIC_H | ||
62 | # include <Exotic.h> | ||
63 | #endif | ||
64 | |||
61 | #include "eina_config.h" | 65 | #include "eina_config.h" |
62 | #include "eina_private.h" | 66 | #include "eina_private.h" |
63 | #include "eina_error.h" | 67 | #include "eina_error.h" |
diff --git a/libraries/eina/src/lib/eina_prefix.c b/libraries/eina/src/lib/eina_prefix.c index 5b4b0c0..2322311 100644 --- a/libraries/eina/src/lib/eina_prefix.c +++ b/libraries/eina/src/lib/eina_prefix.c | |||
@@ -30,15 +30,15 @@ | |||
30 | #endif | 30 | #endif |
31 | #ifdef HAVE_ALLOCA_H | 31 | #ifdef HAVE_ALLOCA_H |
32 | # include <alloca.h> | 32 | # include <alloca.h> |
33 | #elif defined __GNUC__ | 33 | #elif !defined alloca |
34 | # define alloca __builtin_alloca | 34 | # ifdef __GNUC__ |
35 | #elif defined _AIX | 35 | # define alloca __builtin_alloca |
36 | # define alloca __alloca | 36 | # elif defined _AIX |
37 | #elif defined _MSC_VER | 37 | # define alloca __alloca |
38 | # include <malloc.h> | 38 | # elif defined _MSC_VER |
39 | # define alloca _alloca | 39 | # include <malloc.h> |
40 | #else | 40 | # define alloca _alloca |
41 | # ifndef HAVE_ALLOCA | 41 | # elif !defined HAVE_ALLOCA |
42 | # ifdef __cplusplus | 42 | # ifdef __cplusplus |
43 | extern "C" | 43 | extern "C" |
44 | # endif | 44 | # endif |
@@ -237,7 +237,7 @@ _try_argv(Eina_Prefix *pfx, const char *argv0) | |||
237 | DBG("Try argv0 = %s", argv0); | 237 | DBG("Try argv0 = %s", argv0); |
238 | /* 1. is argv0 abs path? */ | 238 | /* 1. is argv0 abs path? */ |
239 | #ifdef _WIN32 | 239 | #ifdef _WIN32 |
240 | if (argv0[0] && (argv0[1] == ':')) | 240 | if (evil_path_is_absolute(argv0)) |
241 | #else | 241 | #else |
242 | if (argv0[0] == DSEP_C) | 242 | if (argv0[0] == DSEP_C) |
243 | #endif | 243 | #endif |
@@ -533,7 +533,7 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix, | |||
533 | { | 533 | { |
534 | DBG("Dlinfo dli_fname = %s", info_dl.dli_fname); | 534 | DBG("Dlinfo dli_fname = %s", info_dl.dli_fname); |
535 | # ifdef _WIN32 | 535 | # ifdef _WIN32 |
536 | if (info_dl.dli_fname[0] && (info_dl.dli_fname[1] == ':')) | 536 | if (evil_path_is_absolute(info_dl.dli_fname)) |
537 | # else | 537 | # else |
538 | if (info_dl.dli_fname[0] == DSEP_C) | 538 | if (info_dl.dli_fname[0] == DSEP_C) |
539 | # endif | 539 | # endif |
diff --git a/libraries/eina/src/lib/eina_private.h b/libraries/eina/src/lib/eina_private.h index e31ab47..49df565 100644 --- a/libraries/eina/src/lib/eina_private.h +++ b/libraries/eina/src/lib/eina_private.h | |||
@@ -95,6 +95,8 @@ | |||
95 | #define EINA_MAGIC_INARRAY_ITERATOR 0x98761271 | 95 | #define EINA_MAGIC_INARRAY_ITERATOR 0x98761271 |
96 | #define EINA_MAGIC_INARRAY_ACCESSOR 0x98761272 | 96 | #define EINA_MAGIC_INARRAY_ACCESSOR 0x98761272 |
97 | 97 | ||
98 | #define EINA_MAGIC_MODEL 0x98761280 | ||
99 | |||
98 | #define EINA_MAGIC_CLASS 0x9877CB30 | 100 | #define EINA_MAGIC_CLASS 0x9877CB30 |
99 | 101 | ||
100 | /* undef the following, we want out version */ | 102 | /* undef the following, we want out version */ |
diff --git a/libraries/eina/src/lib/eina_rbtree.c b/libraries/eina/src/lib/eina_rbtree.c index 5f1232c..a9d777a 100644 --- a/libraries/eina/src/lib/eina_rbtree.c +++ b/libraries/eina/src/lib/eina_rbtree.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* EINA - EFL data type library | 1 | /* EINA - EFL data type library |
2 | * Copyright (C) 2008 Cedric Bail | 2 | * Copyright (C) 2008 Cedric Bail |
3 | * Copyright (C) 2011 Alexandre Becoulet | ||
3 | * | 4 | * |
4 | * This library is free software; you can redistribute it and/or | 5 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Lesser General Public | 6 | * modify it under the terms of the GNU Lesser General Public |
@@ -23,6 +24,7 @@ | |||
23 | #include <stdlib.h> | 24 | #include <stdlib.h> |
24 | #include <stdio.h> | 25 | #include <stdio.h> |
25 | #include <string.h> | 26 | #include <string.h> |
27 | #include <stdint.h> | ||
26 | 28 | ||
27 | #include "eina_config.h" | 29 | #include "eina_config.h" |
28 | #include "eina_private.h" | 30 | #include "eina_private.h" |
@@ -244,9 +246,9 @@ static inline Eina_Rbtree * | |||
244 | _eina_rbtree_inline_single_rotation(Eina_Rbtree *node, | 246 | _eina_rbtree_inline_single_rotation(Eina_Rbtree *node, |
245 | Eina_Rbtree_Direction dir) | 247 | Eina_Rbtree_Direction dir) |
246 | { | 248 | { |
247 | Eina_Rbtree *save = node->son[!dir]; | 249 | Eina_Rbtree *save = node->son[dir ^ 1]; |
248 | 250 | ||
249 | node->son[!dir] = save->son[dir]; | 251 | node->son[dir ^ 1] = save->son[dir]; |
250 | save->son[dir] = node; | 252 | save->son[dir] = node; |
251 | 253 | ||
252 | node->color = EINA_RBTREE_RED; | 254 | node->color = EINA_RBTREE_RED; |
@@ -259,7 +261,7 @@ static inline Eina_Rbtree * | |||
259 | _eina_rbtree_inline_double_rotation(Eina_Rbtree *node, | 261 | _eina_rbtree_inline_double_rotation(Eina_Rbtree *node, |
260 | Eina_Rbtree_Direction dir) | 262 | Eina_Rbtree_Direction dir) |
261 | { | 263 | { |
262 | node->son[!dir] = _eina_rbtree_inline_single_rotation(node->son[!dir], !dir); | 264 | node->son[dir ^ 1] = _eina_rbtree_inline_single_rotation(node->son[dir ^ 1], dir ^ 1); |
263 | return _eina_rbtree_inline_single_rotation(node, dir); | 265 | return _eina_rbtree_inline_single_rotation(node, dir); |
264 | } | 266 | } |
265 | 267 | ||
@@ -277,87 +279,64 @@ eina_rbtree_inline_insert(Eina_Rbtree *root, | |||
277 | Eina_Rbtree_Cmp_Node_Cb cmp, | 279 | Eina_Rbtree_Cmp_Node_Cb cmp, |
278 | const void *data) | 280 | const void *data) |
279 | { | 281 | { |
280 | Eina_Rbtree head; | 282 | Eina_Rbtree **r = &root; |
281 | Eina_Rbtree *g, *t; /* Grandparent & parent */ | 283 | Eina_Rbtree *q = root; |
282 | Eina_Rbtree *p, *q; /* Iterator & parent */ | 284 | uintptr_t stack[48]; |
283 | /* WARNING: | 285 | unsigned int s = 0; |
284 | Compiler is not able to understand the underlying algorithm and don't know that | ||
285 | first top node is always black, so it will never use last before running the loop | ||
286 | one time. | ||
287 | */ | ||
288 | Eina_Rbtree_Direction dir, last; | ||
289 | 286 | ||
290 | EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); | 287 | EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); |
291 | EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); | 288 | EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); |
292 | 289 | ||
293 | if (!node) | 290 | /* Find insertion leaf */ |
294 | return root; | 291 | while (q != NULL) |
295 | 292 | { | |
296 | _eina_rbtree_node_init(node); | 293 | Eina_Rbtree_Direction dir = cmp(q, node, (void *)data); |
297 | |||
298 | if (!root) | ||
299 | { | ||
300 | root = node; | ||
301 | goto end_add; | ||
302 | } | ||
303 | |||
304 | memset(&head, 0, sizeof (Eina_Rbtree)); | ||
305 | last = dir = EINA_RBTREE_LEFT; | ||
306 | |||
307 | /* Set up helpers */ | ||
308 | t = &head; | ||
309 | g = p = NULL; | ||
310 | q = t->son[1] = root; | ||
311 | |||
312 | /* Search down the tree */ | ||
313 | for (;; ) | ||
314 | { | ||
315 | if (!q) | ||
316 | /* Insert new node at the bottom */ | ||
317 | p->son[dir] = q = node; | ||
318 | else if (_eina_rbtree_is_red(q->son[0]) | ||
319 | && _eina_rbtree_is_red(q->son[1])) | ||
320 | { | ||
321 | /* Color flip */ | ||
322 | q->color = EINA_RBTREE_RED; | ||
323 | q->son[0]->color = EINA_RBTREE_BLACK; | ||
324 | q->son[1]->color = EINA_RBTREE_BLACK; | ||
325 | } | ||
326 | |||
327 | /* Fix red violation */ | ||
328 | if (_eina_rbtree_is_red(q) && _eina_rbtree_is_red(p)) | ||
329 | { | ||
330 | Eina_Rbtree_Direction dir2; | ||
331 | 294 | ||
332 | dir2 = (t->son[1] == g) ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT; | 295 | /* Keep path in stack */ |
296 | stack[s++] = (uintptr_t)r | dir; | ||
333 | 297 | ||
334 | if (q == p->son[last]) | 298 | r = q->son + dir; |
335 | t->son[dir2] = _eina_rbtree_inline_single_rotation(g, !last); | 299 | q = *r; |
336 | else | 300 | } |
337 | t->son[dir2] = _eina_rbtree_inline_double_rotation(g, !last); | ||
338 | } | ||
339 | |||
340 | /* Stop if found */ | ||
341 | if (q == node) | ||
342 | break; | ||
343 | |||
344 | last = dir; | ||
345 | dir = cmp(q, node, (void *)data); | ||
346 | 301 | ||
347 | /* Update helpers */ | 302 | /* Insert */ |
348 | if ( g ) | 303 | *r = node; |
349 | t = g; | 304 | _eina_rbtree_node_init(node); |
350 | |||
351 | g = p, p = q; | ||
352 | q = q->son[dir]; | ||
353 | } | ||
354 | 305 | ||
355 | root = head.son[1]; | 306 | /* Rebalance */ |
307 | while (s > 0) | ||
308 | { | ||
309 | Eina_Rbtree *a, *b; | ||
310 | uintptr_t top = stack[--s]; /* Pop link pointer and direction */ | ||
311 | Eina_Rbtree_Direction dir = top & 1; | ||
312 | |||
313 | r = (Eina_Rbtree **)(top & ~(uintptr_t)1); | ||
314 | q = *r; | ||
315 | |||
316 | a = q->son[dir]; | ||
317 | /* Rebalance done ? */ | ||
318 | if (a == NULL || a->color == EINA_RBTREE_BLACK) | ||
319 | break; | ||
320 | |||
321 | b = q->son[dir ^ 1]; | ||
322 | if (b != NULL && b->color == EINA_RBTREE_RED) | ||
323 | { | ||
324 | q->color = EINA_RBTREE_RED; | ||
325 | b->color = a->color = EINA_RBTREE_BLACK; | ||
326 | } | ||
327 | else | ||
328 | { | ||
329 | Eina_Rbtree *c = a->son[dir]; | ||
330 | Eina_Rbtree *d = a->son[dir ^ 1]; | ||
331 | |||
332 | if (c != NULL && c->color == EINA_RBTREE_RED) | ||
333 | *r = _eina_rbtree_inline_single_rotation(*r, dir ^ 1); | ||
334 | else if (d != NULL && d->color == EINA_RBTREE_RED) | ||
335 | *r = _eina_rbtree_inline_double_rotation(*r, dir ^ 1); | ||
336 | } | ||
337 | } | ||
356 | 338 | ||
357 | end_add: | ||
358 | /* Make root black */ | ||
359 | root->color = EINA_RBTREE_BLACK; | 339 | root->color = EINA_RBTREE_BLACK; |
360 | |||
361 | return root; | 340 | return root; |
362 | } | 341 | } |
363 | 342 | ||
@@ -367,122 +346,144 @@ eina_rbtree_inline_remove(Eina_Rbtree *root, | |||
367 | Eina_Rbtree_Cmp_Node_Cb cmp, | 346 | Eina_Rbtree_Cmp_Node_Cb cmp, |
368 | const void *data) | 347 | const void *data) |
369 | { | 348 | { |
370 | Eina_Rbtree head; | 349 | Eina_Rbtree *l0, *l1, *r, **rt = &root; |
371 | Eina_Rbtree *q, *p; | ||
372 | Eina_Rbtree *f = NULL; | ||
373 | Eina_Rbtree_Direction dir; | 350 | Eina_Rbtree_Direction dir; |
351 | uintptr_t stack[48]; | ||
352 | unsigned int s = 0; | ||
374 | 353 | ||
375 | EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); | 354 | EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); |
376 | EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); | 355 | EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); |
377 | 356 | ||
378 | if (!root || !node) | 357 | /* Item search loop */ |
379 | return root; | 358 | for (r = *rt; r != NULL; r = *rt) |
380 | 359 | { | |
381 | memset(&head, 0, sizeof(Eina_Rbtree)); | 360 | if (r == node) |
382 | 361 | goto found; | |
383 | dir = EINA_RBTREE_RIGHT; | ||
384 | q = &head; | ||
385 | p = NULL; | ||
386 | q->son[EINA_RBTREE_RIGHT] = root; | ||
387 | |||
388 | /* Search and push a red down */ | ||
389 | while (q->son[dir]) | ||
390 | { | ||
391 | Eina_Rbtree_Direction last = dir; | ||
392 | Eina_Rbtree *g; | ||
393 | |||
394 | /* Update helpers */ | ||
395 | g = p; p = q; | ||
396 | q = q->son[dir]; | ||
397 | dir = cmp(q, node, (void *)data); | ||
398 | |||
399 | /* Save parent node found */ | ||
400 | if (q == node) | ||
401 | f = p; | ||
402 | 362 | ||
403 | /* Push the red node down */ | 363 | dir = cmp(r, node, (void*)data); |
404 | if (!_eina_rbtree_is_red(q) | 364 | stack[s++] = (uintptr_t)rt | dir; |
405 | && !_eina_rbtree_is_red(q->son[dir])) | 365 | rt = r->son + dir; |
406 | { | 366 | } |
407 | if (_eina_rbtree_is_red(q->son[!dir])) | 367 | return root; |
408 | q = p->son[last] = _eina_rbtree_inline_single_rotation(q, dir); | ||
409 | else if (!_eina_rbtree_is_red(q->son[!dir])) | ||
410 | { | ||
411 | Eina_Rbtree *s = p->son[!last]; | ||
412 | |||
413 | if (s) | ||
414 | { | ||
415 | if (!_eina_rbtree_is_red(s->son[EINA_RBTREE_LEFT]) | ||
416 | && !_eina_rbtree_is_red(s->son[EINA_RBTREE_RIGHT])) | ||
417 | { | ||
418 | /* Color flip */ | ||
419 | p->color = EINA_RBTREE_BLACK; | ||
420 | p->son[EINA_RBTREE_LEFT]->color = EINA_RBTREE_RED; | ||
421 | p->son[EINA_RBTREE_RIGHT]->color = EINA_RBTREE_RED; | ||
422 | } | ||
423 | else | ||
424 | { | ||
425 | Eina_Rbtree_Direction dir2; | ||
426 | |||
427 | dir2 = g->son[1] == | ||
428 | p ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT; | ||
429 | |||
430 | if (_eina_rbtree_is_red(s->son[last])) | ||
431 | { | ||
432 | g->son[dir2] = | ||
433 | _eina_rbtree_inline_double_rotation(p, last); | ||
434 | if (f == g) | ||
435 | { | ||
436 | p = g->son[dir2]->son[last]; | ||
437 | f = g->son[dir2]; | ||
438 | } | ||
439 | } | ||
440 | else if (_eina_rbtree_is_red(s->son[!last])) | ||
441 | { | ||
442 | g->son[dir2] = | ||
443 | _eina_rbtree_inline_single_rotation(p, last); | ||
444 | if (f == g) | ||
445 | { | ||
446 | p = g->son[dir2]->son[last]; | ||
447 | f = g->son[dir2]; | ||
448 | } | ||
449 | } | ||
450 | |||
451 | /* Ensure correct coloring */ | ||
452 | q->color = g->son[dir2]->color = EINA_RBTREE_RED; | ||
453 | g->son[dir2]->son[EINA_RBTREE_LEFT]->color = | ||
454 | EINA_RBTREE_BLACK; | ||
455 | g->son[dir2]->son[EINA_RBTREE_RIGHT]->color = | ||
456 | EINA_RBTREE_BLACK; | ||
457 | } | ||
458 | } | ||
459 | } | ||
460 | } | ||
461 | } | ||
462 | |||
463 | /* Replace and remove if found */ | ||
464 | if (f) | ||
465 | { | ||
466 | /* 'q' should take the place of 'node' parent */ | ||
467 | f->son[f->son[1] == node] = q; | ||
468 | |||
469 | /* Switch the link from the parent to q's son */ | ||
470 | p->son[p->son[1] == q] = q->son[!q->son[0]]; | ||
471 | |||
472 | /* Put q at the place of node */ | ||
473 | q->son[0] = node->son[0]; | ||
474 | q->son[1] = node->son[1]; | ||
475 | q->color = node->color; | ||
476 | |||
477 | /* Reset node link */ | ||
478 | node->son[0] = NULL; | ||
479 | node->son[1] = NULL; | ||
480 | } | ||
481 | 368 | ||
482 | root = head.son[1]; | 369 | found: |
483 | if (root) | 370 | /* remove entry */ |
371 | l0 = node->son[0]; | ||
372 | l1 = node->son[1]; | ||
373 | |||
374 | if (l0 != NULL && l1 != NULL) /* two links case */ | ||
375 | { | ||
376 | Eina_Rbtree *q, **t, **p; | ||
377 | uintptr_t ss; | ||
378 | |||
379 | stack[s++] = (uintptr_t)rt | 1; | ||
380 | ss = s; /* keep predecessor right link stack index */ | ||
381 | |||
382 | /* find predecessor */ | ||
383 | p = node->son + 1; | ||
384 | q = *p; | ||
385 | |||
386 | while (1) | ||
387 | { | ||
388 | t = q->son; | ||
389 | q = *t; | ||
390 | if (q == NULL) | ||
391 | break; | ||
392 | stack[s++] = (uintptr_t)p | 0; | ||
393 | p = t; | ||
394 | } | ||
395 | |||
396 | /* detach predecessor */ | ||
397 | q = *p; | ||
398 | *p = q->son[1]; | ||
399 | |||
400 | int c = q->color; | ||
401 | |||
402 | /* replace entry by predecessor */ | ||
403 | memcpy(q, node, sizeof(Eina_Rbtree)); | ||
404 | *rt = q; | ||
405 | |||
406 | if (c == EINA_RBTREE_RED) | ||
407 | goto end; | ||
408 | |||
409 | /* fix stack for replaced entry */ | ||
410 | if (s > ss) | ||
411 | stack[ss] = (uintptr_t)(q->son + 1) | 0; | ||
412 | } | ||
413 | else /* single link case */ | ||
414 | { | ||
415 | if (l0 == NULL) | ||
416 | l0 = l1; | ||
417 | |||
418 | *rt = l0; | ||
419 | |||
420 | if (node->color == EINA_RBTREE_RED) | ||
421 | goto end; /* removed red */ | ||
422 | |||
423 | if (l0 != NULL && l0->color == EINA_RBTREE_RED) | ||
424 | { | ||
425 | /* red child replace removed black */ | ||
426 | l0->color = EINA_RBTREE_BLACK; | ||
427 | goto end; | ||
428 | } | ||
429 | } | ||
430 | |||
431 | /* rebalance */ | ||
432 | while (s > 0) | ||
433 | { | ||
434 | Eina_Rbtree *q; | ||
435 | uintptr_t st = stack[--s]; | ||
436 | |||
437 | rt = (Eina_Rbtree**)(st & ~(uintptr_t)1); | ||
438 | dir = st & 1; | ||
439 | r = *rt; | ||
440 | q = r->son[dir ^ 1]; | ||
441 | |||
442 | if (q != NULL && q->color == EINA_RBTREE_RED) | ||
443 | { | ||
444 | *rt = _eina_rbtree_inline_single_rotation(*rt, dir); | ||
445 | q = r->son[dir ^ 1]; | ||
446 | rt = (*rt)->son + dir; | ||
447 | } | ||
448 | |||
449 | if (q != NULL) | ||
450 | { | ||
451 | int r_color = r->color; | ||
452 | Eina_Rbtree *nd = q->son[dir ^ 1]; | ||
453 | |||
454 | if (nd != NULL && nd->color == EINA_RBTREE_RED) | ||
455 | { | ||
456 | *rt = _eina_rbtree_inline_single_rotation(*rt, dir); | ||
457 | } | ||
458 | else | ||
459 | { | ||
460 | Eina_Rbtree *d = q->son[dir]; | ||
461 | |||
462 | if (d != NULL && d->color == EINA_RBTREE_RED) | ||
463 | { | ||
464 | *rt = _eina_rbtree_inline_double_rotation(*rt, dir); | ||
465 | } | ||
466 | else | ||
467 | { | ||
468 | r->color = EINA_RBTREE_BLACK; | ||
469 | q->color = EINA_RBTREE_RED; | ||
470 | if (r_color == EINA_RBTREE_RED) | ||
471 | break; | ||
472 | continue; | ||
473 | } | ||
474 | } | ||
475 | |||
476 | r = *rt; | ||
477 | r->color = r_color; | ||
478 | r->son[1]->color = r->son[0]->color = EINA_RBTREE_BLACK; | ||
479 | |||
480 | break; | ||
481 | } | ||
482 | } | ||
483 | |||
484 | end: | ||
485 | if (root != NULL) | ||
484 | root->color = EINA_RBTREE_BLACK; | 486 | root->color = EINA_RBTREE_BLACK; |
485 | |||
486 | return root; | 487 | return root; |
487 | } | 488 | } |
488 | 489 | ||
diff --git a/libraries/eina/src/lib/eina_sched.c b/libraries/eina/src/lib/eina_sched.c index 8c7f7fe..b8e7000 100644 --- a/libraries/eina/src/lib/eina_sched.c +++ b/libraries/eina/src/lib/eina_sched.c | |||
@@ -41,7 +41,7 @@ | |||
41 | #include "eina_sched.h" | 41 | #include "eina_sched.h" |
42 | #include "eina_log.h" | 42 | #include "eina_log.h" |
43 | 43 | ||
44 | #define RTNICENESS 5 | 44 | #define RTNICENESS 1 |
45 | #define NICENESS 5 | 45 | #define NICENESS 5 |
46 | 46 | ||
47 | EAPI void | 47 | EAPI void |
@@ -62,10 +62,14 @@ eina_sched_prio_drop(void) | |||
62 | 62 | ||
63 | if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) | 63 | if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) |
64 | { | 64 | { |
65 | prio = sched_get_priority_max(pol); | 65 | param.sched_priority -= RTNICENESS; |
66 | param.sched_priority += RTNICENESS; | 66 | |
67 | if (prio > 0 && param.sched_priority > prio) | 67 | /* We don't change the policy */ |
68 | param.sched_priority = prio; | 68 | if (param.sched_priority < 1) |
69 | { | ||
70 | EINA_LOG_INFO("RT prio < 1, setting to 1 instead"); | ||
71 | param.sched_priority = 1; | ||
72 | } | ||
69 | 73 | ||
70 | pthread_setschedparam(pthread_id, pol, ¶m); | 74 | pthread_setschedparam(pthread_id, pol, ¶m); |
71 | } | 75 | } |
@@ -78,7 +82,10 @@ eina_sched_prio_drop(void) | |||
78 | { | 82 | { |
79 | prio += NICENESS; | 83 | prio += NICENESS; |
80 | if (prio > 19) | 84 | if (prio > 19) |
81 | prio = 19; | 85 | { |
86 | EINA_LOG_INFO("Max niceness reached; keeping max (19)"); | ||
87 | prio = 19; | ||
88 | } | ||
82 | 89 | ||
83 | setpriority(PRIO_PROCESS, 0, prio); | 90 | setpriority(PRIO_PROCESS, 0, prio); |
84 | } | 91 | } |
diff --git a/libraries/eina/src/lib/eina_share_common.c b/libraries/eina/src/lib/eina_share_common.c index 90e1868..776e429 100644 --- a/libraries/eina/src/lib/eina_share_common.c +++ b/libraries/eina/src/lib/eina_share_common.c | |||
@@ -76,7 +76,6 @@ | |||
76 | #include "eina_hash.h" | 76 | #include "eina_hash.h" |
77 | #include "eina_rbtree.h" | 77 | #include "eina_rbtree.h" |
78 | #include "eina_error.h" | 78 | #include "eina_error.h" |
79 | #include "eina_log.h" | ||
80 | #include "eina_lock.h" | 79 | #include "eina_lock.h" |
81 | 80 | ||
82 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | 81 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ |
@@ -126,8 +125,6 @@ typedef struct _Eina_Share_Common Eina_Share_Common; | |||
126 | typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node; | 125 | typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node; |
127 | typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; | 126 | typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; |
128 | 127 | ||
129 | int _eina_share_common_log_dom = -1; | ||
130 | |||
131 | struct _Eina_Share | 128 | struct _Eina_Share |
132 | { | 129 | { |
133 | Eina_Share_Common *share; | 130 | Eina_Share_Common *share; |
@@ -600,28 +597,8 @@ eina_share_common_init(Eina_Share **_share, | |||
600 | share = *_share = calloc(sizeof(Eina_Share), 1); | 597 | share = *_share = calloc(sizeof(Eina_Share), 1); |
601 | if (!share) goto on_error; | 598 | if (!share) goto on_error; |
602 | 599 | ||
603 | if (_eina_share_common_log_dom < 0) /*Only register if not already */ | ||
604 | _eina_share_common_log_dom = eina_log_domain_register( | ||
605 | "eina_share", | ||
606 | EINA_LOG_COLOR_DEFAULT); | ||
607 | |||
608 | if (_eina_share_common_log_dom < 0) | ||
609 | { | ||
610 | EINA_LOG_ERR("Could not register log domain: eina_share_common"); | ||
611 | goto on_error; | ||
612 | } | ||
613 | |||
614 | share->share = calloc(1, sizeof(Eina_Share_Common)); | 600 | share->share = calloc(1, sizeof(Eina_Share_Common)); |
615 | if (!share->share) | 601 | if (!share->share) goto on_error; |
616 | { | ||
617 | if (_eina_share_common_log_dom > 0) | ||
618 | { | ||
619 | eina_log_domain_unregister(_eina_share_common_log_dom); | ||
620 | _eina_share_common_log_dom = -1; | ||
621 | } | ||
622 | |||
623 | goto on_error; | ||
624 | } | ||
625 | 602 | ||
626 | share->node_magic = node_magic; | 603 | share->node_magic = node_magic; |
627 | #define EMS(n) eina_magic_string_static_set(n, n ## _STR) | 604 | #define EMS(n) eina_magic_string_static_set(n, n ## _STR) |
@@ -678,11 +655,6 @@ eina_share_common_shutdown(Eina_Share **_share) | |||
678 | MAGIC_FREE(share->share); | 655 | MAGIC_FREE(share->share); |
679 | 656 | ||
680 | _eina_share_common_population_shutdown(share); | 657 | _eina_share_common_population_shutdown(share); |
681 | if (_eina_share_common_log_dom > 0) /* Only free if necessary */ | ||
682 | { | ||
683 | eina_log_domain_unregister(_eina_share_common_log_dom); | ||
684 | _eina_share_common_log_dom = -1; | ||
685 | } | ||
686 | 658 | ||
687 | eina_lock_release(&_mutex_big); | 659 | eina_lock_release(&_mutex_big); |
688 | 660 | ||
@@ -833,7 +805,7 @@ eina_share_common_ref(Eina_Share *share, const char *str) | |||
833 | } | 805 | } |
834 | 806 | ||
835 | 807 | ||
836 | void | 808 | Eina_Bool |
837 | eina_share_common_del(Eina_Share *share, const char *str) | 809 | eina_share_common_del(Eina_Share *share, const char *str) |
838 | { | 810 | { |
839 | unsigned int slen; | 811 | unsigned int slen; |
@@ -843,7 +815,7 @@ eina_share_common_del(Eina_Share *share, const char *str) | |||
843 | int hash_num, hash; | 815 | int hash_num, hash; |
844 | 816 | ||
845 | if (!str) | 817 | if (!str) |
846 | return; | 818 | return EINA_TRUE; |
847 | 819 | ||
848 | eina_lock_take(&_mutex_big); | 820 | eina_lock_take(&_mutex_big); |
849 | 821 | ||
@@ -857,7 +829,7 @@ eina_share_common_del(Eina_Share *share, const char *str) | |||
857 | { | 829 | { |
858 | node->references--; | 830 | node->references--; |
859 | eina_lock_release(&_mutex_big); | 831 | eina_lock_release(&_mutex_big); |
860 | return; | 832 | return EINA_TRUE; |
861 | } | 833 | } |
862 | 834 | ||
863 | node->references = 0; | 835 | node->references = 0; |
@@ -871,7 +843,7 @@ eina_share_common_del(Eina_Share *share, const char *str) | |||
871 | if (!ed) | 843 | if (!ed) |
872 | goto on_error; | 844 | goto on_error; |
873 | 845 | ||
874 | EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big)); | 846 | EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), EINA_FALSE); |
875 | 847 | ||
876 | if (!_eina_share_common_head_remove_node(ed, node)) | 848 | if (!_eina_share_common_head_remove_node(ed, node)) |
877 | goto on_error; | 849 | goto on_error; |
@@ -886,12 +858,12 @@ eina_share_common_del(Eina_Share *share, const char *str) | |||
886 | 858 | ||
887 | eina_lock_release(&_mutex_big); | 859 | eina_lock_release(&_mutex_big); |
888 | 860 | ||
889 | return; | 861 | return EINA_TRUE; |
890 | 862 | ||
891 | on_error: | 863 | on_error: |
892 | eina_lock_release(&_mutex_big); | 864 | eina_lock_release(&_mutex_big); |
893 | /* possible segfault happened before here, but... */ | 865 | /* possible segfault happened before here, but... */ |
894 | CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str); | 866 | return EINA_FALSE; |
895 | } | 867 | } |
896 | 868 | ||
897 | int | 869 | int |
diff --git a/libraries/eina/src/lib/eina_share_common.h b/libraries/eina/src/lib/eina_share_common.h index 002c652..6bc11ef 100644 --- a/libraries/eina/src/lib/eina_share_common.h +++ b/libraries/eina/src/lib/eina_share_common.h | |||
@@ -71,7 +71,7 @@ const char *eina_share_common_add_length(Eina_Share *share, | |||
71 | unsigned int null_size) | 71 | unsigned int null_size) |
72 | EINA_WARN_UNUSED_RESULT; | 72 | EINA_WARN_UNUSED_RESULT; |
73 | const char *eina_share_common_ref(Eina_Share *share, const char *str); | 73 | const char *eina_share_common_ref(Eina_Share *share, const char *str); |
74 | void eina_share_common_del(Eina_Share *share, const char *str); | 74 | Eina_Bool eina_share_common_del(Eina_Share *share, const char *str) EINA_WARN_UNUSED_RESULT; |
75 | int eina_share_common_length(Eina_Share *share, | 75 | int eina_share_common_length(Eina_Share *share, |
76 | const char *str) EINA_CONST | 76 | const char *str) EINA_CONST |
77 | EINA_WARN_UNUSED_RESULT; | 77 | EINA_WARN_UNUSED_RESULT; |
@@ -83,21 +83,4 @@ void eina_share_common_dump(Eina_Share *share, void (*additional_dump)( | |||
83 | void eina_share_common_population_add(Eina_Share *share, int slen); | 83 | void eina_share_common_population_add(Eina_Share *share, int slen); |
84 | void eina_share_common_population_del(Eina_Share *share, int slen); | 84 | void eina_share_common_population_del(Eina_Share *share, int slen); |
85 | 85 | ||
86 | /* Share logging */ | 86 | #endif /* EINA_SHARE_COMMON_H_ */ |
87 | #ifdef CRITICAL | ||
88 | #undef CRITICAL | ||
89 | #endif | ||
90 | #define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_common_log_dom, __VA_ARGS__) | ||
91 | |||
92 | #ifdef ERR | ||
93 | #undef ERR | ||
94 | #endif | ||
95 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_share_common_log_dom, __VA_ARGS__) | ||
96 | |||
97 | #ifdef DBG | ||
98 | #undef DBG | ||
99 | #endif | ||
100 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_share_common_log_dom, __VA_ARGS__) | ||
101 | extern int _eina_share_common_log_dom; | ||
102 | |||
103 | #endif /* EINA_STRINGSHARE_H_ */ | ||
diff --git a/libraries/eina/src/lib/eina_stringshare.c b/libraries/eina/src/lib/eina_stringshare.c index 478b300..f371fcd 100644 --- a/libraries/eina/src/lib/eina_stringshare.c +++ b/libraries/eina/src/lib/eina_stringshare.c | |||
@@ -55,12 +55,30 @@ void *alloca (size_t); | |||
55 | #include "eina_private.h" | 55 | #include "eina_private.h" |
56 | #include "eina_error.h" | 56 | #include "eina_error.h" |
57 | #include "eina_log.h" | 57 | #include "eina_log.h" |
58 | #include "eina_stringshare.h" | ||
59 | #include "eina_lock.h" | 58 | #include "eina_lock.h" |
59 | #include "eina_share_common.h" | ||
60 | 60 | ||
61 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | 61 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ |
62 | #include "eina_safety_checks.h" | 62 | #include "eina_safety_checks.h" |
63 | #include "eina_share_common.h" | 63 | #include "eina_stringshare.h" |
64 | |||
65 | |||
66 | #ifdef CRITICAL | ||
67 | #undef CRITICAL | ||
68 | #endif | ||
69 | #define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_stringshare_log_dom, __VA_ARGS__) | ||
70 | |||
71 | #ifdef ERR | ||
72 | #undef ERR | ||
73 | #endif | ||
74 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_share_stringshare_log_dom, __VA_ARGS__) | ||
75 | |||
76 | #ifdef DBG | ||
77 | #undef DBG | ||
78 | #endif | ||
79 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_share_stringshare_log_dom, __VA_ARGS__) | ||
80 | |||
81 | static int _eina_share_stringshare_log_dom = -1; | ||
64 | 82 | ||
65 | /* The actual share */ | 83 | /* The actual share */ |
66 | static Eina_Share *stringshare_share; | 84 | static Eina_Share *stringshare_share; |
@@ -447,11 +465,8 @@ _eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket *bucket, | |||
447 | for (i = 0; i < bucket->count; i++, s++, l++, r++) | 465 | for (i = 0; i < bucket->count; i++, s++, l++, r++) |
448 | { | 466 | { |
449 | int dups; | 467 | int dups; |
450 | #ifdef _WIN32 | 468 | |
451 | printf("DDD: %5hu %5hu '%s'\n", *l, *r, *s); | ||
452 | #else | ||
453 | printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s); | 469 | printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s); |
454 | #endif | ||
455 | 470 | ||
456 | dups = (*r - 1); | 471 | dups = (*r - 1); |
457 | 472 | ||
@@ -500,11 +515,29 @@ Eina_Bool | |||
500 | eina_stringshare_init(void) | 515 | eina_stringshare_init(void) |
501 | { | 516 | { |
502 | Eina_Bool ret; | 517 | Eina_Bool ret; |
518 | |||
519 | if (_eina_share_stringshare_log_dom < 0) | ||
520 | { | ||
521 | _eina_share_stringshare_log_dom = eina_log_domain_register | ||
522 | ("eina_stringshare", EINA_LOG_COLOR_DEFAULT); | ||
523 | |||
524 | if (_eina_share_stringshare_log_dom < 0) | ||
525 | { | ||
526 | EINA_LOG_ERR("Could not register log domain: eina_stringshare"); | ||
527 | return EINA_FALSE; | ||
528 | } | ||
529 | } | ||
530 | |||
503 | ret = eina_share_common_init(&stringshare_share, | 531 | ret = eina_share_common_init(&stringshare_share, |
504 | EINA_MAGIC_STRINGSHARE_NODE, | 532 | EINA_MAGIC_STRINGSHARE_NODE, |
505 | EINA_MAGIC_STRINGSHARE_NODE_STR); | 533 | EINA_MAGIC_STRINGSHARE_NODE_STR); |
506 | if (ret) | 534 | if (ret) |
507 | _eina_stringshare_small_init(); | 535 | _eina_stringshare_small_init(); |
536 | else | ||
537 | { | ||
538 | eina_log_domain_unregister(_eina_share_stringshare_log_dom); | ||
539 | _eina_share_stringshare_log_dom = -1; | ||
540 | } | ||
508 | 541 | ||
509 | return ret; | 542 | return ret; |
510 | } | 543 | } |
@@ -526,6 +559,13 @@ eina_stringshare_shutdown(void) | |||
526 | Eina_Bool ret; | 559 | Eina_Bool ret; |
527 | _eina_stringshare_small_shutdown(); | 560 | _eina_stringshare_small_shutdown(); |
528 | ret = eina_share_common_shutdown(&stringshare_share); | 561 | ret = eina_share_common_shutdown(&stringshare_share); |
562 | |||
563 | if (_eina_share_stringshare_log_dom >= 0) | ||
564 | { | ||
565 | eina_log_domain_unregister(_eina_share_stringshare_log_dom); | ||
566 | _eina_share_stringshare_log_dom = -1; | ||
567 | } | ||
568 | |||
529 | return ret; | 569 | return ret; |
530 | } | 570 | } |
531 | 571 | ||
@@ -534,7 +574,7 @@ eina_stringshare_shutdown(void) | |||
534 | *============================================================================*/ | 574 | *============================================================================*/ |
535 | 575 | ||
536 | EAPI void | 576 | EAPI void |
537 | eina_stringshare_del(const char *str) | 577 | eina_stringshare_del(Eina_Stringshare *str) |
538 | { | 578 | { |
539 | int slen; | 579 | int slen; |
540 | 580 | ||
@@ -564,16 +604,17 @@ eina_stringshare_del(const char *str) | |||
564 | return; | 604 | return; |
565 | } | 605 | } |
566 | 606 | ||
567 | eina_share_common_del(stringshare_share, str); | 607 | if (!eina_share_common_del(stringshare_share, str)) |
608 | CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str); | ||
568 | } | 609 | } |
569 | 610 | ||
570 | EAPI const char * | 611 | EAPI Eina_Stringshare * |
571 | eina_stringshare_add_length(const char *str, unsigned int slen) | 612 | eina_stringshare_add_length(const char *str, unsigned int slen) |
572 | { | 613 | { |
573 | if ((!str) || (slen <= 0)) | 614 | if ((!str) || (slen <= 0)) |
574 | return ""; | 615 | return ""; |
575 | else if (slen == 1) | 616 | else if (slen == 1) |
576 | return (const char *)_eina_stringshare_single + ((*str) << 1); | 617 | return (Eina_Stringshare *) _eina_stringshare_single + ((*str) << 1); |
577 | else if (slen < 4) | 618 | else if (slen < 4) |
578 | { | 619 | { |
579 | const char *s; | 620 | const char *s; |
@@ -588,7 +629,7 @@ eina_stringshare_add_length(const char *str, unsigned int slen) | |||
588 | sizeof(char), sizeof(char)); | 629 | sizeof(char), sizeof(char)); |
589 | } | 630 | } |
590 | 631 | ||
591 | EAPI const char * | 632 | EAPI Eina_Stringshare * |
592 | eina_stringshare_add(const char *str) | 633 | eina_stringshare_add(const char *str) |
593 | { | 634 | { |
594 | int slen; | 635 | int slen; |
@@ -609,7 +650,7 @@ eina_stringshare_add(const char *str) | |||
609 | return eina_stringshare_add_length(str, slen); | 650 | return eina_stringshare_add_length(str, slen); |
610 | } | 651 | } |
611 | 652 | ||
612 | EAPI const char * | 653 | EAPI Eina_Stringshare * |
613 | eina_stringshare_printf(const char *fmt, ...) | 654 | eina_stringshare_printf(const char *fmt, ...) |
614 | { | 655 | { |
615 | va_list args; | 656 | va_list args; |
@@ -633,7 +674,7 @@ eina_stringshare_printf(const char *fmt, ...) | |||
633 | return ret; | 674 | return ret; |
634 | } | 675 | } |
635 | 676 | ||
636 | EAPI const char * | 677 | EAPI Eina_Stringshare * |
637 | eina_stringshare_vprintf(const char *fmt, va_list args) | 678 | eina_stringshare_vprintf(const char *fmt, va_list args) |
638 | { | 679 | { |
639 | char *tmp; | 680 | char *tmp; |
@@ -654,7 +695,7 @@ eina_stringshare_vprintf(const char *fmt, va_list args) | |||
654 | return ret; | 695 | return ret; |
655 | } | 696 | } |
656 | 697 | ||
657 | EAPI const char * | 698 | EAPI Eina_Stringshare * |
658 | eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) | 699 | eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) |
659 | { | 700 | { |
660 | va_list args; | 701 | va_list args; |
@@ -679,8 +720,8 @@ eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) | |||
679 | return eina_stringshare_add_length(tmp, len); | 720 | return eina_stringshare_add_length(tmp, len); |
680 | } | 721 | } |
681 | 722 | ||
682 | EAPI const char * | 723 | EAPI Eina_Stringshare * |
683 | eina_stringshare_ref(const char *str) | 724 | eina_stringshare_ref(Eina_Stringshare *str) |
684 | { | 725 | { |
685 | int slen; | 726 | int slen; |
686 | 727 | ||
@@ -721,7 +762,7 @@ eina_stringshare_ref(const char *str) | |||
721 | } | 762 | } |
722 | 763 | ||
723 | EAPI int | 764 | EAPI int |
724 | eina_stringshare_strlen(const char *str) | 765 | eina_stringshare_strlen(Eina_Stringshare *str) |
725 | { | 766 | { |
726 | int len; | 767 | int len; |
727 | /* special cases */ | 768 | /* special cases */ |
@@ -737,7 +778,7 @@ eina_stringshare_strlen(const char *str) | |||
737 | if (str[3] == '\0') | 778 | if (str[3] == '\0') |
738 | return 3; | 779 | return 3; |
739 | 780 | ||
740 | len = eina_share_common_length(stringshare_share, (const char *)str); | 781 | len = eina_share_common_length(stringshare_share, (Eina_Stringshare *) str); |
741 | len = (len > 0) ? len / (int)sizeof(char) : -1; | 782 | len = (len > 0) ? len / (int)sizeof(char) : -1; |
742 | return len; | 783 | return len; |
743 | } | 784 | } |
diff --git a/libraries/eina/src/lib/eina_unicode.c b/libraries/eina/src/lib/eina_unicode.c index 342e3cb..7505906 100644 --- a/libraries/eina/src/lib/eina_unicode.c +++ b/libraries/eina/src/lib/eina_unicode.c | |||
@@ -15,10 +15,18 @@ | |||
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this library; | 16 | * License along with this library; |
17 | * if not, see <http://www.gnu.org/licenses/>. | 17 | * if not, see <http://www.gnu.org/licenses/>. |
18 | |||
19 | */ | 18 | */ |
20 | 19 | ||
21 | #include <Eina.h> | 20 | #ifdef HAVE_CONFIG_H |
21 | # include "config.h" | ||
22 | #endif | ||
23 | |||
24 | #include "eina_config.h" | ||
25 | #include "eina_private.h" | ||
26 | #include <string.h> | ||
27 | |||
28 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | ||
29 | #include "eina_safety_checks.h" | ||
22 | #include "eina_unicode.h" | 30 | #include "eina_unicode.h" |
23 | 31 | ||
24 | /* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so, | 32 | /* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so, |
@@ -30,6 +38,9 @@ EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING; | |||
30 | EAPI int | 38 | EAPI int |
31 | eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) | 39 | eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) |
32 | { | 40 | { |
41 | EINA_SAFETY_ON_NULL_RETURN_VAL(a, -1); | ||
42 | EINA_SAFETY_ON_NULL_RETURN_VAL(b, -1); | ||
43 | |||
33 | for (; *a && *a == *b; a++, b++) | 44 | for (; *a && *a == *b; a++, b++) |
34 | ; | 45 | ; |
35 | if (*a == *b) | 46 | if (*a == *b) |
@@ -45,6 +56,9 @@ eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) | |||
45 | { | 56 | { |
46 | Eina_Unicode *ret = dest; | 57 | Eina_Unicode *ret = dest; |
47 | 58 | ||
59 | EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL); | ||
60 | EINA_SAFETY_ON_NULL_RETURN_VAL(source, NULL); | ||
61 | |||
48 | while (*source) | 62 | while (*source) |
49 | *dest++ = *source++; | 63 | *dest++ = *source++; |
50 | *dest = 0; | 64 | *dest = 0; |
@@ -56,6 +70,9 @@ eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) | |||
56 | { | 70 | { |
57 | Eina_Unicode *ret = dest; | 71 | Eina_Unicode *ret = dest; |
58 | 72 | ||
73 | EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL); | ||
74 | EINA_SAFETY_ON_NULL_RETURN_VAL(source, NULL); | ||
75 | |||
59 | for ( ; n && *source ; n--) | 76 | for ( ; n && *source ; n--) |
60 | *dest++ = *source++; | 77 | *dest++ = *source++; |
61 | for (; n; n--) | 78 | for (; n; n--) |
@@ -67,6 +84,9 @@ EAPI size_t | |||
67 | eina_unicode_strlen(const Eina_Unicode *ustr) | 84 | eina_unicode_strlen(const Eina_Unicode *ustr) |
68 | { | 85 | { |
69 | const Eina_Unicode *end; | 86 | const Eina_Unicode *end; |
87 | |||
88 | EINA_SAFETY_ON_NULL_RETURN_VAL(ustr, 0); | ||
89 | |||
70 | for (end = ustr; *end; end++) | 90 | for (end = ustr; *end; end++) |
71 | ; | 91 | ; |
72 | return end - ustr; | 92 | return end - ustr; |
@@ -77,6 +97,9 @@ eina_unicode_strnlen(const Eina_Unicode *ustr, int n) | |||
77 | { | 97 | { |
78 | const Eina_Unicode *end; | 98 | const Eina_Unicode *end; |
79 | const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */ | 99 | const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */ |
100 | |||
101 | EINA_SAFETY_ON_NULL_RETURN_VAL(ustr, 0); | ||
102 | |||
80 | for (end = ustr; end < last && *end; end++) | 103 | for (end = ustr; end < last && *end; end++) |
81 | ; | 104 | ; |
82 | return end - ustr; | 105 | return end - ustr; |
@@ -90,7 +113,9 @@ eina_unicode_strndup(const Eina_Unicode *text, size_t n) | |||
90 | { | 113 | { |
91 | Eina_Unicode *ustr; | 114 | Eina_Unicode *ustr; |
92 | 115 | ||
93 | ustr = (Eina_Unicode *) malloc((n + 1) * sizeof(Eina_Unicode)); | 116 | EINA_SAFETY_ON_NULL_RETURN_VAL(text, NULL); |
117 | |||
118 | ustr = malloc((n + 1) * sizeof(Eina_Unicode)); | ||
94 | memcpy(ustr, text, n * sizeof(Eina_Unicode)); | 119 | memcpy(ustr, text, n * sizeof(Eina_Unicode)); |
95 | ustr[n] = 0; | 120 | ustr[n] = 0; |
96 | return ustr; | 121 | return ustr; |
@@ -101,6 +126,8 @@ eina_unicode_strdup(const Eina_Unicode *text) | |||
101 | { | 126 | { |
102 | size_t len; | 127 | size_t len; |
103 | 128 | ||
129 | EINA_SAFETY_ON_NULL_RETURN_VAL(text, NULL); | ||
130 | |||
104 | len = eina_unicode_strlen(text); | 131 | len = eina_unicode_strlen(text); |
105 | return eina_unicode_strndup(text, len); | 132 | return eina_unicode_strndup(text, len); |
106 | } | 133 | } |
@@ -110,6 +137,9 @@ eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) | |||
110 | { | 137 | { |
111 | const Eina_Unicode *i, *j; | 138 | const Eina_Unicode *i, *j; |
112 | 139 | ||
140 | EINA_SAFETY_ON_NULL_RETURN_VAL(haystack, NULL); | ||
141 | EINA_SAFETY_ON_NULL_RETURN_VAL(needle, NULL); | ||
142 | |||
113 | for (i = haystack; *i; i++) | 143 | for (i = haystack; *i; i++) |
114 | { | 144 | { |
115 | haystack = i; /* set this location as the base position */ | 145 | haystack = i; /* set this location as the base position */ |
@@ -131,6 +161,8 @@ eina_unicode_escape(const Eina_Unicode *str) | |||
131 | Eina_Unicode *s2, *d; | 161 | Eina_Unicode *s2, *d; |
132 | const Eina_Unicode *s; | 162 | const Eina_Unicode *s; |
133 | 163 | ||
164 | EINA_SAFETY_ON_NULL_RETURN_VAL(str, NULL); | ||
165 | |||
134 | s2 = malloc((eina_unicode_strlen(str) * 2) + 1); | 166 | s2 = malloc((eina_unicode_strlen(str) * 2) + 1); |
135 | if (!s2) | 167 | if (!s2) |
136 | return NULL; | 168 | return NULL; |
@@ -165,6 +197,9 @@ eina_unicode_utf8_get_next(const char *buf, int *iindex) | |||
165 | Eina_Unicode r; | 197 | Eina_Unicode r; |
166 | unsigned char d; | 198 | unsigned char d; |
167 | 199 | ||
200 | EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0); | ||
201 | EINA_SAFETY_ON_NULL_RETURN_VAL(iindex, 0); | ||
202 | |||
168 | /* if this char is the null terminator, exit */ | 203 | /* if this char is the null terminator, exit */ |
169 | if ((d = buf[ind++]) == 0) return 0; | 204 | if ((d = buf[ind++]) == 0) return 0; |
170 | 205 | ||
@@ -266,8 +301,12 @@ error: | |||
266 | EAPI Eina_Unicode | 301 | EAPI Eina_Unicode |
267 | eina_unicode_utf8_get_prev(const char *buf, int *iindex) | 302 | eina_unicode_utf8_get_prev(const char *buf, int *iindex) |
268 | { | 303 | { |
269 | int r; | 304 | int r, ind; |
270 | int ind = *iindex; | 305 | |
306 | EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0); | ||
307 | EINA_SAFETY_ON_NULL_RETURN_VAL(iindex, 0); | ||
308 | |||
309 | ind = *iindex; | ||
271 | /* First obtain the codepoint at iindex */ | 310 | /* First obtain the codepoint at iindex */ |
272 | r = eina_unicode_utf8_get_next(buf, &ind); | 311 | r = eina_unicode_utf8_get_next(buf, &ind); |
273 | 312 | ||
@@ -292,6 +331,8 @@ eina_unicode_utf8_get_len(const char *buf) | |||
292 | /* returns the number of utf8 characters (not bytes) in the string */ | 331 | /* returns the number of utf8 characters (not bytes) in the string */ |
293 | int i = 0, len = 0; | 332 | int i = 0, len = 0; |
294 | 333 | ||
334 | EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0); | ||
335 | |||
295 | while (eina_unicode_utf8_get_next(buf, &i)) | 336 | while (eina_unicode_utf8_get_next(buf, &i)) |
296 | len++; | 337 | len++; |
297 | 338 | ||
@@ -306,6 +347,8 @@ eina_unicode_utf8_to_unicode(const char *utf, int *_len) | |||
306 | int ind; | 347 | int ind; |
307 | Eina_Unicode *buf, *uind; | 348 | Eina_Unicode *buf, *uind; |
308 | 349 | ||
350 | EINA_SAFETY_ON_NULL_RETURN_VAL(utf, NULL); | ||
351 | |||
309 | len = eina_unicode_utf8_get_len(utf); | 352 | len = eina_unicode_utf8_get_len(utf); |
310 | if (_len) | 353 | if (_len) |
311 | *_len = len; | 354 | *_len = len; |
@@ -328,6 +371,8 @@ eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) | |||
328 | char *ind; | 371 | char *ind; |
329 | int ulen, len; | 372 | int ulen, len; |
330 | 373 | ||
374 | EINA_SAFETY_ON_NULL_RETURN_VAL(uni, NULL); | ||
375 | |||
331 | ulen = eina_unicode_strlen(uni); | 376 | ulen = eina_unicode_strlen(uni); |
332 | buf = (char *) calloc(ulen + 1, EINA_UNICODE_UTF8_BYTES_PER_CHAR); | 377 | buf = (char *) calloc(ulen + 1, EINA_UNICODE_UTF8_BYTES_PER_CHAR); |
333 | 378 | ||
diff --git a/libraries/eina/src/lib/eina_ustringshare.c b/libraries/eina/src/lib/eina_ustringshare.c index 3992dc6..33be242 100644 --- a/libraries/eina/src/lib/eina_ustringshare.c +++ b/libraries/eina/src/lib/eina_ustringshare.c | |||
@@ -27,11 +27,38 @@ | |||
27 | * | 27 | * |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include "eina_share_common.h" | 30 | #ifdef HAVE_CONFIG_H |
31 | #include "eina_unicode.h" | 31 | # include "config.h" |
32 | #endif | ||
33 | |||
34 | #include "eina_config.h" | ||
32 | #include "eina_private.h" | 35 | #include "eina_private.h" |
36 | #include "eina_unicode.h" | ||
37 | #include "eina_log.h" | ||
38 | #include "eina_share_common.h" | ||
39 | |||
40 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | ||
41 | #include "eina_safety_checks.h" | ||
33 | #include "eina_ustringshare.h" | 42 | #include "eina_ustringshare.h" |
34 | 43 | ||
44 | |||
45 | #ifdef CRITICAL | ||
46 | #undef CRITICAL | ||
47 | #endif | ||
48 | #define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_ustringshare_log_dom, __VA_ARGS__) | ||
49 | |||
50 | #ifdef ERR | ||
51 | #undef ERR | ||
52 | #endif | ||
53 | #define ERR(...) EINA_LOG_DOM_ERR(_eina_share_ustringshare_log_dom, __VA_ARGS__) | ||
54 | |||
55 | #ifdef DBG | ||
56 | #undef DBG | ||
57 | #endif | ||
58 | #define DBG(...) EINA_LOG_DOM_DBG(_eina_share_ustringshare_log_dom, __VA_ARGS__) | ||
59 | |||
60 | static int _eina_share_ustringshare_log_dom = -1; | ||
61 | |||
35 | /* The actual share */ | 62 | /* The actual share */ |
36 | static Eina_Share *ustringshare_share; | 63 | static Eina_Share *ustringshare_share; |
37 | static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; | 64 | static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; |
@@ -54,9 +81,31 @@ static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; | |||
54 | Eina_Bool | 81 | Eina_Bool |
55 | eina_ustringshare_init(void) | 82 | eina_ustringshare_init(void) |
56 | { | 83 | { |
57 | return eina_share_common_init(&ustringshare_share, | 84 | Eina_Bool ret; |
58 | EINA_MAGIC_USTRINGSHARE_NODE, | 85 | |
59 | EINA_MAGIC_USTRINGSHARE_NODE_STR); | 86 | if (_eina_share_ustringshare_log_dom < 0) |
87 | { | ||
88 | _eina_share_ustringshare_log_dom = eina_log_domain_register | ||
89 | ("eina_ustringshare", EINA_LOG_COLOR_DEFAULT); | ||
90 | |||
91 | if (_eina_share_ustringshare_log_dom < 0) | ||
92 | { | ||
93 | EINA_LOG_ERR("Could not register log domain: eina_ustringshare"); | ||
94 | return EINA_FALSE; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | ret = eina_share_common_init(&ustringshare_share, | ||
99 | EINA_MAGIC_USTRINGSHARE_NODE, | ||
100 | EINA_MAGIC_USTRINGSHARE_NODE_STR); | ||
101 | |||
102 | if (!ret) | ||
103 | { | ||
104 | eina_log_domain_unregister(_eina_share_ustringshare_log_dom); | ||
105 | _eina_share_ustringshare_log_dom = -1; | ||
106 | } | ||
107 | |||
108 | return ret; | ||
60 | } | 109 | } |
61 | 110 | ||
62 | /** | 111 | /** |
@@ -75,6 +124,13 @@ eina_ustringshare_shutdown(void) | |||
75 | { | 124 | { |
76 | Eina_Bool ret; | 125 | Eina_Bool ret; |
77 | ret = eina_share_common_shutdown(&ustringshare_share); | 126 | ret = eina_share_common_shutdown(&ustringshare_share); |
127 | |||
128 | if (_eina_share_ustringshare_log_dom >= 0) | ||
129 | { | ||
130 | eina_log_domain_unregister(_eina_share_ustringshare_log_dom); | ||
131 | _eina_share_ustringshare_log_dom = -1; | ||
132 | } | ||
133 | |||
78 | return ret; | 134 | return ret; |
79 | } | 135 | } |
80 | 136 | ||
@@ -88,7 +144,8 @@ eina_ustringshare_del(const Eina_Unicode *str) | |||
88 | if (!str) | 144 | if (!str) |
89 | return; | 145 | return; |
90 | 146 | ||
91 | eina_share_common_del(ustringshare_share,(const char *)str); | 147 | if (!eina_share_common_del(ustringshare_share, (const char *)str)) |
148 | CRITICAL("EEEK trying to del non-shared ustringshare \"%s\"", (const char *)str); | ||
92 | } | 149 | } |
93 | 150 | ||
94 | EAPI const Eina_Unicode * | 151 | EAPI const Eina_Unicode * |
diff --git a/libraries/eina/src/lib/eina_value.c b/libraries/eina/src/lib/eina_value.c index ba8af52..b8df693 100644 --- a/libraries/eina/src/lib/eina_value.c +++ b/libraries/eina/src/lib/eina_value.c | |||
@@ -49,6 +49,10 @@ void *alloca (size_t); | |||
49 | #include <inttypes.h> /* PRId64 and PRIu64 */ | 49 | #include <inttypes.h> /* PRId64 and PRIu64 */ |
50 | #include <sys/time.h> /* struct timeval */ | 50 | #include <sys/time.h> /* struct timeval */ |
51 | 51 | ||
52 | #ifdef HAVE_EVIL | ||
53 | # include <Evil.h> | ||
54 | #endif | ||
55 | |||
52 | #include "eina_config.h" | 56 | #include "eina_config.h" |
53 | #include "eina_private.h" | 57 | #include "eina_private.h" |
54 | #include "eina_error.h" | 58 | #include "eina_error.h" |
@@ -60,6 +64,7 @@ void *alloca (size_t); | |||
60 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ | 64 | /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ |
61 | #include "eina_safety_checks.h" | 65 | #include "eina_safety_checks.h" |
62 | #include "eina_value.h" | 66 | #include "eina_value.h" |
67 | #include "eina_model.h" /* uses eina_value.h */ | ||
63 | 68 | ||
64 | /*============================================================================* | 69 | /*============================================================================* |
65 | * Local * | 70 | * Local * |
@@ -168,7 +173,7 @@ _eina_value_type_uchar_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
168 | unsigned int other_mem = v; | 173 | unsigned int other_mem = v; |
169 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 174 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
170 | } | 175 | } |
171 | else if (convert == EINA_VALUE_TYPE_ULONG) | 176 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
172 | { | 177 | { |
173 | unsigned long other_mem = v; | 178 | unsigned long other_mem = v; |
174 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 179 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
@@ -317,7 +322,7 @@ _eina_value_type_ushort_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
317 | unsigned int other_mem = v; | 322 | unsigned int other_mem = v; |
318 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 323 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
319 | } | 324 | } |
320 | else if (convert == EINA_VALUE_TYPE_ULONG) | 325 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
321 | { | 326 | { |
322 | unsigned long other_mem = v; | 327 | unsigned long other_mem = v; |
323 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 328 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
@@ -470,7 +475,7 @@ _eina_value_type_uint_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
470 | unsigned int other_mem = v; | 475 | unsigned int other_mem = v; |
471 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 476 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
472 | } | 477 | } |
473 | else if (convert == EINA_VALUE_TYPE_ULONG) | 478 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
474 | { | 479 | { |
475 | unsigned long other_mem = v; | 480 | unsigned long other_mem = v; |
476 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 481 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
@@ -627,7 +632,7 @@ _eina_value_type_ulong_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
627 | return EINA_FALSE; | 632 | return EINA_FALSE; |
628 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 633 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
629 | } | 634 | } |
630 | else if (convert == EINA_VALUE_TYPE_ULONG) | 635 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
631 | { | 636 | { |
632 | unsigned long other_mem = v; | 637 | unsigned long other_mem = v; |
633 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 638 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
@@ -786,7 +791,7 @@ _eina_value_type_uint64_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
786 | return EINA_FALSE; | 791 | return EINA_FALSE; |
787 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 792 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
788 | } | 793 | } |
789 | else if (convert == EINA_VALUE_TYPE_ULONG) | 794 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
790 | { | 795 | { |
791 | unsigned long other_mem = v; | 796 | unsigned long other_mem = v; |
792 | if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) && | 797 | if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) && |
@@ -950,7 +955,7 @@ _eina_value_type_char_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
950 | return EINA_FALSE; | 955 | return EINA_FALSE; |
951 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 956 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
952 | } | 957 | } |
953 | else if (convert == EINA_VALUE_TYPE_ULONG) | 958 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
954 | { | 959 | { |
955 | unsigned long other_mem = v; | 960 | unsigned long other_mem = v; |
956 | if (EINA_UNLIKELY(v < 0)) | 961 | if (EINA_UNLIKELY(v < 0)) |
@@ -1107,7 +1112,7 @@ _eina_value_type_short_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
1107 | return EINA_FALSE; | 1112 | return EINA_FALSE; |
1108 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1113 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1109 | } | 1114 | } |
1110 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1115 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1111 | { | 1116 | { |
1112 | unsigned long other_mem = v; | 1117 | unsigned long other_mem = v; |
1113 | if (EINA_UNLIKELY(v < 0)) | 1118 | if (EINA_UNLIKELY(v < 0)) |
@@ -1270,7 +1275,7 @@ _eina_value_type_int_convert_to(const Eina_Value_Type *type __UNUSED__, const Ei | |||
1270 | return EINA_FALSE; | 1275 | return EINA_FALSE; |
1271 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1276 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1272 | } | 1277 | } |
1273 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1278 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1274 | { | 1279 | { |
1275 | unsigned long other_mem = v; | 1280 | unsigned long other_mem = v; |
1276 | if (EINA_UNLIKELY(v < 0)) | 1281 | if (EINA_UNLIKELY(v < 0)) |
@@ -1439,7 +1444,7 @@ _eina_value_type_long_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
1439 | return EINA_FALSE; | 1444 | return EINA_FALSE; |
1440 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1445 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1441 | } | 1446 | } |
1442 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1447 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1443 | { | 1448 | { |
1444 | unsigned long other_mem = v; | 1449 | unsigned long other_mem = v; |
1445 | if (EINA_UNLIKELY(v < 0)) | 1450 | if (EINA_UNLIKELY(v < 0)) |
@@ -1612,7 +1617,7 @@ _eina_value_type_int64_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
1612 | return EINA_FALSE; | 1617 | return EINA_FALSE; |
1613 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1618 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1614 | } | 1619 | } |
1615 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1620 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1616 | { | 1621 | { |
1617 | unsigned long other_mem = v; | 1622 | unsigned long other_mem = v; |
1618 | if (EINA_UNLIKELY(v < 0)) | 1623 | if (EINA_UNLIKELY(v < 0)) |
@@ -1792,7 +1797,7 @@ _eina_value_type_float_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
1792 | return EINA_FALSE; | 1797 | return EINA_FALSE; |
1793 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1798 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1794 | } | 1799 | } |
1795 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1800 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1796 | { | 1801 | { |
1797 | unsigned long other_mem = v; | 1802 | unsigned long other_mem = v; |
1798 | if (EINA_UNLIKELY(v < 0)) | 1803 | if (EINA_UNLIKELY(v < 0)) |
@@ -1978,7 +1983,7 @@ _eina_value_type_double_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
1978 | return EINA_FALSE; | 1983 | return EINA_FALSE; |
1979 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 1984 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
1980 | } | 1985 | } |
1981 | else if (convert == EINA_VALUE_TYPE_ULONG) | 1986 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
1982 | { | 1987 | { |
1983 | unsigned long other_mem = v; | 1988 | unsigned long other_mem = v; |
1984 | if (EINA_UNLIKELY(v < 0)) | 1989 | if (EINA_UNLIKELY(v < 0)) |
@@ -2146,7 +2151,7 @@ _eina_value_type_string_common_convert_to(const Eina_Value_Type *type __UNUSED__ | |||
2146 | return EINA_FALSE; | 2151 | return EINA_FALSE; |
2147 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 2152 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
2148 | } | 2153 | } |
2149 | else if (convert == EINA_VALUE_TYPE_ULONG) | 2154 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
2150 | { | 2155 | { |
2151 | unsigned long other_mem; | 2156 | unsigned long other_mem; |
2152 | if ((sscanf(v, "%lu", &other_mem) != 1) && | 2157 | if ((sscanf(v, "%lu", &other_mem) != 1) && |
@@ -2248,7 +2253,11 @@ static Eina_Bool | |||
2248 | _eina_value_type_stringshare_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | 2253 | _eina_value_type_stringshare_flush(const Eina_Value_Type *type __UNUSED__, void *mem) |
2249 | { | 2254 | { |
2250 | const char **tmem = mem; | 2255 | const char **tmem = mem; |
2251 | if (*tmem) eina_stringshare_del(*tmem); | 2256 | if (*tmem) |
2257 | { | ||
2258 | eina_stringshare_del(*tmem); | ||
2259 | *tmem = NULL; | ||
2260 | } | ||
2252 | return EINA_TRUE; | 2261 | return EINA_TRUE; |
2253 | } | 2262 | } |
2254 | 2263 | ||
@@ -2257,8 +2266,7 @@ _eina_value_type_stringshare_copy(const Eina_Value_Type *type __UNUSED__, const | |||
2257 | { | 2266 | { |
2258 | const char * const*s = src; | 2267 | const char * const*s = src; |
2259 | const char **d = dst; | 2268 | const char **d = dst; |
2260 | *d = *s; | 2269 | *d = eina_stringshare_add(*s); |
2261 | eina_stringshare_ref(*d); | ||
2262 | return EINA_TRUE; | 2270 | return EINA_TRUE; |
2263 | } | 2271 | } |
2264 | 2272 | ||
@@ -2280,7 +2288,11 @@ static Eina_Bool | |||
2280 | _eina_value_type_string_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | 2288 | _eina_value_type_string_flush(const Eina_Value_Type *type __UNUSED__, void *mem) |
2281 | { | 2289 | { |
2282 | char **tmem = mem; | 2290 | char **tmem = mem; |
2283 | if (*tmem) free(*tmem); | 2291 | if (*tmem) |
2292 | { | ||
2293 | free(*tmem); | ||
2294 | *tmem = NULL; | ||
2295 | } | ||
2284 | return EINA_TRUE; | 2296 | return EINA_TRUE; |
2285 | } | 2297 | } |
2286 | 2298 | ||
@@ -2308,19 +2320,24 @@ _eina_value_type_string_vset(const Eina_Value_Type *type __UNUSED__, void *mem, | |||
2308 | { | 2320 | { |
2309 | char **tmem = mem; | 2321 | char **tmem = mem; |
2310 | const char *str = va_arg(args, const char *); | 2322 | const char *str = va_arg(args, const char *); |
2311 | free(*tmem); | 2323 | eina_error_set(0); |
2312 | if (str == NULL) | 2324 | if (str == *tmem) return EINA_TRUE; |
2313 | *tmem = NULL; | 2325 | if (!str) |
2326 | { | ||
2327 | free(*tmem); | ||
2328 | *tmem = NULL; | ||
2329 | } | ||
2314 | else | 2330 | else |
2315 | { | 2331 | { |
2316 | *tmem = strdup(str); | 2332 | char *tmp = strdup(str); |
2317 | if (*tmem == NULL) | 2333 | if (!tmp) |
2318 | { | 2334 | { |
2319 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 2335 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
2320 | return EINA_FALSE; | 2336 | return EINA_FALSE; |
2321 | } | 2337 | } |
2338 | free(*tmem); | ||
2339 | *tmem = tmp; | ||
2322 | } | 2340 | } |
2323 | eina_error_set(0); | ||
2324 | return EINA_TRUE; | 2341 | return EINA_TRUE; |
2325 | } | 2342 | } |
2326 | 2343 | ||
@@ -2329,19 +2346,24 @@ _eina_value_type_string_pset(const Eina_Value_Type *type __UNUSED__, void *mem, | |||
2329 | { | 2346 | { |
2330 | char **tmem = mem; | 2347 | char **tmem = mem; |
2331 | const char * const *str = ptr; | 2348 | const char * const *str = ptr; |
2332 | free(*tmem); | 2349 | eina_error_set(0); |
2333 | if (*str == NULL) | 2350 | if (*str == *tmem) return EINA_TRUE; |
2334 | *tmem = NULL; | 2351 | if (!*str) |
2352 | { | ||
2353 | free(*tmem); | ||
2354 | *tmem = NULL; | ||
2355 | } | ||
2335 | else | 2356 | else |
2336 | { | 2357 | { |
2337 | *tmem = strdup(*str); | 2358 | char *tmp = strdup(*str); |
2338 | if (*tmem == NULL) | 2359 | if (!tmp) |
2339 | { | 2360 | { |
2340 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 2361 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
2341 | return EINA_FALSE; | 2362 | return EINA_FALSE; |
2342 | } | 2363 | } |
2364 | free(*tmem); | ||
2365 | *tmem = tmp; | ||
2343 | } | 2366 | } |
2344 | eina_error_set(0); | ||
2345 | return EINA_TRUE; | 2367 | return EINA_TRUE; |
2346 | } | 2368 | } |
2347 | 2369 | ||
@@ -2505,12 +2527,13 @@ _eina_value_type_array_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
2505 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) | 2527 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) |
2506 | { | 2528 | { |
2507 | Eina_Strbuf *str = eina_strbuf_new(); | 2529 | Eina_Strbuf *str = eina_strbuf_new(); |
2530 | const char *ptr; | ||
2508 | if (!tmem->array) eina_strbuf_append(str, "[]"); | 2531 | if (!tmem->array) eina_strbuf_append(str, "[]"); |
2509 | else | 2532 | else |
2510 | { | 2533 | { |
2511 | const Eina_Value_Type *subtype = tmem->subtype; | 2534 | const Eina_Value_Type *subtype = tmem->subtype; |
2512 | unsigned char sz; | 2535 | unsigned char sz; |
2513 | const char *ptr, *ptr_end; | 2536 | const char *ptr_end; |
2514 | Eina_Value tmp; | 2537 | Eina_Value tmp; |
2515 | Eina_Bool first = EINA_TRUE; | 2538 | Eina_Bool first = EINA_TRUE; |
2516 | 2539 | ||
@@ -2551,10 +2574,10 @@ _eina_value_type_array_convert_to(const Eina_Value_Type *type __UNUSED__, const | |||
2551 | } | 2574 | } |
2552 | 2575 | ||
2553 | eina_strbuf_append_char(str, ']'); | 2576 | eina_strbuf_append_char(str, ']'); |
2554 | ptr = eina_strbuf_string_get(str); | ||
2555 | ret = eina_value_type_pset(convert, convert_mem, &ptr); | ||
2556 | eina_strbuf_free(str); | ||
2557 | } | 2577 | } |
2578 | ptr = eina_strbuf_string_get(str); | ||
2579 | ret = eina_value_type_pset(convert, convert_mem, &ptr); | ||
2580 | eina_strbuf_free(str); | ||
2558 | } | 2581 | } |
2559 | else if ((tmem->array) && (tmem->array->len == 1)) | 2582 | else if ((tmem->array) && (tmem->array->len == 1)) |
2560 | { | 2583 | { |
@@ -2606,43 +2629,51 @@ _eina_value_type_array_convert_from(const Eina_Value_Type *type, const Eina_Valu | |||
2606 | } | 2629 | } |
2607 | 2630 | ||
2608 | static Eina_Bool | 2631 | static Eina_Bool |
2609 | _eina_value_type_array_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr) | 2632 | _eina_value_type_array_pset(const Eina_Value_Type *type, void *mem, const void *ptr) |
2610 | { | 2633 | { |
2611 | Eina_Value_Array *tmem = mem; | 2634 | Eina_Value_Array *tmem = mem; |
2612 | const Eina_Value_Array *desc = ptr; | 2635 | const Eina_Value_Array *desc = ptr; |
2613 | Eina_Inarray *desc_array; | 2636 | Eina_Inarray *desc_array; |
2614 | 2637 | ||
2638 | eina_error_set(0); | ||
2615 | if ((!tmem->subtype) && (!desc->subtype)) | 2639 | if ((!tmem->subtype) && (!desc->subtype)) |
2616 | return EINA_TRUE; | 2640 | return EINA_TRUE; |
2617 | 2641 | ||
2618 | desc_array = desc->array; | 2642 | desc_array = desc->array; |
2619 | if (desc_array) | 2643 | if (desc_array) |
2620 | { | 2644 | { |
2645 | Eina_Value_Array tmp; | ||
2646 | |||
2621 | EINA_SAFETY_ON_FALSE_RETURN_VAL | 2647 | EINA_SAFETY_ON_FALSE_RETURN_VAL |
2622 | (desc_array->member_size == desc->subtype->value_size, EINA_FALSE); | 2648 | (desc_array->member_size == desc->subtype->value_size, EINA_FALSE); |
2649 | |||
2650 | if (desc_array == tmem->array) | ||
2651 | { | ||
2652 | tmem->subtype = desc->subtype; | ||
2653 | return EINA_TRUE; | ||
2654 | } | ||
2655 | |||
2656 | if (!_eina_value_type_array_copy(type, desc, &tmp)) | ||
2657 | return EINA_FALSE; | ||
2658 | |||
2659 | _eina_value_type_array_flush(type, tmem); | ||
2660 | memcpy(tmem, &tmp, sizeof(tmp)); | ||
2661 | return EINA_TRUE; | ||
2623 | } | 2662 | } |
2624 | 2663 | ||
2625 | if (tmem->array) | 2664 | if (tmem->array) |
2626 | { | 2665 | { |
2627 | _eina_value_type_array_flush_elements(tmem); | 2666 | _eina_value_type_array_flush_elements(tmem); |
2628 | if (desc_array) | 2667 | eina_inarray_setup(tmem->array, desc->subtype->value_size, desc->step); |
2629 | eina_inarray_free(tmem->array); | ||
2630 | else | ||
2631 | eina_inarray_setup(tmem->array, desc->subtype->value_size, | ||
2632 | desc->step); | ||
2633 | } | 2668 | } |
2634 | else if (!desc_array) | 2669 | else |
2635 | { | 2670 | { |
2636 | tmem->array = eina_inarray_new(desc->subtype->value_size, desc->step); | 2671 | tmem->array = eina_inarray_new(desc->subtype->value_size, desc->step); |
2637 | if (!tmem->array) | 2672 | if (!tmem->array) |
2638 | return EINA_FALSE; | 2673 | return EINA_FALSE; |
2639 | } | 2674 | } |
2640 | 2675 | ||
2641 | if (desc_array) | ||
2642 | tmem->array = desc_array; | ||
2643 | |||
2644 | tmem->subtype = desc->subtype; | 2676 | tmem->subtype = desc->subtype; |
2645 | |||
2646 | return EINA_TRUE; | 2677 | return EINA_TRUE; |
2647 | } | 2678 | } |
2648 | 2679 | ||
@@ -2821,13 +2852,13 @@ _eina_value_type_list_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
2821 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) | 2852 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) |
2822 | { | 2853 | { |
2823 | Eina_Strbuf *str = eina_strbuf_new(); | 2854 | Eina_Strbuf *str = eina_strbuf_new(); |
2855 | const char *s; | ||
2824 | if (!tmem->list) eina_strbuf_append(str, "[]"); | 2856 | if (!tmem->list) eina_strbuf_append(str, "[]"); |
2825 | else | 2857 | else |
2826 | { | 2858 | { |
2827 | const Eina_Value_Type *subtype = tmem->subtype; | 2859 | const Eina_Value_Type *subtype = tmem->subtype; |
2828 | const Eina_List *node; | 2860 | const Eina_List *node; |
2829 | Eina_Value tmp; | 2861 | Eina_Value tmp; |
2830 | const char *s; | ||
2831 | Eina_Bool first = EINA_TRUE; | 2862 | Eina_Bool first = EINA_TRUE; |
2832 | 2863 | ||
2833 | eina_value_setup(&tmp, EINA_VALUE_TYPE_STRING); | 2864 | eina_value_setup(&tmp, EINA_VALUE_TYPE_STRING); |
@@ -2867,10 +2898,10 @@ _eina_value_type_list_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
2867 | } | 2898 | } |
2868 | 2899 | ||
2869 | eina_strbuf_append_char(str, ']'); | 2900 | eina_strbuf_append_char(str, ']'); |
2870 | s = eina_strbuf_string_get(str); | ||
2871 | ret = eina_value_type_pset(convert, convert_mem, &s); | ||
2872 | eina_strbuf_free(str); | ||
2873 | } | 2901 | } |
2902 | s = eina_strbuf_string_get(str); | ||
2903 | ret = eina_value_type_pset(convert, convert_mem, &s); | ||
2904 | eina_strbuf_free(str); | ||
2874 | } | 2905 | } |
2875 | else if ((tmem->list) && (tmem->list->next == NULL)) | 2906 | else if ((tmem->list) && (tmem->list->next == NULL)) |
2876 | { | 2907 | { |
@@ -2932,18 +2963,36 @@ _eina_value_type_list_convert_from(const Eina_Value_Type *type, const Eina_Value | |||
2932 | } | 2963 | } |
2933 | 2964 | ||
2934 | static Eina_Bool | 2965 | static Eina_Bool |
2935 | _eina_value_type_list_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr) | 2966 | _eina_value_type_list_pset(const Eina_Value_Type *type, void *mem, const void *ptr) |
2936 | { | 2967 | { |
2937 | Eina_Value_List *tmem = mem; | 2968 | Eina_Value_List *tmem = mem; |
2938 | const Eina_Value_List *desc = ptr; | 2969 | const Eina_Value_List *desc = ptr; |
2939 | 2970 | ||
2971 | eina_error_set(0); | ||
2940 | if ((!tmem->subtype) && (!desc->subtype)) | 2972 | if ((!tmem->subtype) && (!desc->subtype)) |
2941 | return EINA_TRUE; | 2973 | return EINA_TRUE; |
2942 | 2974 | ||
2975 | if ((tmem->list) && (tmem->list == desc->list)) | ||
2976 | { | ||
2977 | tmem->subtype = desc->subtype; | ||
2978 | return EINA_TRUE; | ||
2979 | } | ||
2980 | |||
2981 | if (desc->list) | ||
2982 | { | ||
2983 | Eina_Value_List tmp; | ||
2984 | |||
2985 | if (!_eina_value_type_list_copy(type, desc, &tmp)) | ||
2986 | return EINA_FALSE; | ||
2987 | |||
2988 | _eina_value_type_list_flush(type, tmem); | ||
2989 | memcpy(tmem, &tmp, sizeof(tmp)); | ||
2990 | return EINA_TRUE; | ||
2991 | } | ||
2992 | |||
2943 | _eina_value_type_list_flush_elements(tmem); | 2993 | _eina_value_type_list_flush_elements(tmem); |
2944 | tmem->subtype = desc->subtype; | ||
2945 | tmem->list = desc->list; | ||
2946 | 2994 | ||
2995 | tmem->subtype = desc->subtype; | ||
2947 | return EINA_TRUE; | 2996 | return EINA_TRUE; |
2948 | } | 2997 | } |
2949 | 2998 | ||
@@ -2995,6 +3044,7 @@ _eina_value_type_hash_flush_each(const Eina_Hash *hash __UNUSED__, const void *k | |||
2995 | { | 3044 | { |
2996 | struct _eina_value_type_hash_flush_each_ctx *ctx = user_data; | 3045 | struct _eina_value_type_hash_flush_each_ctx *ctx = user_data; |
2997 | ctx->ret &= eina_value_type_flush(ctx->subtype, mem); | 3046 | ctx->ret &= eina_value_type_flush(ctx->subtype, mem); |
3047 | free(mem); | ||
2998 | return EINA_TRUE; | 3048 | return EINA_TRUE; |
2999 | } | 3049 | } |
3000 | 3050 | ||
@@ -3239,11 +3289,11 @@ _eina_value_type_hash_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
3239 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) | 3289 | (convert == EINA_VALUE_TYPE_STRINGSHARE)) |
3240 | { | 3290 | { |
3241 | Eina_Strbuf *str = eina_strbuf_new(); | 3291 | Eina_Strbuf *str = eina_strbuf_new(); |
3292 | const char *s; | ||
3242 | if (!tmem->hash) eina_strbuf_append(str, "{}"); | 3293 | if (!tmem->hash) eina_strbuf_append(str, "{}"); |
3243 | else | 3294 | else |
3244 | { | 3295 | { |
3245 | struct _eina_value_type_hash_convert_to_string_each_ctx ctx; | 3296 | struct _eina_value_type_hash_convert_to_string_each_ctx ctx; |
3246 | const char *s; | ||
3247 | 3297 | ||
3248 | ctx.subtype = tmem->subtype; | 3298 | ctx.subtype = tmem->subtype; |
3249 | ctx.str = str; | 3299 | ctx.str = str; |
@@ -3257,10 +3307,10 @@ _eina_value_type_hash_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
3257 | &ctx); | 3307 | &ctx); |
3258 | 3308 | ||
3259 | eina_strbuf_append_char(str, '}'); | 3309 | eina_strbuf_append_char(str, '}'); |
3260 | s = eina_strbuf_string_get(str); | ||
3261 | ret = eina_value_type_pset(convert, convert_mem, &s); | ||
3262 | eina_strbuf_free(str); | ||
3263 | } | 3310 | } |
3311 | s = eina_strbuf_string_get(str); | ||
3312 | ret = eina_value_type_pset(convert, convert_mem, &s); | ||
3313 | eina_strbuf_free(str); | ||
3264 | } | 3314 | } |
3265 | else if ((tmem->hash) && (eina_hash_population(tmem->hash) == 1)) | 3315 | else if ((tmem->hash) && (eina_hash_population(tmem->hash) == 1)) |
3266 | { | 3316 | { |
@@ -3288,22 +3338,38 @@ _eina_value_type_hash_convert_to(const Eina_Value_Type *type __UNUSED__, const E | |||
3288 | } | 3338 | } |
3289 | 3339 | ||
3290 | static Eina_Bool | 3340 | static Eina_Bool |
3291 | _eina_value_type_hash_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr) | 3341 | _eina_value_type_hash_pset(const Eina_Value_Type *type, void *mem, const void *ptr) |
3292 | { | 3342 | { |
3293 | Eina_Value_Hash *tmem = mem; | 3343 | Eina_Value_Hash *tmem = mem; |
3294 | const Eina_Value_Hash *desc = ptr; | 3344 | const Eina_Value_Hash *desc = ptr; |
3295 | 3345 | ||
3346 | eina_error_set(0); | ||
3296 | if ((!tmem->subtype) && (!desc->subtype)) | 3347 | if ((!tmem->subtype) && (!desc->subtype)) |
3297 | return EINA_TRUE; | 3348 | return EINA_TRUE; |
3298 | 3349 | ||
3299 | if (tmem->hash) _eina_value_type_hash_flush_elements(tmem); | 3350 | if ((tmem->hash) && (tmem->hash == desc->hash)) |
3351 | { | ||
3352 | tmem->subtype = desc->subtype; | ||
3353 | return EINA_TRUE; | ||
3354 | } | ||
3300 | 3355 | ||
3301 | if (desc->hash) | 3356 | if (desc->hash) |
3302 | tmem->hash = desc->hash; | 3357 | { |
3303 | else if (!_eina_value_type_hash_create(tmem)) | 3358 | Eina_Value_Hash tmp; |
3304 | return EINA_FALSE; | 3359 | |
3360 | if (!_eina_value_type_hash_copy(type, desc, &tmp)) | ||
3361 | return EINA_FALSE; | ||
3362 | |||
3363 | _eina_value_type_hash_flush(type, tmem); | ||
3364 | memcpy(tmem, &tmp, sizeof(tmp)); | ||
3365 | return EINA_TRUE; | ||
3366 | } | ||
3367 | |||
3368 | if (tmem->hash) _eina_value_type_hash_flush_elements(tmem); | ||
3305 | 3369 | ||
3306 | tmem->subtype = desc->subtype; | 3370 | tmem->subtype = desc->subtype; |
3371 | if (!_eina_value_type_hash_create(tmem)) | ||
3372 | return EINA_FALSE; | ||
3307 | 3373 | ||
3308 | return EINA_TRUE; | 3374 | return EINA_TRUE; |
3309 | } | 3375 | } |
@@ -3424,7 +3490,7 @@ _eina_value_type_timeval_convert_to(const Eina_Value_Type *type __UNUSED__, cons | |||
3424 | return EINA_FALSE; | 3490 | return EINA_FALSE; |
3425 | return eina_value_type_pset(convert, convert_mem, &other_mem); | 3491 | return eina_value_type_pset(convert, convert_mem, &other_mem); |
3426 | } | 3492 | } |
3427 | else if (convert == EINA_VALUE_TYPE_ULONG) | 3493 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) |
3428 | { | 3494 | { |
3429 | unsigned long other_mem = v.tv_sec; | 3495 | unsigned long other_mem = v.tv_sec; |
3430 | if (EINA_UNLIKELY(v.tv_sec < 0)) | 3496 | if (EINA_UNLIKELY(v.tv_sec < 0)) |
@@ -3570,6 +3636,8 @@ _eina_value_type_blob_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | |||
3570 | Eina_Value_Blob *tmem = mem; | 3636 | Eina_Value_Blob *tmem = mem; |
3571 | if ((ops) && (ops->free)) | 3637 | if ((ops) && (ops->free)) |
3572 | ops->free(ops, (void *)tmem->memory, tmem->size); | 3638 | ops->free(ops, (void *)tmem->memory, tmem->size); |
3639 | tmem->memory = NULL; | ||
3640 | tmem->size = 0; | ||
3573 | return EINA_TRUE; | 3641 | return EINA_TRUE; |
3574 | } | 3642 | } |
3575 | 3643 | ||
@@ -3776,6 +3844,14 @@ _eina_value_type_blob_pset(const Eina_Value_Type *type __UNUSED__, void *mem, co | |||
3776 | Eina_Value_Blob *tmem = mem; | 3844 | Eina_Value_Blob *tmem = mem; |
3777 | const Eina_Value_Blob *desc = ptr; | 3845 | const Eina_Value_Blob *desc = ptr; |
3778 | 3846 | ||
3847 | eina_error_set(0); | ||
3848 | if ((tmem->memory) && (tmem->memory == desc->memory)) | ||
3849 | { | ||
3850 | tmem->ops = desc->ops; | ||
3851 | tmem->size = desc->size; | ||
3852 | return EINA_TRUE; | ||
3853 | } | ||
3854 | |||
3779 | if ((ops) && (ops->free)) | 3855 | if ((ops) && (ops->free)) |
3780 | ops->free(ops, (void *)tmem->memory, tmem->size); | 3856 | ops->free(ops, (void *)tmem->memory, tmem->size); |
3781 | 3857 | ||
@@ -3872,6 +3948,7 @@ _eina_value_struct_operations_stringshare_find_member(const Eina_Value_Struct_Op | |||
3872 | return itr; | 3948 | return itr; |
3873 | } | 3949 | } |
3874 | 3950 | ||
3951 | itr = desc->members; | ||
3875 | name = eina_stringshare_add(name); | 3952 | name = eina_stringshare_add(name); |
3876 | eina_stringshare_del(name); /* we'll not use the contents, this is fine */ | 3953 | eina_stringshare_del(name); /* we'll not use the contents, this is fine */ |
3877 | /* stringshare and look again */ | 3954 | /* stringshare and look again */ |
@@ -3955,6 +4032,13 @@ _eina_value_type_struct_setup(const Eina_Value_Type *type __UNUSED__, void *mem) | |||
3955 | } | 4032 | } |
3956 | 4033 | ||
3957 | static Eina_Bool | 4034 | static Eina_Bool |
4035 | _eina_value_type_struct_setup_member(const Eina_Value_Struct_Member *member, Eina_Value_Struct *st) | ||
4036 | { | ||
4037 | unsigned char *base = st->memory; | ||
4038 | return eina_value_type_setup(member->type, base + member->offset); | ||
4039 | } | ||
4040 | |||
4041 | static Eina_Bool | ||
3958 | _eina_value_type_struct_flush_member(const Eina_Value_Struct_Member *member, Eina_Value_Struct *st) | 4042 | _eina_value_type_struct_flush_member(const Eina_Value_Struct_Member *member, Eina_Value_Struct *st) |
3959 | { | 4043 | { |
3960 | unsigned char *base = st->memory; | 4044 | unsigned char *base = st->memory; |
@@ -3969,6 +4053,9 @@ _eina_value_type_struct_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | |||
3969 | Eina_Value_Struct *tmem = mem; | 4053 | Eina_Value_Struct *tmem = mem; |
3970 | Eina_Bool ret = EINA_TRUE; | 4054 | Eina_Bool ret = EINA_TRUE; |
3971 | 4055 | ||
4056 | if ((!tmem->desc) || (!tmem->memory)) | ||
4057 | return EINA_TRUE; | ||
4058 | |||
3972 | itr = tmem->desc->members; | 4059 | itr = tmem->desc->members; |
3973 | if (tmem->desc->member_count > 0) | 4060 | if (tmem->desc->member_count > 0) |
3974 | { | 4061 | { |
@@ -3989,6 +4076,9 @@ _eina_value_type_struct_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | |||
3989 | else | 4076 | else |
3990 | free(tmem->memory); | 4077 | free(tmem->memory); |
3991 | 4078 | ||
4079 | tmem->memory = NULL; | ||
4080 | tmem->desc = NULL; | ||
4081 | |||
3992 | return ret; | 4082 | return ret; |
3993 | } | 4083 | } |
3994 | 4084 | ||
@@ -4012,6 +4102,9 @@ _eina_value_type_struct_copy(const Eina_Value_Type *type __UNUSED__, const void | |||
4012 | 4102 | ||
4013 | *d = *s; | 4103 | *d = *s; |
4014 | 4104 | ||
4105 | if ((!s->desc) || (!s->memory)) | ||
4106 | return EINA_TRUE; | ||
4107 | |||
4015 | ops = _eina_value_type_struct_ops_get(src); | 4108 | ops = _eina_value_type_struct_ops_get(src); |
4016 | if ((ops) && (ops->copy)) | 4109 | if ((ops) && (ops->copy)) |
4017 | { | 4110 | { |
@@ -4021,7 +4114,10 @@ _eina_value_type_struct_copy(const Eina_Value_Type *type __UNUSED__, const void | |||
4021 | return EINA_TRUE; | 4114 | return EINA_TRUE; |
4022 | } | 4115 | } |
4023 | 4116 | ||
4024 | d->memory = malloc(s->desc->size); | 4117 | if ((ops) && (ops->alloc)) |
4118 | d->memory = ops->alloc(ops, s->desc); | ||
4119 | else | ||
4120 | d->memory = malloc(s->desc->size); | ||
4025 | if (!d->memory) | 4121 | if (!d->memory) |
4026 | { | 4122 | { |
4027 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 4123 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
@@ -4043,14 +4139,17 @@ _eina_value_type_struct_copy(const Eina_Value_Type *type __UNUSED__, const void | |||
4043 | goto error; | 4139 | goto error; |
4044 | } | 4140 | } |
4045 | 4141 | ||
4046 | |||
4047 | return EINA_TRUE; | 4142 | return EINA_TRUE; |
4048 | 4143 | ||
4049 | error: | 4144 | error: |
4050 | itr--; | 4145 | itr--; |
4051 | for (; itr >= s->desc->members; itr--) | 4146 | for (; itr >= s->desc->members; itr--) |
4052 | _eina_value_type_struct_flush_member(itr, d); | 4147 | _eina_value_type_struct_flush_member(itr, d); |
4053 | free(d->memory); | 4148 | |
4149 | if ((ops) && (ops->free)) | ||
4150 | ops->free(ops, s->desc, d->memory); | ||
4151 | else | ||
4152 | free(d->memory); | ||
4054 | return EINA_FALSE; | 4153 | return EINA_FALSE; |
4055 | } | 4154 | } |
4056 | 4155 | ||
@@ -4072,7 +4171,9 @@ _eina_value_type_struct_compare(const Eina_Value_Type *type __UNUSED__, const vo | |||
4072 | const Eina_Value_Struct_Member *itr; | 4171 | const Eina_Value_Struct_Member *itr; |
4073 | int cmp = 0; | 4172 | int cmp = 0; |
4074 | 4173 | ||
4075 | if (ta->desc != tb->desc) | 4174 | if ((!ta->desc) && (!tb->desc)) |
4175 | return 0; | ||
4176 | else if (ta->desc != tb->desc) | ||
4076 | { | 4177 | { |
4077 | eina_error_set(EINA_ERROR_VALUE_FAILED); | 4178 | eina_error_set(EINA_ERROR_VALUE_FAILED); |
4078 | return -1; | 4179 | return -1; |
@@ -4236,11 +4337,12 @@ _eina_value_type_struct_desc_check(const Eina_Value_Struct_Desc *desc) | |||
4236 | } | 4337 | } |
4237 | 4338 | ||
4238 | static Eina_Bool | 4339 | static Eina_Bool |
4239 | _eina_value_type_struct_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr) | 4340 | _eina_value_type_struct_pset(const Eina_Value_Type *type, void *mem, const void *ptr) |
4240 | { | 4341 | { |
4241 | const Eina_Value_Struct_Operations *ops = _eina_value_type_struct_ops_get(mem); | 4342 | const Eina_Value_Struct_Operations *ops; |
4242 | Eina_Value_Struct *tmem = mem; | 4343 | Eina_Value_Struct *tmem = mem; |
4243 | const Eina_Value_Struct *desc = ptr; | 4344 | const Eina_Value_Struct *desc = ptr; |
4345 | const Eina_Value_Struct_Member *itr; | ||
4244 | 4346 | ||
4245 | if (!_eina_value_type_struct_desc_check(desc->desc)) | 4347 | if (!_eina_value_type_struct_desc_check(desc->desc)) |
4246 | { | 4348 | { |
@@ -4248,30 +4350,71 @@ _eina_value_type_struct_pset(const Eina_Value_Type *type __UNUSED__, void *mem, | |||
4248 | return EINA_FALSE; | 4350 | return EINA_FALSE; |
4249 | } | 4351 | } |
4250 | 4352 | ||
4251 | if ((ops) && (ops->free)) | 4353 | eina_error_set(0); |
4252 | ops->free(ops, tmem->desc, tmem->memory); | 4354 | if ((tmem->memory) && (tmem->memory == desc->memory)) |
4253 | else | 4355 | { |
4254 | free(tmem->memory); | 4356 | tmem->desc = desc->desc; |
4357 | return EINA_TRUE; | ||
4358 | } | ||
4255 | 4359 | ||
4256 | *tmem = *desc; | 4360 | if (desc->memory) |
4361 | { | ||
4362 | Eina_Value_Struct tmp; | ||
4363 | |||
4364 | if (!_eina_value_type_struct_copy(type, desc, &tmp)) | ||
4365 | return EINA_FALSE; | ||
4366 | |||
4367 | _eina_value_type_struct_flush(type, tmem); | ||
4368 | memcpy(tmem, &tmp, sizeof(tmp)); | ||
4369 | return EINA_TRUE; | ||
4370 | } | ||
4371 | |||
4372 | if (tmem->memory) _eina_value_type_struct_flush(type, mem); | ||
4373 | |||
4374 | tmem->desc = desc->desc; | ||
4257 | 4375 | ||
4258 | ops = _eina_value_type_struct_ops_get(desc); | 4376 | ops = _eina_value_type_struct_ops_get(desc); |
4377 | if ((ops) && (ops->alloc)) | ||
4378 | tmem->memory = ops->alloc(ops, tmem->desc); | ||
4379 | else | ||
4380 | tmem->memory = malloc(tmem->desc->size); | ||
4381 | |||
4259 | if (!tmem->memory) | 4382 | if (!tmem->memory) |
4260 | { | 4383 | { |
4261 | if ((ops) && (ops->alloc)) | 4384 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); |
4262 | tmem->memory = ops->alloc(ops, tmem->desc); | 4385 | return EINA_FALSE; |
4263 | else | 4386 | } |
4264 | tmem->memory = malloc(tmem->desc->size); | ||
4265 | 4387 | ||
4266 | if (!tmem->memory) | 4388 | itr = tmem->desc->members; |
4267 | { | 4389 | if (tmem->desc->member_count > 0) |
4268 | eina_error_set(EINA_ERROR_OUT_OF_MEMORY); | 4390 | { |
4269 | return EINA_FALSE; | 4391 | const Eina_Value_Struct_Member *itr_end; |
4270 | } | 4392 | itr_end = itr + tmem->desc->member_count; |
4393 | for (; itr < itr_end; itr++) | ||
4394 | if (!_eina_value_type_struct_setup_member(itr, tmem)) | ||
4395 | goto error; | ||
4396 | } | ||
4397 | else | ||
4398 | { | ||
4399 | for (; itr->name != NULL; itr++) | ||
4400 | if (!_eina_value_type_struct_setup_member(itr, tmem)) | ||
4401 | goto error; | ||
4271 | } | 4402 | } |
4272 | 4403 | ||
4273 | eina_error_set(0); | ||
4274 | return EINA_TRUE; | 4404 | return EINA_TRUE; |
4405 | |||
4406 | error: | ||
4407 | itr--; | ||
4408 | for (; itr >= tmem->desc->members; itr--) | ||
4409 | _eina_value_type_struct_flush_member(itr, tmem); | ||
4410 | |||
4411 | if ((ops) && (ops->free)) | ||
4412 | ops->free(ops, tmem->desc, tmem->memory); | ||
4413 | else | ||
4414 | free(tmem->memory); | ||
4415 | tmem->memory = NULL; | ||
4416 | tmem->desc = NULL; | ||
4417 | return EINA_FALSE; | ||
4275 | } | 4418 | } |
4276 | 4419 | ||
4277 | static Eina_Bool | 4420 | static Eina_Bool |
@@ -4304,6 +4447,130 @@ static const Eina_Value_Type _EINA_VALUE_TYPE_STRUCT = { | |||
4304 | _eina_value_type_struct_pget | 4447 | _eina_value_type_struct_pget |
4305 | }; | 4448 | }; |
4306 | 4449 | ||
4450 | static Eina_Bool | ||
4451 | _eina_value_type_model_setup(const Eina_Value_Type *type __UNUSED__, void *mem) | ||
4452 | { | ||
4453 | Eina_Model **tmem = mem; | ||
4454 | *tmem = NULL; | ||
4455 | return EINA_TRUE; | ||
4456 | } | ||
4457 | |||
4458 | static Eina_Bool | ||
4459 | _eina_value_type_model_flush(const Eina_Value_Type *type __UNUSED__, void *mem) | ||
4460 | { | ||
4461 | Eina_Model **tmem = mem; | ||
4462 | if (*tmem) | ||
4463 | { | ||
4464 | eina_model_unref(*tmem); | ||
4465 | *tmem = NULL; | ||
4466 | } | ||
4467 | return EINA_TRUE; | ||
4468 | } | ||
4469 | |||
4470 | static Eina_Bool | ||
4471 | _eina_value_type_model_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst) | ||
4472 | { | ||
4473 | const Eina_Model * const *s = src; | ||
4474 | Eina_Model **d = dst; | ||
4475 | if (*s) | ||
4476 | *d = eina_model_copy(*s); /* is it better to deep-copy? */ | ||
4477 | else | ||
4478 | *d = NULL; | ||
4479 | return EINA_TRUE; | ||
4480 | } | ||
4481 | |||
4482 | static int | ||
4483 | _eina_value_type_model_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b) | ||
4484 | { | ||
4485 | const Eina_Model * const *ta = a; | ||
4486 | const Eina_Model * const *tb = b; | ||
4487 | |||
4488 | if ((!*ta) && (!*tb)) return 0; | ||
4489 | else if (!*ta) return 1; | ||
4490 | else if (!*tb) return -1; | ||
4491 | else return eina_model_compare(*ta, *tb); | ||
4492 | } | ||
4493 | |||
4494 | static Eina_Bool | ||
4495 | _eina_value_type_model_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem) | ||
4496 | { | ||
4497 | const Eina_Model *v = *(const Eina_Model **)type_mem; | ||
4498 | |||
4499 | eina_error_set(0); | ||
4500 | |||
4501 | if (convert == EINA_VALUE_TYPE_STRINGSHARE || | ||
4502 | convert == EINA_VALUE_TYPE_STRING) | ||
4503 | { | ||
4504 | char *other_mem = v ? eina_model_to_string(v) : NULL; | ||
4505 | Eina_Bool ret = eina_value_type_pset(convert, convert_mem, &other_mem); | ||
4506 | free(other_mem); | ||
4507 | return ret; | ||
4508 | } | ||
4509 | else | ||
4510 | { | ||
4511 | eina_error_set(EINA_ERROR_VALUE_FAILED); | ||
4512 | return EINA_FALSE; | ||
4513 | } | ||
4514 | |||
4515 | return EINA_TRUE; | ||
4516 | } | ||
4517 | |||
4518 | static Eina_Bool | ||
4519 | _eina_value_type_model_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args) | ||
4520 | { | ||
4521 | Eina_Model **tmem = mem, *tmp; | ||
4522 | |||
4523 | tmp = va_arg(args, Eina_Model *); | ||
4524 | |||
4525 | if (tmp) eina_model_ref(tmp); | ||
4526 | if (*tmem) eina_model_unref(*tmem); | ||
4527 | |||
4528 | *tmem = tmp; | ||
4529 | |||
4530 | return EINA_TRUE; | ||
4531 | } | ||
4532 | |||
4533 | static Eina_Bool | ||
4534 | _eina_value_type_model_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr) | ||
4535 | { | ||
4536 | Eina_Model **tmem = mem; | ||
4537 | Eina_Model **p = (Eina_Model **)ptr; | ||
4538 | |||
4539 | eina_error_set(0); | ||
4540 | if (*tmem == *p) return EINA_TRUE; | ||
4541 | |||
4542 | if (*p) eina_model_ref(*p); | ||
4543 | if (*tmem) eina_model_unref(*tmem); | ||
4544 | |||
4545 | *tmem = *p; | ||
4546 | |||
4547 | return EINA_TRUE; | ||
4548 | } | ||
4549 | |||
4550 | static Eina_Bool | ||
4551 | _eina_value_type_model_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr) | ||
4552 | { | ||
4553 | Eina_Model **tmem = (Eina_Model **)mem; | ||
4554 | Eina_Model **p = ptr; | ||
4555 | *p = *tmem; | ||
4556 | return EINA_TRUE; | ||
4557 | } | ||
4558 | |||
4559 | static const Eina_Value_Type _EINA_VALUE_TYPE_MODEL = { | ||
4560 | EINA_VALUE_TYPE_VERSION, | ||
4561 | sizeof(Eina_Model *), | ||
4562 | "Eina_Model", | ||
4563 | _eina_value_type_model_setup, | ||
4564 | _eina_value_type_model_flush, | ||
4565 | _eina_value_type_model_copy, | ||
4566 | _eina_value_type_model_compare, | ||
4567 | _eina_value_type_model_convert_to, | ||
4568 | NULL, /* no convert from */ | ||
4569 | _eina_value_type_model_vset, | ||
4570 | _eina_value_type_model_pset, | ||
4571 | _eina_value_type_model_pget | ||
4572 | }; | ||
4573 | |||
4307 | /* keep all basic types inlined in an array so we can compare if it's | 4574 | /* keep all basic types inlined in an array so we can compare if it's |
4308 | * a basic type using pointer arithmetic. | 4575 | * a basic type using pointer arithmetic. |
4309 | * | 4576 | * |
@@ -4506,6 +4773,20 @@ static const Eina_Value_Type _EINA_VALUE_TYPE_BASICS[] = { | |||
4506 | _eina_value_type_string_vset, | 4773 | _eina_value_type_string_vset, |
4507 | _eina_value_type_string_pset, | 4774 | _eina_value_type_string_pset, |
4508 | _eina_value_type_string_common_pget | 4775 | _eina_value_type_string_common_pget |
4776 | }, | ||
4777 | { | ||
4778 | EINA_VALUE_TYPE_VERSION, | ||
4779 | sizeof(unsigned long), | ||
4780 | "timestamp", | ||
4781 | _eina_value_type_ulong_setup, | ||
4782 | _eina_value_type_ulong_flush, | ||
4783 | _eina_value_type_ulong_copy, | ||
4784 | _eina_value_type_ulong_compare, | ||
4785 | _eina_value_type_ulong_convert_to, | ||
4786 | NULL, /* no convert from */ | ||
4787 | _eina_value_type_ulong_vset, | ||
4788 | _eina_value_type_ulong_pset, | ||
4789 | _eina_value_type_ulong_pget | ||
4509 | } | 4790 | } |
4510 | }; | 4791 | }; |
4511 | 4792 | ||
@@ -4722,11 +5003,12 @@ eina_value_init(void) | |||
4722 | EINA_VALUE_TYPE_DOUBLE = _EINA_VALUE_TYPE_BASICS + 11; | 5003 | EINA_VALUE_TYPE_DOUBLE = _EINA_VALUE_TYPE_BASICS + 11; |
4723 | EINA_VALUE_TYPE_STRINGSHARE = _EINA_VALUE_TYPE_BASICS + 12; | 5004 | EINA_VALUE_TYPE_STRINGSHARE = _EINA_VALUE_TYPE_BASICS + 12; |
4724 | EINA_VALUE_TYPE_STRING = _EINA_VALUE_TYPE_BASICS + 13; | 5005 | EINA_VALUE_TYPE_STRING = _EINA_VALUE_TYPE_BASICS + 13; |
5006 | EINA_VALUE_TYPE_TIMESTAMP = _EINA_VALUE_TYPE_BASICS + 14; | ||
4725 | 5007 | ||
4726 | _EINA_VALUE_TYPE_BASICS_START = _EINA_VALUE_TYPE_BASICS + 0; | 5008 | _EINA_VALUE_TYPE_BASICS_START = _EINA_VALUE_TYPE_BASICS + 0; |
4727 | _EINA_VALUE_TYPE_BASICS_END = _EINA_VALUE_TYPE_BASICS + 13; | 5009 | _EINA_VALUE_TYPE_BASICS_END = _EINA_VALUE_TYPE_BASICS + 14; |
4728 | 5010 | ||
4729 | EINA_SAFETY_ON_FALSE_RETURN_VAL((sizeof(_EINA_VALUE_TYPE_BASICS)/sizeof(_EINA_VALUE_TYPE_BASICS[0])) == 14, EINA_FALSE); | 5011 | EINA_SAFETY_ON_FALSE_RETURN_VAL((sizeof(_EINA_VALUE_TYPE_BASICS)/sizeof(_EINA_VALUE_TYPE_BASICS[0])) == 15, EINA_FALSE); |
4730 | 5012 | ||
4731 | 5013 | ||
4732 | EINA_VALUE_TYPE_ARRAY = &_EINA_VALUE_TYPE_ARRAY; | 5014 | EINA_VALUE_TYPE_ARRAY = &_EINA_VALUE_TYPE_ARRAY; |
@@ -4735,6 +5017,7 @@ eina_value_init(void) | |||
4735 | EINA_VALUE_TYPE_TIMEVAL = &_EINA_VALUE_TYPE_TIMEVAL; | 5017 | EINA_VALUE_TYPE_TIMEVAL = &_EINA_VALUE_TYPE_TIMEVAL; |
4736 | EINA_VALUE_TYPE_BLOB = &_EINA_VALUE_TYPE_BLOB; | 5018 | EINA_VALUE_TYPE_BLOB = &_EINA_VALUE_TYPE_BLOB; |
4737 | EINA_VALUE_TYPE_STRUCT = &_EINA_VALUE_TYPE_STRUCT; | 5019 | EINA_VALUE_TYPE_STRUCT = &_EINA_VALUE_TYPE_STRUCT; |
5020 | EINA_VALUE_TYPE_MODEL = &_EINA_VALUE_TYPE_MODEL; | ||
4738 | 5021 | ||
4739 | EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC; | 5022 | EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC; |
4740 | 5023 | ||
@@ -4800,6 +5083,7 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR = NULL; | |||
4800 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL; | 5083 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL; |
4801 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL; | 5084 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL; |
4802 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL; | 5085 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL; |
5086 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP = NULL; | ||
4803 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL; | 5087 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL; |
4804 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL; | 5088 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL; |
4805 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL; | 5089 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL; |
@@ -4816,6 +5100,7 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL; | |||
4816 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL; | 5100 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL; |
4817 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL; | 5101 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL; |
4818 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL; | 5102 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL; |
5103 | EAPI const Eina_Value_Type *EINA_VALUE_TYPE_MODEL = NULL; | ||
4819 | 5104 | ||
4820 | EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL; | 5105 | EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL; |
4821 | 5106 | ||
diff --git a/libraries/eina/src/modules/Makefile.in b/libraries/eina/src/modules/Makefile.in index 1ee8386..62d4a09 100644 --- a/libraries/eina/src/modules/Makefile.in +++ b/libraries/eina/src/modules/Makefile.in | |||
@@ -36,20 +36,24 @@ host_triplet = @host@ | |||
36 | subdir = src/modules | 36 | subdir = src/modules |
37 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 37 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
38 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 38 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
39 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 39 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
40 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 40 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
41 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 41 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
42 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 42 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
43 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 43 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
44 | $(top_srcdir)/m4/efl_examples.m4 \ | 44 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
45 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 45 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
46 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 46 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
47 | $(top_srcdir)/m4/efl_threads.m4 \ | 47 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
48 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 48 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
49 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 49 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
50 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 50 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
51 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 51 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
52 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 52 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
53 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
54 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
55 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
56 | $(top_srcdir)/configure.ac | ||
53 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 57 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
54 | $(ACLOCAL_M4) | 58 | $(ACLOCAL_M4) |
55 | mkinstalldirs = $(install_sh) -d | 59 | mkinstalldirs = $(install_sh) -d |
@@ -150,13 +154,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
150 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 154 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
151 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 155 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
152 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 156 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
157 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
153 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 158 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
154 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 159 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
155 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 160 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
156 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 161 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
157 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 162 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
158 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 163 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
159 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
160 | EINA_LIBS = @EINA_LIBS@ | 164 | EINA_LIBS = @EINA_LIBS@ |
161 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 165 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
162 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 166 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -166,6 +170,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
166 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 170 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
167 | EVIL_LIBS = @EVIL_LIBS@ | 171 | EVIL_LIBS = @EVIL_LIBS@ |
168 | EXEEXT = @EXEEXT@ | 172 | EXEEXT = @EXEEXT@ |
173 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
174 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
169 | FGREP = @FGREP@ | 175 | FGREP = @FGREP@ |
170 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 176 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
171 | GLIB_LIBS = @GLIB_LIBS@ | 177 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -201,6 +207,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
201 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 207 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
202 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 208 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
203 | PKG_CONFIG = @PKG_CONFIG@ | 209 | PKG_CONFIG = @PKG_CONFIG@ |
210 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
211 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
204 | RANLIB = @RANLIB@ | 212 | RANLIB = @RANLIB@ |
205 | SED = @SED@ | 213 | SED = @SED@ |
206 | SET_MAKE = @SET_MAKE@ | 214 | SET_MAKE = @SET_MAKE@ |
diff --git a/libraries/eina/src/modules/mp/Makefile.in b/libraries/eina/src/modules/mp/Makefile.in index d3a6dd9..7283b72 100644 --- a/libraries/eina/src/modules/mp/Makefile.in +++ b/libraries/eina/src/modules/mp/Makefile.in | |||
@@ -43,20 +43,24 @@ host_triplet = @host@ | |||
43 | subdir = src/modules/mp | 43 | subdir = src/modules/mp |
44 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 44 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
45 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 45 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
46 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 46 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
47 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 47 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
48 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 48 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
49 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 49 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
50 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 50 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
51 | $(top_srcdir)/m4/efl_examples.m4 \ | 51 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
52 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 52 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
53 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 53 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
54 | $(top_srcdir)/m4/efl_threads.m4 \ | 54 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
55 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 55 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
56 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 56 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
57 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 57 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
58 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 58 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
59 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 59 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
60 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
61 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
62 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
63 | $(top_srcdir)/configure.ac | ||
60 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 64 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
61 | $(ACLOCAL_M4) | 65 | $(ACLOCAL_M4) |
62 | mkinstalldirs = $(install_sh) -d | 66 | mkinstalldirs = $(install_sh) -d |
@@ -158,13 +162,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
158 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 162 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
159 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 163 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
160 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 164 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
165 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
161 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 166 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
162 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 167 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
163 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 168 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
164 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 169 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
165 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 170 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
166 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 171 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
167 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
168 | EINA_LIBS = @EINA_LIBS@ | 172 | EINA_LIBS = @EINA_LIBS@ |
169 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 173 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
170 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 174 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -174,6 +178,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
174 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 178 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
175 | EVIL_LIBS = @EVIL_LIBS@ | 179 | EVIL_LIBS = @EVIL_LIBS@ |
176 | EXEEXT = @EXEEXT@ | 180 | EXEEXT = @EXEEXT@ |
181 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
182 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
177 | FGREP = @FGREP@ | 183 | FGREP = @FGREP@ |
178 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 184 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
179 | GLIB_LIBS = @GLIB_LIBS@ | 185 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -209,6 +215,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
209 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 215 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
210 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 216 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
211 | PKG_CONFIG = @PKG_CONFIG@ | 217 | PKG_CONFIG = @PKG_CONFIG@ |
218 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
219 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
212 | RANLIB = @RANLIB@ | 220 | RANLIB = @RANLIB@ |
213 | SED = @SED@ | 221 | SED = @SED@ |
214 | SET_MAKE = @SET_MAKE@ | 222 | SET_MAKE = @SET_MAKE@ |
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.am b/libraries/eina/src/modules/mp/buddy/Makefile.am index c699c9d..c0a6cd7 100644 --- a/libraries/eina/src/modules/mp/buddy/Makefile.am +++ b/libraries/eina/src/modules/mp/buddy/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EFL_EINA_BUILD@ | 9 | @EFL_EINA_BUILD@ |
11 | 10 | ||
12 | controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) | 11 | controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.in b/libraries/eina/src/modules/mp/buddy/Makefile.in index 5619b2c..449c511 100644 --- a/libraries/eina/src/modules/mp/buddy/Makefile.in +++ b/libraries/eina/src/modules/mp/buddy/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/buddy | 37 | subdir = src/modules/mp/buddy |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EFL_EINA_BUILD@ | 308 | @EFL_EINA_BUILD@ |
302 | 309 | ||
303 | controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) | 310 | controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.am b/libraries/eina/src/modules/mp/chained_pool/Makefile.am index 815bab7..42d0d7e 100644 --- a/libraries/eina/src/modules/mp/chained_pool/Makefile.am +++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EFL_EINA_BUILD@ \ | 9 | @EFL_EINA_BUILD@ \ |
11 | @VALGRIND_CFLAGS@ | 10 | @VALGRIND_CFLAGS@ |
12 | 11 | ||
diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.in b/libraries/eina/src/modules/mp/chained_pool/Makefile.in index 03b639f..78299a4 100644 --- a/libraries/eina/src/modules/mp/chained_pool/Makefile.in +++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/chained_pool | 37 | subdir = src/modules/mp/chained_pool |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EFL_EINA_BUILD@ \ | 308 | @EFL_EINA_BUILD@ \ |
302 | @VALGRIND_CFLAGS@ | 309 | @VALGRIND_CFLAGS@ |
303 | 310 | ||
diff --git a/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c index 020d0ad..e56df4c 100644 --- a/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c +++ b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c | |||
@@ -52,7 +52,7 @@ | |||
52 | #include "eina_private.h" | 52 | #include "eina_private.h" |
53 | 53 | ||
54 | #ifndef NVALGRIND | 54 | #ifndef NVALGRIND |
55 | # include <valgrind/memcheck.h> | 55 | # include <memcheck.h> |
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | #if defined DEBUG || defined EINA_DEBUG_MALLOC | 58 | #if defined DEBUG || defined EINA_DEBUG_MALLOC |
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am index 4a27b3e..242b446 100644 --- a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am +++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EMEMOA_CFLAGS@ \ | 9 | @EMEMOA_CFLAGS@ \ |
11 | @EFL_EINA_BUILD@ | 10 | @EFL_EINA_BUILD@ |
12 | 11 | ||
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in index ccc4f1a..d16d123 100644 --- a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in +++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/ememoa_fixed | 37 | subdir = src/modules/mp/ememoa_fixed |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EMEMOA_CFLAGS@ \ | 308 | @EMEMOA_CFLAGS@ \ |
302 | @EFL_EINA_BUILD@ | 309 | @EFL_EINA_BUILD@ |
303 | 310 | ||
diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am index 2814e31..249541a 100644 --- a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am +++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EMEMOA_CFLAGS@ \ | 9 | @EMEMOA_CFLAGS@ \ |
11 | @EFL_EINA_BUILD@ | 10 | @EFL_EINA_BUILD@ |
12 | 11 | ||
diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in index 8b0ec6e..18a43a5 100644 --- a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in +++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/ememoa_unknown | 37 | subdir = src/modules/mp/ememoa_unknown |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EMEMOA_CFLAGS@ \ | 308 | @EMEMOA_CFLAGS@ \ |
302 | @EFL_EINA_BUILD@ | 309 | @EFL_EINA_BUILD@ |
303 | 310 | ||
diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am index caf239e..1f2527b 100644 --- a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am +++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EFL_EINA_BUILD@ | 9 | @EFL_EINA_BUILD@ |
11 | 10 | ||
12 | controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) | 11 | controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in index 337f820..2a6b782 100644 --- a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in +++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/fixed_bitmap | 37 | subdir = src/modules/mp/fixed_bitmap |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EFL_EINA_BUILD@ | 308 | @EFL_EINA_BUILD@ |
302 | 309 | ||
303 | controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) | 310 | controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.am b/libraries/eina/src/modules/mp/one_big/Makefile.am index 8ca1a62..35069a2 100644 --- a/libraries/eina/src/modules/mp/one_big/Makefile.am +++ b/libraries/eina/src/modules/mp/one_big/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EFL_EINA_BUILD@ \ | 9 | @EFL_EINA_BUILD@ \ |
11 | @VALGRIND_CFLAGS@ | 10 | @VALGRIND_CFLAGS@ |
12 | 11 | ||
diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.in b/libraries/eina/src/modules/mp/one_big/Makefile.in index c8560c9..4a2c229 100644 --- a/libraries/eina/src/modules/mp/one_big/Makefile.in +++ b/libraries/eina/src/modules/mp/one_big/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/one_big | 37 | subdir = src/modules/mp/one_big |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EFL_EINA_BUILD@ \ | 308 | @EFL_EINA_BUILD@ \ |
302 | @VALGRIND_CFLAGS@ | 309 | @VALGRIND_CFLAGS@ |
303 | 310 | ||
diff --git a/libraries/eina/src/modules/mp/one_big/eina_one_big.c b/libraries/eina/src/modules/mp/one_big/eina_one_big.c index dadec65..1159378 100644 --- a/libraries/eina/src/modules/mp/one_big/eina_one_big.c +++ b/libraries/eina/src/modules/mp/one_big/eina_one_big.c | |||
@@ -42,7 +42,7 @@ | |||
42 | #include "eina_lock.h" | 42 | #include "eina_lock.h" |
43 | 43 | ||
44 | #ifndef NVALGRIND | 44 | #ifndef NVALGRIND |
45 | # include <valgrind/memcheck.h> | 45 | # include <memcheck.h> |
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | #include "eina_private.h" | 48 | #include "eina_private.h" |
diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.am b/libraries/eina/src/modules/mp/pass_through/Makefile.am index 8f48974..33bd58c 100644 --- a/libraries/eina/src/modules/mp/pass_through/Makefile.am +++ b/libraries/eina/src/modules/mp/pass_through/Makefile.am | |||
@@ -6,7 +6,6 @@ AM_CPPFLAGS = \ | |||
6 | -I$(top_builddir)/src/include \ | 6 | -I$(top_builddir)/src/include \ |
7 | -I$(top_srcdir)/src/lib \ | 7 | -I$(top_srcdir)/src/lib \ |
8 | -I$(top_builddir)/src/lib \ | 8 | -I$(top_builddir)/src/lib \ |
9 | @EINA_CPPFLAGS@ \ | ||
10 | @EFL_EINA_BUILD@ | 9 | @EFL_EINA_BUILD@ |
11 | 10 | ||
12 | controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) | 11 | controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.in b/libraries/eina/src/modules/mp/pass_through/Makefile.in index f5664be..5c84e6b 100644 --- a/libraries/eina/src/modules/mp/pass_through/Makefile.in +++ b/libraries/eina/src/modules/mp/pass_through/Makefile.in | |||
@@ -37,20 +37,24 @@ host_triplet = @host@ | |||
37 | subdir = src/modules/mp/pass_through | 37 | subdir = src/modules/mp/pass_through |
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 40 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
41 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 41 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
42 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 42 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
43 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 43 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
44 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 44 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
45 | $(top_srcdir)/m4/efl_examples.m4 \ | 45 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
46 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 46 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
47 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 47 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
48 | $(top_srcdir)/m4/efl_threads.m4 \ | 48 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
49 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 49 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
50 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 50 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
51 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 51 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
52 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 52 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
53 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 53 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
54 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
55 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
56 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
57 | $(top_srcdir)/configure.ac | ||
54 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 58 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
55 | $(ACLOCAL_M4) | 59 | $(ACLOCAL_M4) |
56 | mkinstalldirs = $(install_sh) -d | 60 | mkinstalldirs = $(install_sh) -d |
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
166 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 170 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
167 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 171 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
168 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 172 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
173 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
169 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 174 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
170 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 175 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
171 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 176 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
172 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 177 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
173 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 178 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
174 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 179 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
175 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
176 | EINA_LIBS = @EINA_LIBS@ | 180 | EINA_LIBS = @EINA_LIBS@ |
177 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 181 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
178 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 182 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
182 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 186 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
183 | EVIL_LIBS = @EVIL_LIBS@ | 187 | EVIL_LIBS = @EVIL_LIBS@ |
184 | EXEEXT = @EXEEXT@ | 188 | EXEEXT = @EXEEXT@ |
189 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
190 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
185 | FGREP = @FGREP@ | 191 | FGREP = @FGREP@ |
186 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 192 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
187 | GLIB_LIBS = @GLIB_LIBS@ | 193 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
217 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 223 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
218 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 224 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
219 | PKG_CONFIG = @PKG_CONFIG@ | 225 | PKG_CONFIG = @PKG_CONFIG@ |
226 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
227 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
220 | RANLIB = @RANLIB@ | 228 | RANLIB = @RANLIB@ |
221 | SED = @SED@ | 229 | SED = @SED@ |
222 | SET_MAKE = @SET_MAKE@ | 230 | SET_MAKE = @SET_MAKE@ |
@@ -297,7 +305,6 @@ AM_CPPFLAGS = \ | |||
297 | -I$(top_builddir)/src/include \ | 305 | -I$(top_builddir)/src/include \ |
298 | -I$(top_srcdir)/src/lib \ | 306 | -I$(top_srcdir)/src/lib \ |
299 | -I$(top_builddir)/src/lib \ | 307 | -I$(top_builddir)/src/lib \ |
300 | @EINA_CPPFLAGS@ \ | ||
301 | @EFL_EINA_BUILD@ | 308 | @EFL_EINA_BUILD@ |
302 | 309 | ||
303 | controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) | 310 | controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) |
diff --git a/libraries/eina/src/tests/Makefile.am b/libraries/eina/src/tests/Makefile.am index 7e05ba9..cf500f5 100644 --- a/libraries/eina/src/tests/Makefile.am +++ b/libraries/eina/src/tests/Makefile.am | |||
@@ -66,7 +66,8 @@ eina_test_strbuf.c \ | |||
66 | eina_test_str.c \ | 66 | eina_test_str.c \ |
67 | eina_test_quadtree.c \ | 67 | eina_test_quadtree.c \ |
68 | eina_test_simple_xml_parser.c \ | 68 | eina_test_simple_xml_parser.c \ |
69 | eina_test_value.c | 69 | eina_test_value.c \ |
70 | eina_test_model.c | ||
70 | 71 | ||
71 | eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm | 72 | eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm |
72 | 73 | ||
diff --git a/libraries/eina/src/tests/Makefile.in b/libraries/eina/src/tests/Makefile.in index c56211a..81e58ba 100644 --- a/libraries/eina/src/tests/Makefile.in +++ b/libraries/eina/src/tests/Makefile.in | |||
@@ -43,20 +43,24 @@ host_triplet = @host@ | |||
43 | subdir = src/tests | 43 | subdir = src/tests |
44 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | 44 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in |
45 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | 45 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
46 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | 46 | am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \ |
47 | $(top_srcdir)/m4/efl_benchmark.m4 \ | 47 | $(top_srcdir)/m4/eina/eina_check.m4 \ |
48 | $(top_srcdir)/m4/efl_compiler_flag.m4 \ | 48 | $(top_srcdir)/m4/common/efl_attribute.m4 \ |
49 | $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ | 49 | $(top_srcdir)/m4/common/efl_benchmark.m4 \ |
50 | $(top_srcdir)/m4/efl_doxygen.m4 \ | 50 | $(top_srcdir)/m4/common/efl_compiler_flag.m4 \ |
51 | $(top_srcdir)/m4/efl_examples.m4 \ | 51 | $(top_srcdir)/m4/common/efl_coverage.m4 \ |
52 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | 52 | $(top_srcdir)/m4/common/efl_cpu.m4 \ |
53 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | 53 | $(top_srcdir)/m4/common/efl_doxygen.m4 \ |
54 | $(top_srcdir)/m4/efl_threads.m4 \ | 54 | $(top_srcdir)/m4/common/efl_examples.m4 \ |
55 | $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ | 55 | $(top_srcdir)/m4/common/efl_fnmatch.m4 \ |
56 | $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ | 56 | $(top_srcdir)/m4/common/efl_path_max.m4 \ |
57 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | 57 | $(top_srcdir)/m4/common/efl_tests.m4 \ |
58 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | 58 | $(top_srcdir)/m4/common/efl_threads.m4 \ |
59 | $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac | 59 | $(top_srcdir)/m4/common/efl_voltron.m4 \ |
60 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||
61 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||
62 | $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ | ||
63 | $(top_srcdir)/configure.ac | ||
60 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | 64 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ |
61 | $(ACLOCAL_M4) | 65 | $(ACLOCAL_M4) |
62 | mkinstalldirs = $(install_sh) -d | 66 | mkinstalldirs = $(install_sh) -d |
@@ -159,7 +163,8 @@ am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \ | |||
159 | eina_test_rectangle.c eina_test_list.c \ | 163 | eina_test_rectangle.c eina_test_list.c \ |
160 | eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \ | 164 | eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \ |
161 | eina_test_str.c eina_test_quadtree.c \ | 165 | eina_test_str.c eina_test_quadtree.c \ |
162 | eina_test_simple_xml_parser.c eina_test_value.c | 166 | eina_test_simple_xml_parser.c eina_test_value.c \ |
167 | eina_test_model.c | ||
163 | @EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \ | 168 | @EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \ |
164 | @EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \ | 169 | @EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \ |
165 | @EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \ | 170 | @EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \ |
@@ -195,7 +200,8 @@ am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \ | |||
195 | @EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \ | 200 | @EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \ |
196 | @EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \ | 201 | @EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \ |
197 | @EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) \ | 202 | @EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) \ |
198 | @EFL_ENABLE_TESTS_TRUE@ eina_test_value.$(OBJEXT) | 203 | @EFL_ENABLE_TESTS_TRUE@ eina_test_value.$(OBJEXT) \ |
204 | @EFL_ENABLE_TESTS_TRUE@ eina_test_model.$(OBJEXT) | ||
199 | eina_suite_OBJECTS = $(am_eina_suite_OBJECTS) | 205 | eina_suite_OBJECTS = $(am_eina_suite_OBJECTS) |
200 | @EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \ | 206 | @EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \ |
201 | @EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la | 207 | @EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la |
@@ -296,13 +302,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ | |||
296 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ | 302 | EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ |
297 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ | 303 | EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ |
298 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ | 304 | EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ |
305 | EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@ | ||
299 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ | 306 | EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ |
300 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ | 307 | EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ |
301 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ | 308 | EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ |
302 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ | 309 | EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ |
303 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ | 310 | EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ |
304 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ | 311 | EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ |
305 | EINA_CPPFLAGS = @EINA_CPPFLAGS@ | ||
306 | EINA_LIBS = @EINA_LIBS@ | 312 | EINA_LIBS = @EINA_LIBS@ |
307 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ | 313 | EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ |
308 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ | 314 | EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ |
@@ -312,6 +318,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@ | |||
312 | EVIL_CFLAGS = @EVIL_CFLAGS@ | 318 | EVIL_CFLAGS = @EVIL_CFLAGS@ |
313 | EVIL_LIBS = @EVIL_LIBS@ | 319 | EVIL_LIBS = @EVIL_LIBS@ |
314 | EXEEXT = @EXEEXT@ | 320 | EXEEXT = @EXEEXT@ |
321 | EXOTIC_CFLAGS = @EXOTIC_CFLAGS@ | ||
322 | EXOTIC_LIBS = @EXOTIC_LIBS@ | ||
315 | FGREP = @FGREP@ | 323 | FGREP = @FGREP@ |
316 | GLIB_CFLAGS = @GLIB_CFLAGS@ | 324 | GLIB_CFLAGS = @GLIB_CFLAGS@ |
317 | GLIB_LIBS = @GLIB_LIBS@ | 325 | GLIB_LIBS = @GLIB_LIBS@ |
@@ -347,6 +355,8 @@ PACKAGE_URL = @PACKAGE_URL@ | |||
347 | PACKAGE_VERSION = @PACKAGE_VERSION@ | 355 | PACKAGE_VERSION = @PACKAGE_VERSION@ |
348 | PATH_SEPARATOR = @PATH_SEPARATOR@ | 356 | PATH_SEPARATOR = @PATH_SEPARATOR@ |
349 | PKG_CONFIG = @PKG_CONFIG@ | 357 | PKG_CONFIG = @PKG_CONFIG@ |
358 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
359 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
350 | RANLIB = @RANLIB@ | 360 | RANLIB = @RANLIB@ |
351 | SED = @SED@ | 361 | SED = @SED@ |
352 | SET_MAKE = @SET_MAKE@ | 362 | SET_MAKE = @SET_MAKE@ |
@@ -465,7 +475,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/include \ | |||
465 | @EFL_ENABLE_TESTS_TRUE@eina_test_str.c \ | 475 | @EFL_ENABLE_TESTS_TRUE@eina_test_str.c \ |
466 | @EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \ | 476 | @EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \ |
467 | @EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c \ | 477 | @EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c \ |
468 | @EFL_ENABLE_TESTS_TRUE@eina_test_value.c | 478 | @EFL_ENABLE_TESTS_TRUE@eina_test_value.c \ |
479 | @EFL_ENABLE_TESTS_TRUE@eina_test_model.c | ||
469 | 480 | ||
470 | @EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm | 481 | @EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm |
471 | @EFL_ENABLE_TESTS_TRUE@cxx_compile_test_SOURCES = cxx_compile_test.cxx | 482 | @EFL_ENABLE_TESTS_TRUE@cxx_compile_test_SOURCES = cxx_compile_test.cxx |
@@ -704,6 +715,7 @@ distclean-compile: | |||
704 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@ | 715 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@ |
705 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@ | 716 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@ |
706 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@ | 717 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@ |
718 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_model.Po@am__quote@ | ||
707 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@ | 719 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@ |
708 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@ | 720 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@ |
709 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@ | 721 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@ |
diff --git a/libraries/eina/src/tests/eina_suite.c b/libraries/eina/src/tests/eina_suite.c index 648a717..b34d016 100644 --- a/libraries/eina/src/tests/eina_suite.c +++ b/libraries/eina/src/tests/eina_suite.c | |||
@@ -68,6 +68,7 @@ static const Eina_Test_Case etc[] = { | |||
68 | { "Sched", eina_test_sched }, | 68 | { "Sched", eina_test_sched }, |
69 | { "Simple Xml Parser", eina_test_simple_xml_parser}, | 69 | { "Simple Xml Parser", eina_test_simple_xml_parser}, |
70 | { "Value", eina_test_value }, | 70 | { "Value", eina_test_value }, |
71 | { "Model", eina_test_model }, | ||
71 | { NULL, NULL } | 72 | { NULL, NULL } |
72 | }; | 73 | }; |
73 | 74 | ||
@@ -137,6 +138,8 @@ static void _mempool_init(void) | |||
137 | static void _mempool_shutdown(void) | 138 | static void _mempool_shutdown(void) |
138 | { | 139 | { |
139 | eina_module_list_free(_modules); | 140 | eina_module_list_free(_modules); |
141 | if (_modules) | ||
142 | eina_array_free(_modules); | ||
140 | /* TODO delete the list */ | 143 | /* TODO delete the list */ |
141 | eina_shutdown(); | 144 | eina_shutdown(); |
142 | } | 145 | } |
diff --git a/libraries/eina/src/tests/eina_suite.h b/libraries/eina/src/tests/eina_suite.h index 6eaaec7..d399298 100644 --- a/libraries/eina/src/tests/eina_suite.h +++ b/libraries/eina/src/tests/eina_suite.h | |||
@@ -56,5 +56,6 @@ void eina_test_fp(TCase *tc); | |||
56 | void eina_test_sched(TCase *tc); | 56 | void eina_test_sched(TCase *tc); |
57 | void eina_test_simple_xml_parser(TCase *tc); | 57 | void eina_test_simple_xml_parser(TCase *tc); |
58 | void eina_test_value(TCase *tc); | 58 | void eina_test_value(TCase *tc); |
59 | void eina_test_model(TCase *tc); | ||
59 | 60 | ||
60 | #endif /* EINA_SUITE_H_ */ | 61 | #endif /* EINA_SUITE_H_ */ |
diff --git a/libraries/eina/src/tests/eina_test_clist.c b/libraries/eina/src/tests/eina_test_clist.c index 901c0e8..115afc2 100644 --- a/libraries/eina/src/tests/eina_test_clist.c +++ b/libraries/eina/src/tests/eina_test_clist.c | |||
@@ -6,7 +6,7 @@ | |||
6 | #include <string.h> | 6 | #include <string.h> |
7 | #include <assert.h> | 7 | #include <assert.h> |
8 | 8 | ||
9 | #include <Eina.h> | 9 | #include "Eina.h" |
10 | #include "eina_suite.h" | 10 | #include "eina_suite.h" |
11 | 11 | ||
12 | Eina_Clist string_list = EINA_CLIST_INIT(string_list); | 12 | Eina_Clist string_list = EINA_CLIST_INIT(string_list); |
diff --git a/libraries/eina/src/tests/eina_test_counter.c b/libraries/eina/src/tests/eina_test_counter.c index 2a3f30d..4d956fd 100644 --- a/libraries/eina/src/tests/eina_test_counter.c +++ b/libraries/eina/src/tests/eina_test_counter.c | |||
@@ -27,6 +27,43 @@ | |||
27 | #include "Eina.h" | 27 | #include "Eina.h" |
28 | #include "eina_safety_checks.h" | 28 | #include "eina_safety_checks.h" |
29 | 29 | ||
30 | #ifdef EINA_SAFETY_CHECKS | ||
31 | struct log_ctx { | ||
32 | const char *msg; | ||
33 | const char *fnc; | ||
34 | Eina_Bool did; | ||
35 | }; | ||
36 | |||
37 | /* tests should not output on success, just uncomment this for debugging */ | ||
38 | //#define SHOW_LOG 1 | ||
39 | |||
40 | static void | ||
41 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
42 | { | ||
43 | struct log_ctx *ctx = data; | ||
44 | va_list cp_args; | ||
45 | const char *str; | ||
46 | |||
47 | va_copy(cp_args, args); | ||
48 | str = va_arg(cp_args, const char *); | ||
49 | va_end(cp_args); | ||
50 | |||
51 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
52 | ck_assert_str_eq(fmt, "%s"); | ||
53 | ck_assert_str_eq(ctx->msg, str); | ||
54 | ck_assert_str_eq(ctx->fnc, fnc); | ||
55 | ctx->did = EINA_TRUE; | ||
56 | |||
57 | #ifdef SHOW_LOG | ||
58 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
59 | #else | ||
60 | (void)d; | ||
61 | (void)file; | ||
62 | (void)line; | ||
63 | #endif | ||
64 | } | ||
65 | #endif | ||
66 | |||
30 | START_TEST(eina_counter_simple) | 67 | START_TEST(eina_counter_simple) |
31 | { | 68 | { |
32 | Eina_Counter *cnt; | 69 | Eina_Counter *cnt; |
@@ -61,6 +98,7 @@ START_TEST(eina_counter_simple) | |||
61 | dump = eina_counter_dump(cnt); | 98 | dump = eina_counter_dump(cnt); |
62 | fail_if(!dump); | 99 | fail_if(!dump); |
63 | 100 | ||
101 | /* TODO: parse dump and check if it's right */ | ||
64 | fprintf(stderr, "%s", dump); | 102 | fprintf(stderr, "%s", dump); |
65 | 103 | ||
66 | free(dump); | 104 | free(dump); |
@@ -86,13 +124,65 @@ START_TEST(eina_counter_break) | |||
86 | 124 | ||
87 | #ifdef EINA_SAFETY_CHECKS | 125 | #ifdef EINA_SAFETY_CHECKS |
88 | { | 126 | { |
127 | struct log_ctx ctx; | ||
89 | char *dump; | 128 | char *dump; |
90 | 129 | ||
130 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
131 | ctx.msg = _msg; \ | ||
132 | ctx.fnc = fn; \ | ||
133 | ctx.did = EINA_FALSE | ||
134 | |||
135 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
136 | |||
137 | #ifdef SHOW_LOG | ||
91 | fprintf(stderr, "you should have a safety check failure below:\n"); | 138 | fprintf(stderr, "you should have a safety check failure below:\n"); |
139 | #endif | ||
140 | TEST_MAGIC_SAFETY("eina_counter_new", | ||
141 | "safety check failed: name == NULL"); | ||
142 | cnt = eina_counter_new(NULL); | ||
143 | fail_if(cnt); | ||
144 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
145 | fail_unless(ctx.did); | ||
146 | |||
147 | #ifdef SHOW_LOG | ||
148 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
149 | #endif | ||
150 | TEST_MAGIC_SAFETY("eina_counter_free", | ||
151 | "safety check failed: counter == NULL"); | ||
152 | eina_counter_free(NULL); | ||
153 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
154 | fail_unless(ctx.did); | ||
155 | |||
156 | #ifdef SHOW_LOG | ||
157 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
158 | #endif | ||
159 | TEST_MAGIC_SAFETY("eina_counter_start", | ||
160 | "safety check failed: counter == NULL"); | ||
161 | eina_counter_start(NULL); | ||
162 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
163 | fail_unless(ctx.did); | ||
164 | |||
165 | #ifdef SHOW_LOG | ||
166 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
167 | #endif | ||
168 | TEST_MAGIC_SAFETY("eina_counter_stop", | ||
169 | "safety check failed: counter == NULL"); | ||
170 | eina_counter_stop(NULL, 0); | ||
171 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
172 | fail_unless(ctx.did); | ||
173 | |||
174 | |||
175 | #ifdef SHOW_LOG | ||
176 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
177 | #endif | ||
178 | TEST_MAGIC_SAFETY("eina_counter_dump", | ||
179 | "safety check failed: counter == NULL"); | ||
92 | dump = eina_counter_dump(NULL); | 180 | dump = eina_counter_dump(NULL); |
93 | fail_if(dump); | 181 | fail_if(dump); |
94 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 182 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
95 | free(dump); | 183 | fail_unless(ctx.did); |
184 | |||
185 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
96 | } | 186 | } |
97 | #endif | 187 | #endif |
98 | 188 | ||
diff --git a/libraries/eina/src/tests/eina_test_error.c b/libraries/eina/src/tests/eina_test_error.c index 506f406..57f6950 100644 --- a/libraries/eina/src/tests/eina_test_error.c +++ b/libraries/eina/src/tests/eina_test_error.c | |||
@@ -33,6 +33,41 @@ | |||
33 | 33 | ||
34 | #define TEST_TEXT "The big test\n" | 34 | #define TEST_TEXT "The big test\n" |
35 | 35 | ||
36 | struct log_ctx { | ||
37 | const char *msg; | ||
38 | const char *fnc; | ||
39 | Eina_Bool did; | ||
40 | }; | ||
41 | |||
42 | /* tests should not output on success, just uncomment this for debugging */ | ||
43 | //#define SHOW_LOG 1 | ||
44 | |||
45 | static void | ||
46 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
47 | { | ||
48 | struct log_ctx *ctx = data; | ||
49 | va_list cp_args; | ||
50 | const char *str; | ||
51 | |||
52 | va_copy(cp_args, args); | ||
53 | str = va_arg(cp_args, const char *); | ||
54 | va_end(cp_args); | ||
55 | |||
56 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
57 | ck_assert_str_eq(fmt, "%s"); | ||
58 | ck_assert_str_eq(ctx->msg, str); | ||
59 | ck_assert_str_eq(ctx->fnc, fnc); | ||
60 | ctx->did = EINA_TRUE; | ||
61 | |||
62 | #ifdef SHOW_LOG | ||
63 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
64 | #else | ||
65 | (void)d; | ||
66 | (void)file; | ||
67 | (void)line; | ||
68 | #endif | ||
69 | } | ||
70 | |||
36 | START_TEST(eina_error_errno) | 71 | START_TEST(eina_error_errno) |
37 | { | 72 | { |
38 | int test; | 73 | int test; |
@@ -52,8 +87,157 @@ START_TEST(eina_error_errno) | |||
52 | } | 87 | } |
53 | END_TEST | 88 | END_TEST |
54 | 89 | ||
90 | START_TEST(eina_error_test_find) | ||
91 | { | ||
92 | int test, r; | ||
93 | const char *str; | ||
94 | |||
95 | eina_init(); | ||
96 | |||
97 | test = eina_error_msg_register(TEST_TEXT); | ||
98 | ck_assert_int_ne(test, 0); | ||
99 | |||
100 | str = eina_error_msg_get(test); | ||
101 | fail_unless(str != NULL); | ||
102 | ck_assert_str_eq(str, TEST_TEXT); | ||
103 | |||
104 | eina_error_set(test); | ||
105 | fail_if(eina_error_get() != test); | ||
106 | |||
107 | r = eina_error_find(TEST_TEXT); | ||
108 | ck_assert_int_eq(r, test); | ||
109 | |||
110 | eina_shutdown(); | ||
111 | } | ||
112 | END_TEST | ||
113 | |||
114 | START_TEST(eina_error_test_modify) | ||
115 | { | ||
116 | int test, r; | ||
117 | const char *str, smsg[] = "Do not copy this string"; | ||
118 | |||
119 | eina_init(); | ||
120 | |||
121 | test = eina_error_msg_register("Some Test Error"); | ||
122 | ck_assert_int_ne(test, 0); | ||
123 | |||
124 | str = eina_error_msg_get(test); | ||
125 | fail_unless(str != NULL); | ||
126 | ck_assert_str_eq(str, "Some Test Error"); | ||
127 | |||
128 | eina_error_set(test); | ||
129 | fail_if(eina_error_get() != test); | ||
130 | |||
131 | fail_unless(eina_error_msg_modify(test, "ABCDE")); | ||
132 | |||
133 | r = eina_error_find("ABCDE"); | ||
134 | ck_assert_int_eq(r, test); | ||
135 | |||
136 | test = eina_error_msg_static_register(smsg); | ||
137 | ck_assert_int_ne(test, 0); | ||
138 | |||
139 | str = eina_error_msg_get(test); | ||
140 | fail_unless(str != NULL); | ||
141 | fail_unless(str == smsg); | ||
142 | |||
143 | fail_unless(eina_error_msg_modify(test, "Change that!")); | ||
144 | r = eina_error_find("Change that!"); | ||
145 | ck_assert_int_eq(r, test); | ||
146 | |||
147 | eina_shutdown(); | ||
148 | } | ||
149 | END_TEST | ||
150 | |||
151 | START_TEST(eina_error_test_lots) | ||
152 | { | ||
153 | char buf[64]; | ||
154 | int codes[512]; | ||
155 | unsigned int i; | ||
156 | |||
157 | eina_init(); | ||
158 | |||
159 | for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++) | ||
160 | { | ||
161 | snprintf(buf, sizeof(buf), "myerr-%d", i); | ||
162 | codes[i] = eina_error_msg_register(buf); | ||
163 | ck_assert_int_ne(codes[i], 0); | ||
164 | } | ||
165 | |||
166 | for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++) | ||
167 | { | ||
168 | int found; | ||
169 | |||
170 | snprintf(buf, sizeof(buf), "myerr-%d", i); | ||
171 | |||
172 | found = eina_error_find(buf); | ||
173 | ck_assert_int_eq(codes[i], found); | ||
174 | } | ||
175 | |||
176 | eina_shutdown(); | ||
177 | } | ||
178 | END_TEST | ||
179 | |||
180 | #ifdef EINA_SAFETY_CHECKS | ||
181 | START_TEST(eina_error_test_failures) | ||
182 | { | ||
183 | struct log_ctx ctx; | ||
184 | |||
185 | eina_init(); | ||
186 | |||
187 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
188 | |||
189 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
190 | ctx.msg = _msg; \ | ||
191 | ctx.fnc = fn; \ | ||
192 | ctx.did = EINA_FALSE | ||
193 | |||
194 | TEST_MAGIC_SAFETY("eina_error_msg_register", | ||
195 | "safety check failed: msg == NULL"); | ||
196 | ck_assert_int_eq(eina_error_msg_register(NULL), 0); | ||
197 | fail_unless(ctx.did); | ||
198 | |||
199 | TEST_MAGIC_SAFETY("eina_error_msg_static_register", | ||
200 | "safety check failed: msg == NULL"); | ||
201 | ck_assert_int_eq(eina_error_msg_static_register(NULL), 0); | ||
202 | fail_unless(ctx.did); | ||
203 | |||
204 | ck_assert_int_eq(eina_error_msg_modify(0, "X"), EINA_FALSE); | ||
205 | ck_assert_int_eq(eina_error_msg_modify(4096, "X"), EINA_FALSE); | ||
206 | |||
207 | TEST_MAGIC_SAFETY("eina_error_msg_modify", | ||
208 | "safety check failed: msg == NULL"); | ||
209 | ck_assert_int_eq(eina_error_msg_modify(EINA_ERROR_OUT_OF_MEMORY, NULL), | ||
210 | EINA_FALSE); | ||
211 | fail_unless(ctx.did); | ||
212 | |||
213 | ck_assert_str_eq(eina_error_msg_get(EINA_ERROR_OUT_OF_MEMORY), | ||
214 | "Out of memory"); | ||
215 | |||
216 | TEST_MAGIC_SAFETY("eina_error_find", | ||
217 | "safety check failed: msg == NULL"); | ||
218 | ck_assert_int_eq(eina_error_find(NULL), 0); | ||
219 | fail_unless(ctx.did); | ||
220 | |||
221 | ck_assert_int_eq(eina_error_find("Non-existent Error..."), 0); | ||
222 | |||
223 | fail_if(eina_error_msg_get(0)); | ||
224 | fail_if(eina_error_msg_get(4096)); | ||
225 | |||
226 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
227 | |||
228 | eina_shutdown(); | ||
229 | } | ||
230 | END_TEST | ||
231 | #endif | ||
232 | |||
55 | void | 233 | void |
56 | eina_test_error(TCase *tc) | 234 | eina_test_error(TCase *tc) |
57 | { | 235 | { |
58 | tcase_add_test(tc, eina_error_errno); | 236 | tcase_add_test(tc, eina_error_errno); |
237 | tcase_add_test(tc, eina_error_test_find); | ||
238 | tcase_add_test(tc, eina_error_test_modify); | ||
239 | tcase_add_test(tc, eina_error_test_lots); | ||
240 | #ifdef EINA_SAFETY_CHECKS | ||
241 | tcase_add_test(tc, eina_error_test_failures); | ||
242 | #endif | ||
59 | } | 243 | } |
diff --git a/libraries/eina/src/tests/eina_test_file.c b/libraries/eina/src/tests/eina_test_file.c index 55e9976..a3ba998 100644 --- a/libraries/eina/src/tests/eina_test_file.c +++ b/libraries/eina/src/tests/eina_test_file.c | |||
@@ -28,6 +28,44 @@ | |||
28 | #include "Eina.h" | 28 | #include "Eina.h" |
29 | #include "eina_safety_checks.h" | 29 | #include "eina_safety_checks.h" |
30 | 30 | ||
31 | #ifdef EINA_SAFETY_CHECKS | ||
32 | struct log_ctx { | ||
33 | const char *msg; | ||
34 | const char *fnc; | ||
35 | Eina_Bool did; | ||
36 | }; | ||
37 | |||
38 | /* tests should not output on success, just uncomment this for debugging */ | ||
39 | //#define SHOW_LOG 1 | ||
40 | |||
41 | static void | ||
42 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
43 | { | ||
44 | struct log_ctx *ctx = data; | ||
45 | va_list cp_args; | ||
46 | const char *str; | ||
47 | |||
48 | va_copy(cp_args, args); | ||
49 | str = va_arg(cp_args, const char *); | ||
50 | va_end(cp_args); | ||
51 | |||
52 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
53 | ck_assert_str_eq(fmt, "%s"); | ||
54 | ck_assert_str_eq(ctx->msg, str); | ||
55 | ck_assert_str_eq(ctx->fnc, fnc); | ||
56 | ctx->did = EINA_TRUE; | ||
57 | |||
58 | #ifdef SHOW_LOG | ||
59 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
60 | #else | ||
61 | (void)d; | ||
62 | (void)file; | ||
63 | (void)line; | ||
64 | #endif | ||
65 | } | ||
66 | #endif | ||
67 | |||
68 | |||
31 | START_TEST(eina_file_split_simple) | 69 | START_TEST(eina_file_split_simple) |
32 | { | 70 | { |
33 | Eina_Array *ea; | 71 | Eina_Array *ea; |
@@ -35,10 +73,26 @@ START_TEST(eina_file_split_simple) | |||
35 | eina_init(); | 73 | eina_init(); |
36 | 74 | ||
37 | #ifdef EINA_SAFETY_CHECKS | 75 | #ifdef EINA_SAFETY_CHECKS |
76 | #ifdef SHOW_LOG | ||
38 | fprintf(stderr, "you should have a safety check failure below:\n"); | 77 | fprintf(stderr, "you should have a safety check failure below:\n"); |
78 | #endif | ||
79 | struct log_ctx ctx; | ||
80 | |||
81 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
82 | ctx.msg = _msg; \ | ||
83 | ctx.fnc = fn; \ | ||
84 | ctx.did = EINA_FALSE | ||
85 | |||
86 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
87 | |||
88 | TEST_MAGIC_SAFETY("eina_file_split", "safety check failed: path == NULL"); | ||
39 | ea = eina_file_split(NULL); | 89 | ea = eina_file_split(NULL); |
40 | fail_if(ea); | 90 | fail_if(ea); |
41 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 91 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
92 | fail_unless(ctx.did); | ||
93 | |||
94 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
95 | #undef TEST_MAGIC_SAFETY | ||
42 | #endif | 96 | #endif |
43 | 97 | ||
44 | #ifdef _WIN32 | 98 | #ifdef _WIN32 |
diff --git a/libraries/eina/src/tests/eina_test_inlist.c b/libraries/eina/src/tests/eina_test_inlist.c index c27f393..a8631e7 100644 --- a/libraries/eina/src/tests/eina_test_inlist.c +++ b/libraries/eina/src/tests/eina_test_inlist.c | |||
@@ -34,6 +34,43 @@ struct _Eina_Test_Inlist | |||
34 | EINA_INLIST; | 34 | EINA_INLIST; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #ifdef EINA_SAFETY_CHECKS | ||
38 | struct log_ctx { | ||
39 | const char *msg; | ||
40 | const char *fnc; | ||
41 | Eina_Bool did; | ||
42 | }; | ||
43 | |||
44 | /* tests should not output on success, just uncomment this for debugging */ | ||
45 | //#define SHOW_LOG 1 | ||
46 | |||
47 | static void | ||
48 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
49 | { | ||
50 | struct log_ctx *ctx = data; | ||
51 | va_list cp_args; | ||
52 | const char *str; | ||
53 | |||
54 | va_copy(cp_args, args); | ||
55 | str = va_arg(cp_args, const char *); | ||
56 | va_end(cp_args); | ||
57 | |||
58 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
59 | ck_assert_str_eq(fmt, "%s"); | ||
60 | ck_assert_str_eq(ctx->msg, str); | ||
61 | ck_assert_str_eq(ctx->fnc, fnc); | ||
62 | ctx->did = EINA_TRUE; | ||
63 | |||
64 | #ifdef SHOW_LOG | ||
65 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
66 | #else | ||
67 | (void)d; | ||
68 | (void)file; | ||
69 | (void)line; | ||
70 | #endif | ||
71 | } | ||
72 | #endif | ||
73 | |||
37 | static Eina_Test_Inlist * | 74 | static Eina_Test_Inlist * |
38 | _eina_test_inlist_build(int i) | 75 | _eina_test_inlist_build(int i) |
39 | { | 76 | { |
@@ -52,6 +89,10 @@ START_TEST(eina_inlist_simple) | |||
52 | Eina_Test_Inlist *tmp; | 89 | Eina_Test_Inlist *tmp; |
53 | Eina_Test_Inlist *prev; | 90 | Eina_Test_Inlist *prev; |
54 | int i = 0; | 91 | int i = 0; |
92 | #ifdef EINA_SAFETY_CHECKS | ||
93 | Eina_Inlist *bkp; | ||
94 | struct log_ctx ctx; | ||
95 | #endif | ||
55 | 96 | ||
56 | fail_if(!eina_init()); | 97 | fail_if(!eina_init()); |
57 | 98 | ||
@@ -106,16 +147,142 @@ START_TEST(eina_inlist_simple) | |||
106 | } | 147 | } |
107 | 148 | ||
108 | #ifdef EINA_SAFETY_CHECKS | 149 | #ifdef EINA_SAFETY_CHECKS |
150 | bkp = lst; | ||
151 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
152 | |||
153 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
154 | ctx.msg = _msg; \ | ||
155 | ctx.fnc = fn; \ | ||
156 | ctx.did = EINA_FALSE | ||
157 | |||
158 | #ifdef SHOW_LOG | ||
109 | fprintf(stderr, "you should have a safety check failure below:\n"); | 159 | fprintf(stderr, "you should have a safety check failure below:\n"); |
160 | #endif | ||
110 | { | 161 | { |
111 | Eina_Inlist *tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp)); | 162 | Eina_Inlist *tmp2; |
163 | |||
164 | TEST_MAGIC_SAFETY("eina_inlist_remove", | ||
165 | "safety check failed: list == NULL"); | ||
166 | |||
167 | tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp)); | ||
112 | fail_if(tmp2 != NULL); | 168 | fail_if(tmp2 != NULL); |
113 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 169 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
170 | fail_unless(ctx.did); | ||
114 | } | 171 | } |
115 | 172 | ||
116 | fprintf(stderr, "you should have a safety check failure below:\n"); | 173 | #ifdef SHOW_LOG |
174 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
175 | #endif | ||
176 | TEST_MAGIC_SAFETY("eina_inlist_remove", | ||
177 | "safety check failed: item == NULL"); | ||
117 | lst = eina_inlist_remove(lst, NULL); | 178 | lst = eina_inlist_remove(lst, NULL); |
118 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 179 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
180 | fail_unless(ctx.did); | ||
181 | |||
182 | #ifdef SHOW_LOG | ||
183 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
184 | #endif | ||
185 | TEST_MAGIC_SAFETY("eina_inlist_append", | ||
186 | "safety check failed: new_l == NULL"); | ||
187 | lst = eina_inlist_append(lst, NULL); | ||
188 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
189 | fail_unless(ctx.did); | ||
190 | |||
191 | #ifdef SHOW_LOG | ||
192 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
193 | #endif | ||
194 | TEST_MAGIC_SAFETY("eina_inlist_append_relative", | ||
195 | "safety check failed: new_l == NULL"); | ||
196 | lst = eina_inlist_append_relative(lst, NULL, NULL); | ||
197 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
198 | fail_unless(ctx.did); | ||
199 | |||
200 | #ifdef SHOW_LOG | ||
201 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
202 | #endif | ||
203 | TEST_MAGIC_SAFETY("eina_inlist_prepend", | ||
204 | "safety check failed: new_l == NULL"); | ||
205 | lst = eina_inlist_prepend(lst, NULL); | ||
206 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
207 | fail_unless(ctx.did); | ||
208 | |||
209 | #ifdef SHOW_LOG | ||
210 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
211 | #endif | ||
212 | TEST_MAGIC_SAFETY("eina_inlist_prepend_relative", | ||
213 | "safety check failed: new_l == NULL"); | ||
214 | lst = eina_inlist_prepend_relative(lst, NULL, NULL); | ||
215 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
216 | fail_unless(ctx.did); | ||
217 | |||
218 | #ifdef SHOW_LOG | ||
219 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
220 | #endif | ||
221 | TEST_MAGIC_SAFETY("eina_inlist_find", | ||
222 | "safety check failed: item == NULL"); | ||
223 | lst = eina_inlist_find(lst, NULL); | ||
224 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
225 | fail_unless(ctx.did); | ||
226 | |||
227 | #ifdef SHOW_LOG | ||
228 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
229 | #endif | ||
230 | TEST_MAGIC_SAFETY("eina_inlist_demote", | ||
231 | "safety check failed: list == NULL"); | ||
232 | lst = eina_inlist_demote(NULL, NULL); | ||
233 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
234 | fail_unless(ctx.did); | ||
235 | |||
236 | #ifdef SHOW_LOG | ||
237 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
238 | #endif | ||
239 | TEST_MAGIC_SAFETY("eina_inlist_demote", | ||
240 | "safety check failed: item == NULL"); | ||
241 | lst = eina_inlist_demote((void*)1L, NULL); | ||
242 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
243 | fail_unless(ctx.did); | ||
244 | lst = NULL; | ||
245 | |||
246 | #ifdef SHOW_LOG | ||
247 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
248 | #endif | ||
249 | TEST_MAGIC_SAFETY("eina_inlist_promote", | ||
250 | "safety check failed: list == NULL"); | ||
251 | lst = eina_inlist_promote(NULL, NULL); | ||
252 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
253 | fail_unless(ctx.did); | ||
254 | |||
255 | #ifdef SHOW_LOG | ||
256 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
257 | #endif | ||
258 | TEST_MAGIC_SAFETY("eina_inlist_promote", | ||
259 | "safety check failed: item == NULL"); | ||
260 | lst = eina_inlist_promote((void*)1L, NULL); | ||
261 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
262 | fail_unless(ctx.did); | ||
263 | lst = NULL; | ||
264 | |||
265 | #ifdef SHOW_LOG | ||
266 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
267 | #endif | ||
268 | TEST_MAGIC_SAFETY("eina_inlist_sorted_insert", | ||
269 | "safety check failed: item == NULL"); | ||
270 | lst = eina_inlist_sorted_insert(NULL, NULL, NULL); | ||
271 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
272 | fail_unless(ctx.did); | ||
273 | |||
274 | #ifdef SHOW_LOG | ||
275 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
276 | #endif | ||
277 | TEST_MAGIC_SAFETY("eina_inlist_sorted_insert", | ||
278 | "safety check failed: func == NULL"); | ||
279 | lst = eina_inlist_sorted_insert(NULL, (void*)1L, NULL); | ||
280 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | ||
281 | fail_unless(ctx.did); | ||
282 | lst = NULL; | ||
283 | |||
284 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
285 | lst = bkp; | ||
119 | #endif | 286 | #endif |
120 | 287 | ||
121 | tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); | 288 | tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); |
diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c index 6e08847..ce70d03 100644 --- a/libraries/eina/src/tests/eina_test_list.c +++ b/libraries/eina/src/tests/eina_test_list.c | |||
@@ -338,10 +338,50 @@ START_TEST(eina_test_sorted_insert) | |||
338 | } | 338 | } |
339 | END_TEST | 339 | END_TEST |
340 | 340 | ||
341 | START_TEST(eina_test_list_split) | ||
342 | { | ||
343 | Eina_List *left = NULL, *right = NULL ; | ||
344 | Eina_List *list = NULL; | ||
345 | Eina_List *l; | ||
346 | void *list_data; | ||
347 | int i; | ||
348 | |||
349 | eina_init(); | ||
350 | |||
351 | list = eina_list_append(list, "tigh"); | ||
352 | list = eina_list_append(list, "adar"); | ||
353 | list = eina_list_append(list, "baltar"); | ||
354 | list = eina_list_append(list, "roslin"); | ||
355 | list = eina_list_append(list, "baltar"); | ||
356 | list = eina_list_append(list, "roslin"); | ||
357 | list = eina_list_append(list, "baltar"); | ||
358 | list = eina_list_append(list, "roslin"); | ||
359 | |||
360 | fail_if(list == NULL); | ||
361 | fail_if(eina_list_count(list) != 8); | ||
362 | |||
363 | for ( i = 0; i < 200; i++) | ||
364 | { | ||
365 | left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right); | ||
366 | |||
367 | if (i % 2 == 0) | ||
368 | fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7); | ||
369 | else | ||
370 | fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7); | ||
371 | |||
372 | list = eina_list_merge(left, right); | ||
373 | list = eina_list_append(list, "roslin"); | ||
374 | } | ||
375 | |||
376 | eina_shutdown(); | ||
377 | } | ||
378 | END_TEST | ||
379 | |||
341 | void | 380 | void |
342 | eina_test_list(TCase *tc) | 381 | eina_test_list(TCase *tc) |
343 | { | 382 | { |
344 | tcase_add_test(tc, eina_test_simple); | 383 | tcase_add_test(tc, eina_test_simple); |
345 | tcase_add_test(tc, eina_test_merge); | 384 | tcase_add_test(tc, eina_test_merge); |
346 | tcase_add_test(tc, eina_test_sorted_insert); | 385 | tcase_add_test(tc, eina_test_sorted_insert); |
386 | tcase_add_test(tc, eina_test_list_split); | ||
347 | } | 387 | } |
diff --git a/libraries/eina/src/tests/eina_test_log.c b/libraries/eina/src/tests/eina_test_log.c index ba17d5f..e0f0363 100644 --- a/libraries/eina/src/tests/eina_test_log.c +++ b/libraries/eina/src/tests/eina_test_log.c | |||
@@ -27,18 +27,119 @@ | |||
27 | #include "eina_suite.h" | 27 | #include "eina_suite.h" |
28 | #include "Eina.h" | 28 | #include "Eina.h" |
29 | 29 | ||
30 | START_TEST(eina_log_macro) | 30 | struct log_ctx { |
31 | int level; | ||
32 | int line; | ||
33 | const char *msg; | ||
34 | const char *fnc; | ||
35 | const char *dom; | ||
36 | Eina_Bool did; | ||
37 | }; | ||
38 | |||
39 | /* tests should not output on success, just uncomment this for debugging */ | ||
40 | //#define SHOW_LOG 1 | ||
41 | |||
42 | static void | ||
43 | _eina_test_log(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
31 | { | 44 | { |
45 | struct log_ctx *ctx = data; | ||
46 | ck_assert_int_eq(ctx->level, level); | ||
47 | ck_assert_int_eq(ctx->line, line); | ||
48 | ck_assert_str_eq(ctx->msg, fmt); | ||
49 | ck_assert_str_eq(ctx->fnc, fnc); | ||
50 | ck_assert_str_eq(file, __FILE__); | ||
51 | ctx->did = EINA_TRUE; | ||
52 | #ifdef SHOW_LOG | ||
53 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
54 | #else | ||
55 | (void)d; | ||
56 | #endif | ||
57 | } | ||
58 | |||
59 | static void | ||
60 | _eina_test_log_domain(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
61 | { | ||
62 | struct log_ctx *ctx = data; | ||
63 | ck_assert_int_eq(ctx->level, level); | ||
64 | ck_assert_int_eq(ctx->line, line); | ||
65 | ck_assert_str_eq(ctx->msg, fmt); | ||
66 | ck_assert_str_eq(ctx->fnc, fnc); | ||
67 | ck_assert_str_eq(file, __FILE__); | ||
68 | ck_assert_str_eq(ctx->dom, d->name); | ||
69 | ctx->did = EINA_TRUE; | ||
70 | #ifdef SHOW_LOG | ||
71 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
72 | #endif | ||
73 | } | ||
74 | |||
75 | static void | ||
76 | _eina_test_log_safety(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
77 | { | ||
78 | struct log_ctx *ctx = data; | ||
79 | va_list cp_args; | ||
80 | const char *str; | ||
81 | |||
82 | va_copy(cp_args, args); | ||
83 | str = va_arg(cp_args, const char *); | ||
84 | va_end(cp_args); | ||
85 | |||
86 | ck_assert_int_eq(ctx->level, level); | ||
87 | ck_assert_str_eq(fmt, "%s"); | ||
88 | ck_assert_str_eq(ctx->msg, str); | ||
89 | ck_assert_str_eq(ctx->fnc, fnc); | ||
90 | ctx->did = EINA_TRUE; | ||
91 | |||
92 | #ifdef SHOW_LOG | ||
93 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
94 | #else | ||
95 | (void)d; | ||
96 | (void)file; | ||
97 | (void)line; | ||
98 | #endif | ||
99 | } | ||
100 | |||
101 | START_TEST(eina_log_macro) | ||
102 | { | ||
103 | struct log_ctx ctx; | ||
104 | int oldlevel; | ||
105 | |||
32 | fail_if(!eina_init()); | 106 | fail_if(!eina_init()); |
33 | 107 | ||
108 | oldlevel = eina_log_level_get(); | ||
34 | eina_log_level_set(EINA_LOG_LEVEL_DBG); | 109 | eina_log_level_set(EINA_LOG_LEVEL_DBG); |
35 | eina_log_print_cb_set(eina_log_print_cb_file, stderr); | 110 | eina_log_print_cb_set(_eina_test_log, &ctx); |
111 | |||
112 | #define TEST_LOG_CTX(lvl, _msg) \ | ||
113 | ctx.level = lvl; \ | ||
114 | ctx.line = __LINE__ + 1; \ | ||
115 | ctx.msg = _msg; \ | ||
116 | ctx.fnc = __FUNCTION__; \ | ||
117 | ctx.did = EINA_FALSE | ||
118 | |||
119 | TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "Critical message"); | ||
120 | EINA_LOG_CRIT("Critical message"); | ||
121 | fail_unless(ctx.did); | ||
122 | |||
123 | TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error"); | ||
124 | EINA_LOG_ERR("An error"); | ||
125 | fail_unless(ctx.did); | ||
36 | 126 | ||
37 | EINA_LOG_CRIT("Critical message\n"); | 127 | TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning"); |
38 | EINA_LOG_ERR("An error\n"); | 128 | EINA_LOG_WARN("A warning"); |
39 | EINA_LOG_INFO("An info\n"); | 129 | fail_unless(ctx.did); |
40 | EINA_LOG_WARN("A warning\n"); | 130 | |
41 | EINA_LOG_DBG("A debug\n"); | 131 | TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info"); |
132 | EINA_LOG_INFO("An info"); | ||
133 | fail_unless(ctx.did); | ||
134 | |||
135 | TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug"); | ||
136 | EINA_LOG_DBG("A debug"); | ||
137 | fail_unless(ctx.did); | ||
138 | |||
139 | #undef TEST_LOG_CTX | ||
140 | |||
141 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
142 | eina_log_level_set(oldlevel); | ||
42 | 143 | ||
43 | eina_shutdown(); | 144 | eina_shutdown(); |
44 | } | 145 | } |
@@ -46,16 +147,54 @@ END_TEST | |||
46 | 147 | ||
47 | START_TEST(eina_log_domains_macros) | 148 | START_TEST(eina_log_domains_macros) |
48 | { | 149 | { |
150 | struct log_ctx ctx; | ||
151 | int oldlevel; | ||
152 | |||
49 | fail_if(!eina_init()); | 153 | fail_if(!eina_init()); |
50 | 154 | ||
155 | /* make global log level blocker */ | ||
156 | oldlevel = eina_log_level_get(); | ||
157 | eina_log_level_set(EINA_LOG_LEVEL_CRITICAL); | ||
158 | eina_log_print_cb_set(_eina_test_log_domain, &ctx); | ||
159 | |||
51 | int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN); | 160 | int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN); |
52 | fail_if(d < 0); | 161 | fail_if(d < 0); |
53 | 162 | ||
54 | EINA_LOG_DOM_CRIT(d, "A critical message\n"); | 163 | /* make specific domain permissive */ |
55 | EINA_LOG_DOM_ERR(d, "An error\n"); | 164 | eina_log_domain_level_set("MyDomain", EINA_LOG_LEVEL_DBG); |
56 | EINA_LOG_DOM_WARN(d, "A warning\n"); | 165 | |
57 | EINA_LOG_DOM_DBG(d, "A debug\n"); | 166 | #define TEST_LOG_CTX(lvl, _msg) \ |
58 | EINA_LOG_DOM_INFO(d, "An info\n"); | 167 | ctx.level = lvl; \ |
168 | ctx.line = __LINE__ + 1; \ | ||
169 | ctx.msg = _msg; \ | ||
170 | ctx.fnc = __FUNCTION__; \ | ||
171 | ctx.dom = "MyDomain"; \ | ||
172 | ctx.did = EINA_FALSE | ||
173 | |||
174 | TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "A critical message"); | ||
175 | EINA_LOG_DOM_CRIT(d, "A critical message"); | ||
176 | fail_unless(ctx.did); | ||
177 | |||
178 | TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error"); | ||
179 | EINA_LOG_DOM_ERR(d, "An error"); | ||
180 | fail_unless(ctx.did); | ||
181 | |||
182 | TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning"); | ||
183 | EINA_LOG_DOM_WARN(d, "A warning"); | ||
184 | fail_unless(ctx.did); | ||
185 | |||
186 | TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info"); | ||
187 | EINA_LOG_DOM_INFO(d, "An info"); | ||
188 | fail_unless(ctx.did); | ||
189 | |||
190 | TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug"); | ||
191 | EINA_LOG_DOM_DBG(d, "A debug"); | ||
192 | fail_unless(ctx.did); | ||
193 | |||
194 | #undef TEST_LOG_CTX | ||
195 | |||
196 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
197 | eina_log_level_set(oldlevel); | ||
59 | 198 | ||
60 | eina_shutdown(); | 199 | eina_shutdown(); |
61 | } | 200 | } |
@@ -120,6 +259,8 @@ END_TEST | |||
120 | 259 | ||
121 | START_TEST(eina_log_level_indexes) | 260 | START_TEST(eina_log_level_indexes) |
122 | { | 261 | { |
262 | struct log_ctx ctx; | ||
263 | |||
123 | fail_if(!eina_init()); | 264 | fail_if(!eina_init()); |
124 | fail_if(!eina_threads_init()); | 265 | fail_if(!eina_threads_init()); |
125 | fail_if(!eina_threads_init()); | 266 | fail_if(!eina_threads_init()); |
@@ -127,11 +268,41 @@ START_TEST(eina_log_level_indexes) | |||
127 | int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN); | 268 | int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN); |
128 | fail_if(d < 0); | 269 | fail_if(d < 0); |
129 | 270 | ||
271 | eina_log_print_cb_set(_eina_test_log_domain, &ctx); | ||
272 | |||
273 | #define TEST_LOG_CTX(lvl, _msg) \ | ||
274 | ctx.level = lvl; \ | ||
275 | ctx.line = __LINE__ + 1; \ | ||
276 | ctx.msg = _msg; \ | ||
277 | ctx.fnc = __FUNCTION__; \ | ||
278 | ctx.dom = "Levels"; \ | ||
279 | ctx.did = EINA_FALSE; | ||
280 | |||
130 | // Displayed unless user sets level lower than -1 | 281 | // Displayed unless user sets level lower than -1 |
131 | EINA_LOG(d, -1, "Negative index message\n"); | 282 | eina_log_domain_level_set("Levels", -1); |
283 | TEST_LOG_CTX(-1, "Negative index message"); | ||
284 | EINA_LOG(d, -1, "Negative index message"); | ||
285 | fail_unless(ctx.did); | ||
286 | |||
287 | eina_log_domain_level_set("Levels", -2); | ||
288 | TEST_LOG_CTX(-1, "Negative index message"); | ||
289 | EINA_LOG(d, -1, "Negative index message"); | ||
290 | fail_if(ctx.did); | ||
132 | 291 | ||
133 | // Displayed only if user sets level 6 or higher | 292 | // Displayed only if user sets level 6 or higher |
134 | EINA_LOG(d, 6, "Higher level debug\n"); | 293 | eina_log_domain_level_set("Levels", 6); |
294 | TEST_LOG_CTX(6, "Higher level debug"); | ||
295 | EINA_LOG(d, 6, "Higher level debug"); | ||
296 | fail_unless(ctx.did); | ||
297 | |||
298 | eina_log_domain_level_set("Levels", 5); | ||
299 | TEST_LOG_CTX(6, "Higher level debug"); | ||
300 | EINA_LOG(d, 6, "Higher level debug"); | ||
301 | fail_if(ctx.did); | ||
302 | |||
303 | #undef TEST_LOG_CTX | ||
304 | |||
305 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
135 | 306 | ||
136 | eina_threads_shutdown(); | 307 | eina_threads_shutdown(); |
137 | eina_threads_shutdown(); | 308 | eina_threads_shutdown(); |
@@ -141,6 +312,7 @@ END_TEST | |||
141 | 312 | ||
142 | START_TEST(eina_log_customize) | 313 | START_TEST(eina_log_customize) |
143 | { | 314 | { |
315 | struct log_ctx ctx; | ||
144 | int d; | 316 | int d; |
145 | 317 | ||
146 | /* please don't define EINA_LOG_LEVELS for it */ | 318 | /* please don't define EINA_LOG_LEVELS for it */ |
@@ -182,11 +354,28 @@ START_TEST(eina_log_customize) | |||
182 | fail_if(eina_log_domain_registered_level_get(d) != 890); | 354 | fail_if(eina_log_domain_registered_level_get(d) != 890); |
183 | 355 | ||
184 | eina_log_domain_unregister(d); | 356 | eina_log_domain_unregister(d); |
357 | |||
358 | #ifdef EINA_SAFETY_CHECKS | ||
359 | #ifdef SHOW_LOG | ||
185 | fputs("NOTE: You should see a failed safety check or " | 360 | fputs("NOTE: You should see a failed safety check or " |
186 | "a crash if compiled without safety checks support.\n", | 361 | "a crash if compiled without safety checks support.\n", |
187 | stderr); | 362 | stderr); |
363 | #endif | ||
188 | eina_log_abort_on_critical_set(EINA_FALSE); | 364 | eina_log_abort_on_critical_set(EINA_FALSE); |
365 | eina_log_function_disable_set(EINA_FALSE); | ||
366 | |||
367 | eina_log_print_cb_set(_eina_test_log_safety, &ctx); | ||
368 | ctx.level = EINA_LOG_LEVEL_ERR; | ||
369 | ctx.msg = "safety check failed: _log_domains[domain].deleted is true"; | ||
370 | ctx.fnc = "eina_log_domain_registered_level_get"; | ||
371 | ctx.did = EINA_FALSE; | ||
189 | fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN); | 372 | fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN); |
373 | fail_unless(ctx.did); | ||
374 | |||
375 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
376 | #else | ||
377 | #warning "Compiled without safety checks" | ||
378 | #endif | ||
190 | 379 | ||
191 | #undef test_set_get_bool | 380 | #undef test_set_get_bool |
192 | #undef test_set_get | 381 | #undef test_set_get |
diff --git a/libraries/eina/src/tests/eina_test_magic.c b/libraries/eina/src/tests/eina_test_magic.c index d2c3d49..d0a374e 100644 --- a/libraries/eina/src/tests/eina_test_magic.c +++ b/libraries/eina/src/tests/eina_test_magic.c | |||
@@ -40,21 +40,95 @@ struct _Eina_Magic_Struct | |||
40 | EINA_MAGIC | 40 | EINA_MAGIC |
41 | }; | 41 | }; |
42 | 42 | ||
43 | struct log_ctx { | ||
44 | const char *msg; | ||
45 | const char *fnc; | ||
46 | Eina_Bool did; | ||
47 | }; | ||
48 | |||
49 | /* tests should not output on success, just uncomment this for debugging */ | ||
50 | //#define SHOW_LOG 1 | ||
51 | |||
52 | static void | ||
53 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
54 | { | ||
55 | struct log_ctx *ctx = data; | ||
56 | va_list cp_args; | ||
57 | const char *str; | ||
58 | |||
59 | va_copy(cp_args, args); | ||
60 | str = va_arg(cp_args, const char *); | ||
61 | va_end(cp_args); | ||
62 | |||
63 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
64 | ck_assert_str_eq(fmt, "%s"); | ||
65 | ck_assert_str_eq(ctx->msg, str); | ||
66 | ck_assert_str_eq(ctx->fnc, fnc); | ||
67 | ctx->did = EINA_TRUE; | ||
68 | |||
69 | #ifdef SHOW_LOG | ||
70 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
71 | #else | ||
72 | (void)d; | ||
73 | (void)file; | ||
74 | (void)line; | ||
75 | #endif | ||
76 | } | ||
77 | |||
78 | static void | ||
79 | _eina_test_magic_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
80 | { | ||
81 | struct log_ctx *ctx = data; | ||
82 | |||
83 | ck_assert_int_eq(level, EINA_LOG_LEVEL_CRITICAL); | ||
84 | ck_assert_str_eq(ctx->msg, fmt); | ||
85 | ck_assert_str_eq(ctx->fnc, fnc); | ||
86 | ctx->did = EINA_TRUE; | ||
87 | |||
88 | #ifdef SHOW_LOG | ||
89 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
90 | #else | ||
91 | (void)d; | ||
92 | (void)file; | ||
93 | (void)line; | ||
94 | #endif | ||
95 | } | ||
96 | |||
97 | #ifdef EINA_SAFETY_CHECKS | ||
98 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
99 | ctx.msg = _msg; \ | ||
100 | ctx.fnc = fn; \ | ||
101 | ctx.did = EINA_FALSE | ||
102 | #endif | ||
103 | |||
43 | START_TEST(eina_magic_simple) | 104 | START_TEST(eina_magic_simple) |
44 | { | 105 | { |
45 | Eina_Magic_Struct *ems = NULL; | 106 | Eina_Magic_Struct *ems = NULL; |
107 | struct log_ctx ctx; | ||
46 | 108 | ||
47 | eina_init(); | 109 | eina_init(); |
48 | 110 | ||
111 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
112 | |||
49 | eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING); | 113 | eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING); |
50 | 114 | ||
51 | #ifdef EINA_SAFETY_CHECKS | 115 | #ifdef EINA_SAFETY_CHECKS |
116 | #ifdef SHOW_LOG | ||
52 | fprintf(stderr, "you should have a safety check failure below:\n"); | 117 | fprintf(stderr, "you should have a safety check failure below:\n"); |
118 | #endif | ||
119 | TEST_MAGIC_SAFETY("eina_magic_string_set", | ||
120 | "safety check failed: magic_name == NULL"); | ||
53 | eina_magic_string_set(EINA_MAGIC_TEST2, NULL); | 121 | eina_magic_string_set(EINA_MAGIC_TEST2, NULL); |
54 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 122 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
123 | fail_unless(ctx.did); | ||
55 | 124 | ||
125 | #ifdef SHOW_LOG | ||
56 | fprintf(stderr, "you should have a safety check failure below:\n"); | 126 | fprintf(stderr, "you should have a safety check failure below:\n"); |
127 | #endif | ||
128 | TEST_MAGIC_SAFETY("eina_magic_string_set", | ||
129 | "safety check failed: magic_name == NULL"); | ||
57 | eina_magic_string_set(EINA_MAGIC_TEST2, NULL); | 130 | eina_magic_string_set(EINA_MAGIC_TEST2, NULL); |
131 | fail_unless(ctx.did); | ||
58 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); | 132 | fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); |
59 | #endif | 133 | #endif |
60 | 134 | ||
@@ -64,10 +138,22 @@ START_TEST(eina_magic_simple) | |||
64 | fail_if(strcmp(eina_magic_string_get( | 138 | fail_if(strcmp(eina_magic_string_get( |
65 | EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0); | 139 | EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0); |
66 | 140 | ||
141 | eina_log_print_cb_set(_eina_test_magic_print_cb, &ctx); | ||
142 | |||
67 | #ifdef EINA_MAGIC_DEBUG | 143 | #ifdef EINA_MAGIC_DEBUG |
68 | fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); | 144 | fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); |
145 | #ifdef SHOW_LOG | ||
69 | fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n"); | 146 | fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n"); |
147 | #endif | ||
148 | TEST_MAGIC_SAFETY(__FUNCTION__, | ||
149 | "*** Eina Magic Check Failed !!!\n" | ||
150 | " Input handle pointer is NULL !\n" | ||
151 | "*** NAUGHTY PROGRAMMER!!!\n" | ||
152 | "*** SPANK SPANK SPANK!!!\n" | ||
153 | "*** Now go fix your code. Tut tut tut!\n" | ||
154 | "\n"); | ||
70 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); | 155 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); |
156 | fail_unless(ctx.did); | ||
71 | 157 | ||
72 | ems = malloc(sizeof (Eina_Magic_Struct)); | 158 | ems = malloc(sizeof (Eina_Magic_Struct)); |
73 | fail_if(!ems); | 159 | fail_if(!ems); |
@@ -76,15 +162,39 @@ START_TEST(eina_magic_simple) | |||
76 | fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); | 162 | fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); |
77 | 163 | ||
78 | EINA_MAGIC_SET(ems, EINA_MAGIC_NONE); | 164 | EINA_MAGIC_SET(ems, EINA_MAGIC_NONE); |
165 | #ifdef SHOW_LOG | ||
79 | fprintf(stderr, | 166 | fprintf(stderr, |
80 | "you should see 'Input handle has already been freed' below\n"); | 167 | "you should see 'Input handle has already been freed' below\n"); |
168 | #endif | ||
169 | TEST_MAGIC_SAFETY(__FUNCTION__, | ||
170 | "*** Eina Magic Check Failed !!!\n" | ||
171 | " Input handle has already been freed!\n" | ||
172 | "*** NAUGHTY PROGRAMMER!!!\n" | ||
173 | "*** SPANK SPANK SPANK!!!\n" | ||
174 | "*** Now go fix your code. Tut tut tut!\n" | ||
175 | "\n"); | ||
81 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); | 176 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); |
177 | fail_unless(ctx.did); | ||
82 | 178 | ||
83 | EINA_MAGIC_SET(ems, 42424242); | 179 | EINA_MAGIC_SET(ems, 42424242); |
180 | #ifdef SHOW_LOG | ||
84 | fprintf(stderr, "you should see 'Input handle is wrong type' below\n"); | 181 | fprintf(stderr, "you should see 'Input handle is wrong type' below\n"); |
182 | #endif | ||
183 | TEST_MAGIC_SAFETY(__FUNCTION__, | ||
184 | "*** Eina Magic Check Failed !!!\n" | ||
185 | " Input handle is wrong type\n" | ||
186 | " Expected: %08x - %s\n" | ||
187 | " Supplied: %08x - %s\n" | ||
188 | "*** NAUGHTY PROGRAMMER!!!\n" | ||
189 | "*** SPANK SPANK SPANK!!!\n" | ||
190 | "*** Now go fix your code. Tut tut tut!\n" | ||
191 | "\n"); | ||
85 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); | 192 | EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); |
193 | fail_unless(ctx.did); | ||
86 | #endif | 194 | #endif |
87 | 195 | ||
196 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
197 | |||
88 | eina_shutdown(); | 198 | eina_shutdown(); |
89 | } | 199 | } |
90 | END_TEST | 200 | END_TEST |
diff --git a/libraries/eina/src/tests/eina_test_simple_xml_parser.c b/libraries/eina/src/tests/eina_test_simple_xml_parser.c index 94e6a2a..7093019 100644 --- a/libraries/eina/src/tests/eina_test_simple_xml_parser.c +++ b/libraries/eina/src/tests/eina_test_simple_xml_parser.c | |||
@@ -44,15 +44,17 @@ START_TEST(eina_simple_xml_parser_node_dump) | |||
44 | char *buf; | 44 | char *buf; |
45 | 45 | ||
46 | fseek(f, 0, SEEK_SET); | 46 | fseek(f, 0, SEEK_SET); |
47 | buf = malloc(sz); | 47 | buf = malloc(sz + 1); |
48 | if (buf) | 48 | if (buf) |
49 | { | 49 | { |
50 | if (fread(buf, 1, sz, f)) | 50 | if (fread(buf, 1, sz, f)) |
51 | { | 51 | { |
52 | Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load | 52 | Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load |
53 | (buf, sz, EINA_TRUE); | 53 | (buf, sz, EINA_TRUE); |
54 | buf[sz] = '\0'; | ||
54 | char *out = eina_simple_xml_node_dump(&root->base, " "); | 55 | char *out = eina_simple_xml_node_dump(&root->base, " "); |
55 | puts(out); | 56 | //puts(out); |
57 | ck_assert_str_eq(out, buf); | ||
56 | free(out); | 58 | free(out); |
57 | eina_simple_xml_node_root_free(root); | 59 | eina_simple_xml_node_root_free(root); |
58 | free(buf); | 60 | free(buf); |
diff --git a/libraries/eina/src/tests/eina_test_ustr.c b/libraries/eina/src/tests/eina_test_ustr.c index eaeba9d..75126cc 100644 --- a/libraries/eina/src/tests/eina_test_ustr.c +++ b/libraries/eina/src/tests/eina_test_ustr.c | |||
@@ -28,6 +28,43 @@ | |||
28 | #include "eina_suite.h" | 28 | #include "eina_suite.h" |
29 | #include "Eina.h" | 29 | #include "Eina.h" |
30 | 30 | ||
31 | #ifdef EINA_SAFETY_CHECKS | ||
32 | struct log_ctx { | ||
33 | const char *msg; | ||
34 | const char *fnc; | ||
35 | Eina_Bool did; | ||
36 | }; | ||
37 | |||
38 | /* tests should not output on success, just uncomment this for debugging */ | ||
39 | //#define SHOW_LOG 1 | ||
40 | |||
41 | static void | ||
42 | _eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__) | ||
43 | { | ||
44 | struct log_ctx *ctx = data; | ||
45 | va_list cp_args; | ||
46 | const char *str; | ||
47 | |||
48 | va_copy(cp_args, args); | ||
49 | str = va_arg(cp_args, const char *); | ||
50 | va_end(cp_args); | ||
51 | |||
52 | ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR); | ||
53 | ck_assert_str_eq(fmt, "%s"); | ||
54 | ck_assert_str_eq(ctx->msg, str); | ||
55 | ck_assert_str_eq(ctx->fnc, fnc); | ||
56 | ctx->did = EINA_TRUE; | ||
57 | |||
58 | #ifdef SHOW_LOG | ||
59 | eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); | ||
60 | #else | ||
61 | (void)d; | ||
62 | (void)file; | ||
63 | (void)line; | ||
64 | #endif | ||
65 | } | ||
66 | #endif | ||
67 | |||
31 | static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; | 68 | static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; |
32 | static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0}; | 69 | static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0}; |
33 | static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; | 70 | static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; |
@@ -126,14 +163,42 @@ START_TEST(eina_unicode_strncpy_test) | |||
126 | rv = eina_unicode_strncpy(buf, STR1, 0); | 163 | rv = eina_unicode_strncpy(buf, STR1, 0); |
127 | fail_if(buf[0] != '7'); | 164 | fail_if(buf[0] != '7'); |
128 | 165 | ||
129 | /* may segfault */ | 166 | #ifdef EINA_SAFETY_CHECKS |
130 | buf[0] = '7'; | 167 | { |
131 | rv = eina_unicode_strncpy(buf, NULL, 0); | 168 | struct log_ctx ctx; |
132 | fail_if(buf[0] != '7'); | 169 | |
170 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
171 | ctx.msg = _msg; \ | ||
172 | ctx.fnc = fn; \ | ||
173 | ctx.did = EINA_FALSE | ||
174 | |||
175 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
133 | 176 | ||
134 | /* Hopefully won't segfault */ | 177 | /* may segfault */ |
135 | rv = eina_unicode_strncpy(NULL, STR1, 0); | 178 | buf[0] = '7'; |
136 | fail_if(rv != NULL); | 179 | #ifdef SHOW_LOG |
180 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
181 | #endif | ||
182 | TEST_MAGIC_SAFETY("eina_unicode_strncpy", | ||
183 | "safety check failed: source == NULL"); | ||
184 | rv = eina_unicode_strncpy(buf, NULL, 0); | ||
185 | fail_if(buf[0] != '7'); | ||
186 | fail_unless(ctx.did); | ||
187 | |||
188 | /* Hopefully won't segfault */ | ||
189 | #ifdef SHOW_LOG | ||
190 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
191 | #endif | ||
192 | TEST_MAGIC_SAFETY("eina_unicode_strncpy", | ||
193 | "safety check failed: dest == NULL"); | ||
194 | rv = eina_unicode_strncpy(NULL, STR1, 0); | ||
195 | fail_if(rv != NULL); | ||
196 | fail_unless(ctx.did); | ||
197 | |||
198 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
199 | #undef TEST_MAGIC_SAFETY | ||
200 | } | ||
201 | #endif | ||
137 | 202 | ||
138 | eina_shutdown(); | 203 | eina_shutdown(); |
139 | } | 204 | } |
@@ -151,8 +216,30 @@ START_TEST(eina_ustr_strlen_test) | |||
151 | fail_if(eina_unicode_strlen(STR3) != 8); | 216 | fail_if(eina_unicode_strlen(STR3) != 8); |
152 | fail_if(eina_unicode_strlen(STR4) != 1); | 217 | fail_if(eina_unicode_strlen(STR4) != 1); |
153 | fail_if(eina_unicode_strlen(EMPTYSTR) != 0); | 218 | fail_if(eina_unicode_strlen(EMPTYSTR) != 0); |
154 | /* Eina unicode doesn't take NULL */ | 219 | |
155 | // fail_if(eina_unicode_strlen(NULL)); | 220 | #ifdef EINA_SAFETY_CHECKS |
221 | { | ||
222 | struct log_ctx ctx; | ||
223 | |||
224 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
225 | ctx.msg = _msg; \ | ||
226 | ctx.fnc = fn; \ | ||
227 | ctx.did = EINA_FALSE | ||
228 | |||
229 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
230 | |||
231 | #ifdef SHOW_LOG | ||
232 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
233 | #endif | ||
234 | TEST_MAGIC_SAFETY("eina_unicode_strlen", | ||
235 | "safety check failed: ustr == NULL"); | ||
236 | fail_if(eina_unicode_strlen(NULL)); | ||
237 | fail_unless(ctx.did); | ||
238 | |||
239 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
240 | #undef TEST_MAGIC_SAFETY | ||
241 | } | ||
242 | #endif | ||
156 | 243 | ||
157 | eina_shutdown(); | 244 | eina_shutdown(); |
158 | } | 245 | } |
@@ -174,7 +261,30 @@ START_TEST(eina_unicode_strnlen_test) | |||
174 | fail_if(eina_unicode_strnlen(STR2,3) != 3); | 261 | fail_if(eina_unicode_strnlen(STR2,3) != 3); |
175 | fail_if(eina_unicode_strnlen(STR3,3) != 3); | 262 | fail_if(eina_unicode_strnlen(STR3,3) != 3); |
176 | fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0); | 263 | fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0); |
177 | fail_if(eina_unicode_strnlen(NULL,0) != 0); | 264 | |
265 | #ifdef EINA_SAFETY_CHECKS | ||
266 | { | ||
267 | struct log_ctx ctx; | ||
268 | |||
269 | #define TEST_MAGIC_SAFETY(fn, _msg) \ | ||
270 | ctx.msg = _msg; \ | ||
271 | ctx.fnc = fn; \ | ||
272 | ctx.did = EINA_FALSE | ||
273 | |||
274 | eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx); | ||
275 | |||
276 | #ifdef SHOW_LOG | ||
277 | fprintf(stderr, "you should have a safety check failure below:\n"); | ||
278 | #endif | ||
279 | TEST_MAGIC_SAFETY("eina_unicode_strnlen", | ||
280 | "safety check failed: ustr == NULL"); | ||
281 | fail_if(eina_unicode_strnlen(NULL,0) != 0); | ||
282 | fail_unless(ctx.did); | ||
283 | |||
284 | eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); | ||
285 | #undef TEST_MAGIC_SAFETY | ||
286 | } | ||
287 | #endif | ||
178 | 288 | ||
179 | eina_shutdown(); | 289 | eina_shutdown(); |
180 | } | 290 | } |
diff --git a/libraries/eina/src/tests/eina_test_value.c b/libraries/eina/src/tests/eina_test_value.c index 2d04c2f..94a5ab7 100644 --- a/libraries/eina/src/tests/eina_test_value.c +++ b/libraries/eina/src/tests/eina_test_value.c | |||
@@ -1140,8 +1140,10 @@ START_TEST(eina_value_test_array) | |||
1140 | fail_unless(eina_inarray_append(inarray, &c) >= 0); | 1140 | fail_unless(eina_inarray_append(inarray, &c) >= 0); |
1141 | desc.subtype = EINA_VALUE_TYPE_CHAR; | 1141 | desc.subtype = EINA_VALUE_TYPE_CHAR; |
1142 | desc.step = 0; | 1142 | desc.step = 0; |
1143 | desc.array = inarray; /* will be adopted and freed by value */ | 1143 | desc.array = inarray; |
1144 | fail_unless(eina_value_set(value, desc)); /* manually configure */ | 1144 | fail_unless(eina_value_set(value, desc)); /* manually configure */ |
1145 | eina_inarray_free(inarray); | ||
1146 | |||
1145 | fail_unless(eina_value_array_get(value, 0, &c)); | 1147 | fail_unless(eina_value_array_get(value, 0, &c)); |
1146 | fail_unless(c == 11); | 1148 | fail_unless(c == 11); |
1147 | fail_unless(eina_value_array_get(value, 1, &c)); | 1149 | fail_unless(eina_value_array_get(value, 1, &c)); |
@@ -1242,11 +1244,13 @@ START_TEST(eina_value_test_list) | |||
1242 | 1244 | ||
1243 | desc.subtype = EINA_VALUE_TYPE_STRING; | 1245 | desc.subtype = EINA_VALUE_TYPE_STRING; |
1244 | desc.list = NULL; | 1246 | desc.list = NULL; |
1245 | desc.list = eina_list_append(desc.list, strdup("hello")); | 1247 | desc.list = eina_list_append(desc.list, "hello"); |
1246 | desc.list = eina_list_append(desc.list, strdup("world")); | 1248 | desc.list = eina_list_append(desc.list, "world"); |
1247 | desc.list = eina_list_append(desc.list, strdup("eina")); | 1249 | desc.list = eina_list_append(desc.list, "eina"); |
1248 | fail_unless(eina_list_count(desc.list) == 3); | 1250 | fail_unless(eina_list_count(desc.list) == 3); |
1249 | fail_unless(eina_value_set(value, desc)); | 1251 | fail_unless(eina_value_set(value, desc)); |
1252 | eina_list_free(desc.list); | ||
1253 | |||
1250 | fail_unless(eina_value_list_get(value, 0, &s)); | 1254 | fail_unless(eina_value_list_get(value, 0, &s)); |
1251 | fail_unless(s != NULL); | 1255 | fail_unless(s != NULL); |
1252 | fail_unless(strcmp(s, "hello") == 0); | 1256 | fail_unless(strcmp(s, "hello") == 0); |
@@ -1351,14 +1355,17 @@ START_TEST(eina_value_test_hash) | |||
1351 | fail_unless(desc.hash != NULL); | 1355 | fail_unless(desc.hash != NULL); |
1352 | /* watch out hash pointer is to a size of subtype->value_size! */ | 1356 | /* watch out hash pointer is to a size of subtype->value_size! */ |
1353 | ptr = malloc(sizeof(char *)); | 1357 | ptr = malloc(sizeof(char *)); |
1354 | *ptr = strdup("there"); | 1358 | *ptr = "there"; |
1355 | fail_unless(eina_hash_add(desc.hash, "hi", ptr)); | 1359 | fail_unless(eina_hash_add(desc.hash, "hi", ptr)); |
1356 | ptr = malloc(sizeof(char *)); | 1360 | ptr = malloc(sizeof(char *)); |
1357 | *ptr = strdup("y"); | 1361 | *ptr = "y"; |
1358 | fail_unless(eina_hash_add(desc.hash, "x", ptr)); | 1362 | fail_unless(eina_hash_add(desc.hash, "x", ptr)); |
1359 | |||
1360 | fail_unless(eina_value_set(value, desc)); | 1363 | fail_unless(eina_value_set(value, desc)); |
1361 | 1364 | ||
1365 | free(eina_hash_find(desc.hash, "hi")); | ||
1366 | free(eina_hash_find(desc.hash, "x")); | ||
1367 | eina_hash_free(desc.hash); | ||
1368 | |||
1362 | fail_unless(eina_value_hash_get(value, "hi", &s)); | 1369 | fail_unless(eina_value_hash_get(value, "hi", &s)); |
1363 | fail_unless(s != NULL); | 1370 | fail_unless(s != NULL); |
1364 | fail_unless(strcmp(s, "there") == 0); | 1371 | fail_unless(strcmp(s, "there") == 0); |
@@ -1606,6 +1613,20 @@ START_TEST(eina_value_test_struct) | |||
1606 | fail_unless(eina_value_struct_get(value, "c", &c)); | 1613 | fail_unless(eina_value_struct_get(value, "c", &c)); |
1607 | fail_unless(c == 0xf); | 1614 | fail_unless(c == 0xf); |
1608 | 1615 | ||
1616 | fail_unless(eina_value_struct_member_value_get | ||
1617 | (value, myst_members + 0, &other)); | ||
1618 | fail_unless(other.type == EINA_VALUE_TYPE_INT); | ||
1619 | fail_unless(eina_value_get(&other, &i)); | ||
1620 | fail_unless(i == 5678); | ||
1621 | eina_value_flush(&other); | ||
1622 | |||
1623 | fail_unless(eina_value_struct_member_value_get | ||
1624 | (value, myst_members + 1, &other)); | ||
1625 | fail_unless(other.type == EINA_VALUE_TYPE_CHAR); | ||
1626 | fail_unless(eina_value_get(&other, &c)); | ||
1627 | fail_unless(c = 0xf); | ||
1628 | eina_value_flush(&other); | ||
1629 | |||
1609 | str = eina_value_to_string(value); | 1630 | str = eina_value_to_string(value); |
1610 | fail_unless(str != NULL); | 1631 | fail_unless(str != NULL); |
1611 | fail_unless(strcmp(str, "{i: 5678, c: 15}") == 0); | 1632 | fail_unless(strcmp(str, "{i: 5678, c: 15}") == 0); |
@@ -1704,6 +1725,7 @@ START_TEST(eina_value_test_struct) | |||
1704 | fail_unless(strcmp(str, "{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 12, l: 13, m: 14, n: 15, o: 16, p: 17, q: 18, r: 19, s: 20, t: 21, u: 22, v: 23, x: 24}") == 0); | 1725 | fail_unless(strcmp(str, "{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 12, l: 13, m: 14, n: 15, o: 16, p: 17, q: 18, r: 19, s: 20, t: 21, u: 22, v: 23, x: 24}") == 0); |
1705 | free(str); | 1726 | free(str); |
1706 | 1727 | ||
1728 | eina_value_flush(&other); | ||
1707 | eina_value_free(value); | 1729 | eina_value_free(value); |
1708 | eina_shutdown(); | 1730 | eina_shutdown(); |
1709 | } | 1731 | } |
@@ -1728,7 +1750,7 @@ START_TEST(eina_value_test_array_of_struct) | |||
1728 | EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH, | 1750 | EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH, |
1729 | myst_members, 4, sizeof(struct myst) | 1751 | myst_members, 4, sizeof(struct myst) |
1730 | }; | 1752 | }; |
1731 | Eina_Value *value; | 1753 | Eina_Value *value, array_item; |
1732 | char *str; | 1754 | char *str; |
1733 | int i; | 1755 | int i; |
1734 | 1756 | ||
@@ -1740,20 +1762,17 @@ START_TEST(eina_value_test_array_of_struct) | |||
1740 | for (i = 0; i < 10; i++) | 1762 | for (i = 0; i < 10; i++) |
1741 | { | 1763 | { |
1742 | Eina_Value_Struct desc; | 1764 | Eina_Value_Struct desc; |
1743 | struct myst *st; | 1765 | struct myst st; |
1744 | char buf[64]; | 1766 | char buf[64]; |
1745 | 1767 | ||
1746 | snprintf(buf, sizeof(buf), "item%02d", i); | 1768 | snprintf(buf, sizeof(buf), "item%02d", i); |
1747 | st = malloc(sizeof(struct myst)); | 1769 | st.a = i; |
1748 | fail_unless(st != NULL); | 1770 | st.b = i * 10; |
1749 | st->a = i; | 1771 | st.c = i * 100; |
1750 | st->b = i * 10; | 1772 | st.s = buf; |
1751 | st->c = i * 100; | ||
1752 | st->s = strdup(buf); | ||
1753 | fail_unless(st->s != NULL); | ||
1754 | 1773 | ||
1755 | desc.desc = &myst_desc; | 1774 | desc.desc = &myst_desc; |
1756 | desc.memory = st; | 1775 | desc.memory = &st; |
1757 | fail_unless(eina_value_array_append(value, desc)); | 1776 | fail_unless(eina_value_array_append(value, desc)); |
1758 | } | 1777 | } |
1759 | 1778 | ||
@@ -1773,11 +1792,66 @@ START_TEST(eina_value_test_array_of_struct) | |||
1773 | "]") == 0); | 1792 | "]") == 0); |
1774 | free(str); | 1793 | free(str); |
1775 | 1794 | ||
1795 | eina_value_array_value_get(value, 2, &array_item); | ||
1796 | eina_value_struct_get(&array_item, "a", &i); | ||
1797 | ck_assert_int_eq(i, 2); | ||
1798 | eina_value_struct_get(&array_item, "b", &i); | ||
1799 | ck_assert_int_eq(i, 20); | ||
1800 | eina_value_struct_get(&array_item, "c", &i); | ||
1801 | ck_assert_int_eq(i, 200); | ||
1802 | eina_value_struct_get(&array_item, "s", &str); | ||
1803 | ck_assert_str_eq(str, "item02"); | ||
1804 | eina_value_flush(&array_item); | ||
1805 | |||
1776 | eina_value_free(value); | 1806 | eina_value_free(value); |
1777 | eina_shutdown(); | 1807 | eina_shutdown(); |
1778 | } | 1808 | } |
1779 | END_TEST | 1809 | END_TEST |
1780 | 1810 | ||
1811 | |||
1812 | START_TEST(eina_value_test_model) | ||
1813 | { | ||
1814 | Eina_Value *value, inv; | ||
1815 | Eina_Model *model, *m; | ||
1816 | char *str; | ||
1817 | |||
1818 | eina_init(); | ||
1819 | |||
1820 | value = eina_value_new(EINA_VALUE_TYPE_MODEL); | ||
1821 | fail_unless(value != NULL); | ||
1822 | |||
1823 | model = eina_model_new(EINA_MODEL_TYPE_GENERIC); | ||
1824 | fail_unless(model != NULL); | ||
1825 | |||
1826 | fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT)); | ||
1827 | fail_unless(eina_value_set(&inv, 1234)); | ||
1828 | fail_unless(eina_model_property_set(model, "i", &inv)); | ||
1829 | eina_value_flush(&inv); | ||
1830 | |||
1831 | fail_unless(eina_value_set(value, model)); | ||
1832 | fail_unless(eina_model_refcount(model) == 2); | ||
1833 | |||
1834 | fail_unless(eina_value_get(value, &m)); | ||
1835 | fail_unless(m == model); | ||
1836 | fail_unless(eina_model_refcount(m) == 2); | ||
1837 | |||
1838 | fail_unless(eina_value_pset(value, &model)); | ||
1839 | fail_unless(eina_model_refcount(model) == 2); | ||
1840 | |||
1841 | str = eina_value_to_string(value); | ||
1842 | fail_unless(str != NULL); | ||
1843 | fail_unless(strcmp(str, "Eina_Model_Type_Generic({i: 1234}, [])") == 0); | ||
1844 | free(str); | ||
1845 | |||
1846 | eina_value_free(value); | ||
1847 | |||
1848 | fail_unless(eina_model_refcount(model) == 1); | ||
1849 | eina_model_unref(model); | ||
1850 | |||
1851 | eina_shutdown(); | ||
1852 | } | ||
1853 | END_TEST | ||
1854 | |||
1781 | void | 1855 | void |
1782 | eina_test_value(TCase *tc) | 1856 | eina_test_value(TCase *tc) |
1783 | { | 1857 | { |
@@ -1796,4 +1870,5 @@ eina_test_value(TCase *tc) | |||
1796 | tcase_add_test(tc, eina_value_test_blob); | 1870 | tcase_add_test(tc, eina_value_test_blob); |
1797 | tcase_add_test(tc, eina_value_test_struct); | 1871 | tcase_add_test(tc, eina_value_test_struct); |
1798 | tcase_add_test(tc, eina_value_test_array_of_struct); | 1872 | tcase_add_test(tc, eina_value_test_array_of_struct); |
1873 | tcase_add_test(tc, eina_value_test_model); | ||
1799 | } | 1874 | } |