aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src')
-rw-r--r--libraries/eina/src/Makefile.in38
-rw-r--r--libraries/eina/src/examples/Makefile.am28
-rw-r--r--libraries/eina/src/examples/Makefile.in180
-rw-r--r--libraries/eina/src/examples/eina_accessor_01.c2
-rw-r--r--libraries/eina/src/examples/eina_array_01.c2
-rw-r--r--libraries/eina/src/examples/eina_array_02.c2
-rw-r--r--libraries/eina/src/examples/eina_error_01.c4
-rw-r--r--libraries/eina/src/examples/eina_file_01.c2
-rw-r--r--libraries/eina/src/examples/eina_hash_01.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_02.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_03.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_04.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_05.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_06.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_07.c3
-rw-r--r--libraries/eina/src/examples/eina_hash_08.c3
-rw-r--r--libraries/eina/src/examples/eina_inlist_01.c3
-rw-r--r--libraries/eina/src/examples/eina_inlist_02.c3
-rw-r--r--libraries/eina/src/examples/eina_inlist_03.c3
-rw-r--r--libraries/eina/src/examples/eina_iterator_01.c2
-rw-r--r--libraries/eina/src/examples/eina_list_01.c2
-rw-r--r--libraries/eina/src/examples/eina_list_02.c2
-rw-r--r--libraries/eina/src/examples/eina_list_03.c2
-rw-r--r--libraries/eina/src/examples/eina_list_04.c2
-rw-r--r--libraries/eina/src/examples/eina_tiler_01.c2
-rw-r--r--libraries/eina/src/include/Eina.h44
-rw-r--r--libraries/eina/src/include/Makefile.am3
-rw-r--r--libraries/eina/src/include/Makefile.in48
-rw-r--r--libraries/eina/src/include/eina_array.h2
-rw-r--r--libraries/eina/src/include/eina_config.h9
-rw-r--r--libraries/eina/src/include/eina_config.h.in9
-rw-r--r--libraries/eina/src/include/eina_error.h2
-rw-r--r--libraries/eina/src/include/eina_file.h51
-rw-r--r--libraries/eina/src/include/eina_inarray.h148
-rw-r--r--libraries/eina/src/include/eina_inline_lock_win32.x70
-rw-r--r--libraries/eina/src/include/eina_inline_stringshare.x4
-rw-r--r--libraries/eina/src/include/eina_inline_value.x281
-rw-r--r--libraries/eina/src/include/eina_list.h6
-rw-r--r--libraries/eina/src/include/eina_stringshare.h43
-rw-r--r--libraries/eina/src/include/eina_types.h32
-rw-r--r--libraries/eina/src/include/eina_value.h511
-rw-r--r--libraries/eina/src/lib/Makefile.am5
-rw-r--r--libraries/eina/src/lib/Makefile.in94
-rw-r--r--libraries/eina/src/lib/eina_binshare.c69
-rw-r--r--libraries/eina/src/lib/eina_file.c232
-rw-r--r--libraries/eina/src/lib/eina_file_win32.c2235
-rw-r--r--libraries/eina/src/lib/eina_inlist.c5
-rw-r--r--libraries/eina/src/lib/eina_list.c15
-rw-r--r--libraries/eina/src/lib/eina_magic.c5
-rw-r--r--libraries/eina/src/lib/eina_main.c5
-rw-r--r--libraries/eina/src/lib/eina_matrixsparse.c2
-rw-r--r--libraries/eina/src/lib/eina_module.c4
-rw-r--r--libraries/eina/src/lib/eina_prefix.c22
-rw-r--r--libraries/eina/src/lib/eina_private.h2
-rw-r--r--libraries/eina/src/lib/eina_rbtree.c365
-rw-r--r--libraries/eina/src/lib/eina_sched.c19
-rw-r--r--libraries/eina/src/lib/eina_share_common.c42
-rw-r--r--libraries/eina/src/lib/eina_share_common.h21
-rw-r--r--libraries/eina/src/lib/eina_stringshare.c77
-rw-r--r--libraries/eina/src/lib/eina_unicode.c55
-rw-r--r--libraries/eina/src/lib/eina_ustringshare.c69
-rw-r--r--libraries/eina/src/lib/eina_value.c453
-rw-r--r--libraries/eina/src/modules/Makefile.in38
-rw-r--r--libraries/eina/src/modules/mp/Makefile.in38
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c2
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/one_big/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/one_big/Makefile.in39
-rw-r--r--libraries/eina/src/modules/mp/one_big/eina_one_big.c2
-rw-r--r--libraries/eina/src/modules/mp/pass_through/Makefile.am1
-rw-r--r--libraries/eina/src/modules/mp/pass_through/Makefile.in39
-rw-r--r--libraries/eina/src/tests/Makefile.am3
-rw-r--r--libraries/eina/src/tests/Makefile.in48
-rw-r--r--libraries/eina/src/tests/eina_suite.c3
-rw-r--r--libraries/eina/src/tests/eina_suite.h1
-rw-r--r--libraries/eina/src/tests/eina_test_clist.c2
-rw-r--r--libraries/eina/src/tests/eina_test_counter.c92
-rw-r--r--libraries/eina/src/tests/eina_test_error.c184
-rw-r--r--libraries/eina/src/tests/eina_test_file.c54
-rw-r--r--libraries/eina/src/tests/eina_test_inlist.c171
-rw-r--r--libraries/eina/src/tests/eina_test_list.c40
-rw-r--r--libraries/eina/src/tests/eina_test_log.c217
-rw-r--r--libraries/eina/src/tests/eina_test_magic.c110
-rw-r--r--libraries/eina/src/tests/eina_test_simple_xml_parser.c6
-rw-r--r--libraries/eina/src/tests/eina_test_ustr.c130
-rw-r--r--libraries/eina/src/tests/eina_test_value.c109
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@
36subdir = src 36subdir = src
37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
39am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 39am__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
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4) 58 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d 59mkinstalldirs = $(install_sh) -d
@@ -150,13 +154,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
150EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 154EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
151EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 155EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
152EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 156EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
157EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
153EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 158EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
154EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 159EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
155EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 160EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
156EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 161EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
157EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 162EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
158EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 163EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
159EINA_CPPFLAGS = @EINA_CPPFLAGS@
160EINA_LIBS = @EINA_LIBS@ 164EINA_LIBS = @EINA_LIBS@
161EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 165EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
162EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 166EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -166,6 +170,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
166EVIL_CFLAGS = @EVIL_CFLAGS@ 170EVIL_CFLAGS = @EVIL_CFLAGS@
167EVIL_LIBS = @EVIL_LIBS@ 171EVIL_LIBS = @EVIL_LIBS@
168EXEEXT = @EXEEXT@ 172EXEEXT = @EXEEXT@
173EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
174EXOTIC_LIBS = @EXOTIC_LIBS@
169FGREP = @FGREP@ 175FGREP = @FGREP@
170GLIB_CFLAGS = @GLIB_CFLAGS@ 176GLIB_CFLAGS = @GLIB_CFLAGS@
171GLIB_LIBS = @GLIB_LIBS@ 177GLIB_LIBS = @GLIB_LIBS@
@@ -201,6 +207,8 @@ PACKAGE_URL = @PACKAGE_URL@
201PACKAGE_VERSION = @PACKAGE_VERSION@ 207PACKAGE_VERSION = @PACKAGE_VERSION@
202PATH_SEPARATOR = @PATH_SEPARATOR@ 208PATH_SEPARATOR = @PATH_SEPARATOR@
203PKG_CONFIG = @PKG_CONFIG@ 209PKG_CONFIG = @PKG_CONFIG@
210PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
211PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
204RANLIB = @RANLIB@ 212RANLIB = @RANLIB@
205SED = @SED@ 213SED = @SED@
206SET_MAKE = @SET_MAKE@ 214SET_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
42examples_PROGRAMS = 49examples_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
93eina_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
78if BUILD_TILER_EXAMPLE 102if BUILD_TILER_EXAMPLE
79AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@ 103AM_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
69subdir = src/examples 77subdir = src/examples
70DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 78DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
71ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 79ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
72am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 80am__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
86am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 98am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
87 $(ACLOCAL_M4) 99 $(ACLOCAL_M4)
88mkinstalldirs = $(install_sh) -d 100mkinstalldirs = $(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)
119am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)" 139am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)"
120PROGRAMS = $(examples_PROGRAMS) 140PROGRAMS = $(examples_PROGRAMS)
@@ -173,6 +193,10 @@ eina_hash_08_SOURCES = eina_hash_08.c
173eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT) 193eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT)
174eina_hash_08_LDADD = $(LDADD) 194eina_hash_08_LDADD = $(LDADD)
175eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la 195eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
196eina_inarray_01_SOURCES = eina_inarray_01.c
197eina_inarray_01_OBJECTS = eina_inarray_01.$(OBJEXT)
198eina_inarray_01_LDADD = $(LDADD)
199eina_inarray_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
176eina_inlist_01_SOURCES = eina_inlist_01.c 200eina_inlist_01_SOURCES = eina_inlist_01.c
177eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT) 201eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT)
178eina_inlist_01_LDADD = $(LDADD) 202eina_inlist_01_LDADD = $(LDADD)
@@ -217,6 +241,32 @@ eina_log_03_SOURCES = eina_log_03.c
217eina_log_03_OBJECTS = eina_log_03.$(OBJEXT) 241eina_log_03_OBJECTS = eina_log_03.$(OBJEXT)
218eina_log_03_LDADD = $(LDADD) 242eina_log_03_LDADD = $(LDADD)
219eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la 243eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
244eina_model_01_SOURCES = eina_model_01.c
245eina_model_01_OBJECTS = eina_model_01.$(OBJEXT)
246eina_model_01_LDADD = $(LDADD)
247eina_model_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
248eina_model_02_SOURCES = eina_model_02.c
249eina_model_02_OBJECTS = eina_model_02.$(OBJEXT)
250eina_model_02_LDADD = $(LDADD)
251eina_model_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
252eina_model_03_SOURCES = eina_model_03.c
253eina_model_03_OBJECTS = eina_model_03.$(OBJEXT)
254eina_model_03_LDADD = $(LDADD)
255eina_model_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
256am__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)
267eina_model_04_OBJECTS = $(am_eina_model_04_OBJECTS)
268eina_model_04_LDADD = $(LDADD)
269eina_model_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
220eina_str_01_SOURCES = eina_str_01.c 270eina_str_01_SOURCES = eina_str_01.c
221eina_str_01_OBJECTS = eina_str_01.$(OBJEXT) 271eina_str_01_OBJECTS = eina_str_01.$(OBJEXT)
222eina_str_01_LDADD = $(LDADD) 272eina_str_01_LDADD = $(LDADD)
@@ -228,6 +278,18 @@ eina_strbuf_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
228eina_tiler_01_SOURCES = eina_tiler_01.c 278eina_tiler_01_SOURCES = eina_tiler_01.c
229eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT) 279eina_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
281eina_value_01_SOURCES = eina_value_01.c
282eina_value_01_OBJECTS = eina_value_01.$(OBJEXT)
283eina_value_01_LDADD = $(LDADD)
284eina_value_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
285eina_value_02_SOURCES = eina_value_02.c
286eina_value_02_OBJECTS = eina_value_02.$(OBJEXT)
287eina_value_02_LDADD = $(LDADD)
288eina_value_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
289eina_value_03_SOURCES = eina_value_03.c
290eina_value_03_OBJECTS = eina_value_03.$(OBJEXT)
291eina_value_03_LDADD = $(LDADD)
292eina_value_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
231DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 293DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
232depcomp = $(SHELL) $(top_srcdir)/depcomp 294depcomp = $(SHELL) $(top_srcdir)/depcomp
233am__depfiles_maybe = depfiles 295am__depfiles_maybe = depfiles
@@ -257,19 +319,25 @@ am__v_GEN_0 = @echo " GEN " $@;
257SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ 319SOURCES = 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
265DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ 330DIST_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
273am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; 341am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
274am__vpath_adj = case $$p in \ 342am__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@
340EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 408EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
341EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 409EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
342EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 410EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
411EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
343EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 412EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
344EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 413EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
345EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 414EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
346EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 415EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
347EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 416EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
348EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 417EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
349EINA_CPPFLAGS = @EINA_CPPFLAGS@
350EINA_LIBS = @EINA_LIBS@ 418EINA_LIBS = @EINA_LIBS@
351EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 419EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
352EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 420EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -356,6 +424,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
356EVIL_CFLAGS = @EVIL_CFLAGS@ 424EVIL_CFLAGS = @EVIL_CFLAGS@
357EVIL_LIBS = @EVIL_LIBS@ 425EVIL_LIBS = @EVIL_LIBS@
358EXEEXT = @EXEEXT@ 426EXEEXT = @EXEEXT@
427EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
428EXOTIC_LIBS = @EXOTIC_LIBS@
359FGREP = @FGREP@ 429FGREP = @FGREP@
360GLIB_CFLAGS = @GLIB_CFLAGS@ 430GLIB_CFLAGS = @GLIB_CFLAGS@
361GLIB_LIBS = @GLIB_LIBS@ 431GLIB_LIBS = @GLIB_LIBS@
@@ -391,6 +461,8 @@ PACKAGE_URL = @PACKAGE_URL@
391PACKAGE_VERSION = @PACKAGE_VERSION@ 461PACKAGE_VERSION = @PACKAGE_VERSION@
392PATH_SEPARATOR = @PATH_SEPARATOR@ 462PATH_SEPARATOR = @PATH_SEPARATOR@
393PKG_CONFIG = @PKG_CONFIG@ 463PKG_CONFIG = @PKG_CONFIG@
464PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
465PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
394RANLIB = @RANLIB@ 466RANLIB = @RANLIB@
395SED = @SED@ 467SED = @SED@
396SET_MAKE = @SET_MAKE@ 468SET_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@
506all: all-am 593all: all-am
507 594
@@ -619,6 +706,9 @@ eina_hash_07$(EXEEXT): $(eina_hash_07_OBJECTS) $(eina_hash_07_DEPENDENCIES)
619eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES) 706eina_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)
709eina_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)
622eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES) 712eina_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)
652eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES) 742eina_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)
745eina_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)
748eina_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)
751eina_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)
754eina_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)
655eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES) 757eina_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
661eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES) 763eina_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)
766eina_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)
769eina_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)
772eina_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
665mostlyclean-compile: 776mostlyclean-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 \
64eina_mmap.h \ 64eina_mmap.h \
65eina_xattr.h \ 65eina_xattr.h \
66eina_value.h \ 66eina_value.h \
67eina_inline_value.x 67eina_inline_value.x \
68eina_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
48ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 48ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
49am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 49am__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
63am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 67am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
64 $(ACLOCAL_M4) 68 $(ACLOCAL_M4)
65mkinstalldirs = $(install_sh) -d 69mkinstalldirs = $(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
99am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; 103am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
100am__vpath_adj = case $$p in \ 104am__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@
167EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 171EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
168EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 172EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
169EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 173EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
174EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
170EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 175EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
171EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 176EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
172EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 177EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
173EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 178EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
174EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 179EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
175EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 180EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
176EINA_CPPFLAGS = @EINA_CPPFLAGS@
177EINA_LIBS = @EINA_LIBS@ 181EINA_LIBS = @EINA_LIBS@
178EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 182EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
179EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 183EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -183,6 +187,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
183EVIL_CFLAGS = @EVIL_CFLAGS@ 187EVIL_CFLAGS = @EVIL_CFLAGS@
184EVIL_LIBS = @EVIL_LIBS@ 188EVIL_LIBS = @EVIL_LIBS@
185EXEEXT = @EXEEXT@ 189EXEEXT = @EXEEXT@
190EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
191EXOTIC_LIBS = @EXOTIC_LIBS@
186FGREP = @FGREP@ 192FGREP = @FGREP@
187GLIB_CFLAGS = @GLIB_CFLAGS@ 193GLIB_CFLAGS = @GLIB_CFLAGS@
188GLIB_LIBS = @GLIB_LIBS@ 194GLIB_LIBS = @GLIB_LIBS@
@@ -218,6 +224,8 @@ PACKAGE_URL = @PACKAGE_URL@
218PACKAGE_VERSION = @PACKAGE_VERSION@ 224PACKAGE_VERSION = @PACKAGE_VERSION@
219PATH_SEPARATOR = @PATH_SEPARATOR@ 225PATH_SEPARATOR = @PATH_SEPARATOR@
220PKG_CONFIG = @PKG_CONFIG@ 226PKG_CONFIG = @PKG_CONFIG@
227PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
228PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
221RANLIB = @RANLIB@ 229RANLIB = @RANLIB@
222SED = @SED@ 230SED = @SED@
223SET_MAKE = @SET_MAKE@ 231SET_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)
316installed_mainheaderdir = $(includedir)/eina-@VMAJ@ 324installed_mainheaderdir = $(includedir)/eina-@VMAJ@
317dist_installed_mainheader_DATA = Eina.h eina_config.h 325dist_installed_mainheader_DATA = Eina.h eina_config.h
318installed_headersdir = $(includedir)/eina-@VMAJ@/eina 326installed_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,
351static inline void eina_array_data_set(const Eina_Array *array, 351static 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);
354static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED; 354static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
355static inline unsigned int eina_array_count(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; 355static 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 @@
91typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; 92typedef 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 */
99typedef 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 */
164struct _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
247EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 280EAPI 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 */
298EAPI 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
24typedef CRITICAL_SECTION Eina_Lock; 24typedef CRITICAL_SECTION Eina_Lock;
25typedef struct _Eina_Condition Eina_Condition; 25typedef struct _Eina_Condition Eina_Condition;
26typedef struct _Eina_RWLock Eina_RWLock;
27typedef DWORD Eina_TLS;
28typedef HANDLE Eina_Semaphore;
26 29
27#if _WIN32_WINNT >= 0x0600 30#if _WIN32_WINNT >= 0x0600
28struct _Eina_Condition 31struct _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
37struct _Eina_RWLock
38{
39 SRWLOCK mutex;
40
41 Eina_Bool is_read_mode : 1;
42};
33#else 43#else
34struct _Eina_Condition 44struct _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
45typedef struct _Eina_Win32_RWLock Eina_RWLock; 54struct _Eina_RWLock
46
47struct _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
59typedef DWORD Eina_TLS;
60
61typedef HANDLE Eina_Semaphore;
62 67
63EAPI extern Eina_Bool _eina_threads_activated; 68EAPI extern Eina_Bool _eina_threads_activated;
64 69
70
65static inline Eina_Bool 71static inline Eina_Bool
66eina_lock_new(Eina_Lock *mutex) 72eina_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
151static inline void 157static 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
317static inline Eina_Bool 324static inline Eina_Bool
318eina_rwlock_new(Eina_RWLock *mutex) 325eina_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
335static inline void 352static inline void
336eina_rwlock_free(Eina_RWLock *mutex) 353eina_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
343static inline Eina_Lock_Result 364static inline Eina_Lock_Result
344eina_rwlock_take_read(Eina_RWLock *mutex) 365eina_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)
371static inline Eina_Lock_Result 397static inline Eina_Lock_Result
372eina_rwlock_take_write(Eina_RWLock *mutex) 398eina_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)
398static inline Eina_Lock_Result 429static inline Eina_Lock_Result
399eina_rwlock_release(Eina_RWLock *mutex) 430eina_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 */
45static inline Eina_Bool 45static inline Eina_Bool
46eina_stringshare_replace(const char **p_str, const char *news) 46eina_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 */
74static inline Eina_Bool 74static inline Eina_Bool
75eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) 75eina_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
622static inline Eina_Bool 622static 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
764static inline Eina_Bool 755static 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
826static inline Eina_Bool
827eina_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
944static inline Eina_Bool 949static 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
1120static inline Eina_Bool 1116static 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
1316static inline Eina_Bool 1307static 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
1403static inline Eina_Bool 1389static 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
1488static inline Eina_Bool 1466static 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
1566static inline Eina_Bool 1537static 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
1562static inline Eina_Bool
1563eina_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
1591static inline Eina_Bool
1592eina_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
1622static inline Eina_Bool
1623eina_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
1647static inline Eina_Bool
1648eina_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 */
923EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; 923EAPI 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 */
173typedef 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 */
171EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT; 194EAPI 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 */
191EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT; 214EAPI 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 */
212EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2); 235EAPI 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 */
234EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT; 257EAPI 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 */
254EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3); 277EAPI 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 */
270EAPI const char *eina_stringshare_ref(const char *str); 293EAPI 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 */
285EAPI void eina_stringshare_del(const char *str); 308EAPI 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 */
299EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_WARN_UNUSED_RESULT; 322EAPI 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 */
307EAPI void eina_stringshare_dump(void); 330EAPI void eina_stringshare_dump(void);
308 331
309static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1); 332static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) EINA_ARG_NONNULL(1);
310static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1); 333static 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 */
72typedef union _Eina_Value_Union Eina_Value_Union; 325typedef 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 */
80union _Eina_Value_Union 336union _Eina_Value_Union
@@ -117,6 +373,15 @@ EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT;
117EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG; 373EAPI 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 */
382EAPI 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;
324EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT; 592EAPI 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 */
609EAPI 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 */
819typedef struct _Eina_Value_Array Eina_Value_Array; 1105typedef 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 */
825struct _Eina_Value_Array 1112struct _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 */
1734static 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 */
1453typedef struct _Eina_Value_List Eina_Value_List; 1757typedef 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 */
1459struct _Eina_Value_List 1764struct _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 */
2074typedef struct _Eina_Value_Hash Eina_Value_Hash; 2380typedef 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 */
2080struct _Eina_Value_Hash 2387struct _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 */
2414typedef struct _Eina_Value_Blob_Operations Eina_Value_Blob_Operations; 2722typedef 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 */
2421struct _Eina_Value_Blob_Operations 2735struct _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 */
2446typedef struct _Eina_Value_Blob Eina_Value_Blob; 2762typedef 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 */
2452struct _Eina_Value_Blob 2769struct _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 */
2474typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations; 2796typedef 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 */
2481typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member; 2809typedef 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 */
2488typedef struct _Eina_Value_Struct_Desc Eina_Value_Struct_Desc; 2817typedef 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 */
2494typedef struct _Eina_Value_Struct Eina_Value_Struct; 2826typedef 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 */
2501struct _Eina_Value_Struct_Operations 2839struct _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 */
2544struct _Eina_Value_Struct_Member 2895struct _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 */
2555struct _Eina_Value_Struct_Desc 2918struct _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 */
2591struct _Eina_Value_Struct 2954struct _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 */
2703static inline Eina_Bool eina_value_struct_set(Eina_Value *value, 3066static 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 */
2771static inline Eina_Bool eina_value_struct_get(const Eina_Value *value, 3134static 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 */
2787static inline Eina_Bool eina_value_struct_vset(Eina_Value *value, 3150static 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 */
2809static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value, 3172static 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 */
2876static inline Eina_Bool eina_value_struct_pset(Eina_Value *value, 3239static 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 */
2945static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value, 3308static 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 */
3323static 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 */
3335static 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 */
3350static 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 */
3362static 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 */
2966struct _Eina_Value_Type 3390struct _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
12base_sources = \ 12base_sources = \
13eina_accessor.c \ 13eina_accessor.c \
@@ -33,6 +33,7 @@ eina_main.c \
33eina_matrixsparse.c \ 33eina_matrixsparse.c \
34eina_mempool.c \ 34eina_mempool.c \
35eina_mmap.c \ 35eina_mmap.c \
36eina_model.c \
36eina_module.c \ 37eina_module.c \
37eina_prefix.c \ 38eina_prefix.c \
38eina_quadtree.c \ 39eina_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@
49subdir = src/lib 49subdir = src/lib
50DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 50DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
51ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 51ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
52am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 52am__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
66am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 70am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
67 $(ACLOCAL_M4) 71 $(ACLOCAL_M4)
68mkinstalldirs = $(install_sh) -d 72mkinstalldirs = $(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@
236EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 240EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
237EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 241EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
238EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 242EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
243EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
239EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 244EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
240EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 245EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
241EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 246EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
242EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 247EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
243EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 248EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
244EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 249EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
245EINA_CPPFLAGS = @EINA_CPPFLAGS@
246EINA_LIBS = @EINA_LIBS@ 250EINA_LIBS = @EINA_LIBS@
247EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 251EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
248EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 252EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -252,6 +256,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
252EVIL_CFLAGS = @EVIL_CFLAGS@ 256EVIL_CFLAGS = @EVIL_CFLAGS@
253EVIL_LIBS = @EVIL_LIBS@ 257EVIL_LIBS = @EVIL_LIBS@
254EXEEXT = @EXEEXT@ 258EXEEXT = @EXEEXT@
259EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
260EXOTIC_LIBS = @EXOTIC_LIBS@
255FGREP = @FGREP@ 261FGREP = @FGREP@
256GLIB_CFLAGS = @GLIB_CFLAGS@ 262GLIB_CFLAGS = @GLIB_CFLAGS@
257GLIB_LIBS = @GLIB_LIBS@ 263GLIB_LIBS = @GLIB_LIBS@
@@ -287,6 +293,8 @@ PACKAGE_URL = @PACKAGE_URL@
287PACKAGE_VERSION = @PACKAGE_VERSION@ 293PACKAGE_VERSION = @PACKAGE_VERSION@
288PATH_SEPARATOR = @PATH_SEPARATOR@ 294PATH_SEPARATOR = @PATH_SEPARATOR@
289PKG_CONFIG = @PKG_CONFIG@ 295PKG_CONFIG = @PKG_CONFIG@
296PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
297PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
290RANLIB = @RANLIB@ 298RANLIB = @RANLIB@
291SED = @SED@ 299SED = @SED@
292SET_MAKE = @SET_MAKE@ 300SET_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
373base_sources = eina_accessor.c eina_array.c eina_benchmark.c \ 381base_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)
387EXTRA_DIST = \ 396EXTRA_DIST = \
388eina_share_common.h \ 397eina_share_common.h \
389eina_private.h \ 398eina_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
745libeina_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
735libeina_la-eina_module.lo: eina_module.c 753libeina_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
61static int _eina_share_binshare_log_dom = -1;
62
37/* The actual share */ 63/* The actual share */
38static Eina_Share *binshare_share; 64static Eina_Share *binshare_share;
39static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; 65static 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";
61EAPI Eina_Bool 86EAPI Eina_Bool
62eina_binshare_init(void) 87eina_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
102EAPI const void * 157EAPI 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)
362static Eina_Bool 362static 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
596Eina_Bool 578Eina_Bool
597eina_file_init(void) 579eina_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/** 626void
645 * @endcond 627eina_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
1217eina_file_map_faulted(Eina_File *file, void *map) 1246eina_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
1233EAPI Eina_Iterator * 1270EAPI 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
1249void 1286EAPI int
1250eina_file_mmap_faulty(void *addr, long page_size) 1287eina_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
35extern "C" 35extern "C"
36# endif 36# endif
37void *alloca (size_t); 37void *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
88typedef struct _Eina_File_Iterator Eina_File_Iterator; 88#ifdef MAP_FAILED
89typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; 89# undef MAP_FAILED
90typedef struct _Eina_File_Map Eina_File_Map; 90#endif
91 91#define MAP_FAILED ((void *)-1)
92struct _Eina_File_Iterator 92
93{ 93typedef struct _Eina_File_Iterator Eina_File_Iterator;
94 Eina_Iterator iterator; 94typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator;
95 95typedef struct _Eina_File_Map Eina_File_Map;
96 WIN32_FIND_DATA data; 96
97 HANDLE handle; 97struct _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;
104struct _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; 109struct _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
118struct _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; 123struct _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
139struct _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; 146struct _Eina_File_Map
147}; 147{
148 148 void *map;
149static Eina_Hash *_eina_file_cache = NULL; 149
150static Eina_List *_eina_file_cache_lru = NULL; 150 unsigned long int offset;
151static Eina_List *_eina_file_cache_delete = NULL; 151 unsigned long int length;
152 152
153static int _eina_file_log_dom = -1; 153 int refcount;
154 154};
155static void 155
156_eina_file_win32_backslash_change(char *dir) 156static Eina_Hash *_eina_file_cache = NULL;
157{ 157static Eina_Lock _eina_file_lock_cache;
158 char *tmp; 158
159 159static int _eina_file_log_dom = -1;
160 tmp = dir; 160
161 while (*tmp) 161static 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)
168static 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; 174static 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
197static 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); 203static 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);
216static 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 222static 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))
247static 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; 253static 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
313static 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
319static void 319static 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); 325static 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)
329static 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; 335static 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
427static 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
433static void 433static 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); 439static 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)
443static 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) 449static 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);
460static 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); 464static void
465 free(map); 465_eina_file_map_close(Eina_File_Map *map)
466} 466{
467 467 if (map->map != MAP_FAILED)
468static 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} 472static unsigned int
473 473_eina_file_map_key_length(const void *key __UNUSED__)
474static 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]; 478static 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{
482static 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)); 486static int
487} 487_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__)
488 488{
489Eina_Bool 489 return eina_hash_int64(&key[0], sizeof (unsigned long int))
490eina_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); 493static 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 {
512Eina_Bool 512 memmove(p, p + 1, --len - (p - result));
513eina_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;
555EAPI Eina_Bool 555 }
556eina_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) 573Eina_Bool
574 return EINA_FALSE; 574eina_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 598Eina_Bool
599 path = alloca(strlen(dir) + strlen(filename) + 2); 599eina_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}
620EAPI Eina_Array * 620
621eina_file_split(char *path) 621/*============================================================================*
622{ 622 * API *
623 Eina_Array *ea; 623 *============================================================================*/
624 char *current; 624
625 size_t length; 625
626 626EAPI char *
627 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); 627eina_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
653EAPI Eina_Iterator * 653 len += l + 2;
654eina_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 665EAPI Eina_Bool
666 length = strlen(dir); 666eina_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
703EAPI Eina_Iterator * 703 cb(filename, dir, data);
704eina_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) 730EAPI Eina_Array *
731 goto free_it; 731eina_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
760EAPI Eina_Iterator * 760 return ea;
761eina_file_stat_ls(const char *dir) 761}
762{ 762
763 return eina_file_direct_ls(dir); 763EAPI Eina_Iterator *
764} 764eina_file_ls(const char *dir)
765 765{
766EAPI Eina_File * 766 Eina_File_Iterator *it;
767eina_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 { 815EAPI Eina_Iterator *
816 _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file); 816eina_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 874EAPI Eina_Iterator *
875EAPI void 875eina_file_stat_ls(const char *dir)
876eina_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 ; 880EAPI Eina_File *
881 881eina_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);
893EAPI size_t 893
894eina_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
899EAPI time_t 899 if (shared)
900eina_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
905EAPI const char * 905 handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
906eina_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;
911EAPI void * 911
912eina_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 }
935EAPI void * 935
936eina_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}
989EAPI void 989
990eina_file_map_free(Eina_File *file, void *map) 990EAPI void
991{ 991eina_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); 1008EAPI size_t
1009 if (!em) return ; 1009eina_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; 1015EAPI time_t
1016 key[1] = em->length; 1016eina_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
1022EAPI const char *
1023eina_file_filename_get(Eina_File *file)
1024{
1025 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1026 return file->filename;
1027}
1028
1029EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file __UNUSED__)
1030{
1031 return NULL;
1032}
1033
1034EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file __UNUSED__)
1035{
1036 return NULL;
1037}
1038
1039EAPI void *
1040eina_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
1067EAPI void *
1068eina_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
1132EAPI void
1133eina_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
1171EAPI int
1172eina_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
1028EAPI Eina_List * 1028EAPI Eina_List *
1029eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) 1029eina_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
158struct eina_desc_setup 160struct 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};
195static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / 198static 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
43extern "C" 43extern "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
357end_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
47EAPI void 47EAPI 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, &param); 74 pthread_setschedparam(pthread_id, pol, &param);
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;
126typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node; 125typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node;
127typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; 126typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head;
128 127
129int _eina_share_common_log_dom = -1;
130
131struct _Eina_Share 128struct _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
836void 808Eina_Bool
837eina_share_common_del(Eina_Share *share, const char *str) 809eina_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
891on_error: 863on_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
897int 869int
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)
72EINA_WARN_UNUSED_RESULT; 72EINA_WARN_UNUSED_RESULT;
73const char *eina_share_common_ref(Eina_Share *share, const char *str); 73const char *eina_share_common_ref(Eina_Share *share, const char *str);
74void eina_share_common_del(Eina_Share *share, const char *str); 74Eina_Bool eina_share_common_del(Eina_Share *share, const char *str) EINA_WARN_UNUSED_RESULT;
75int eina_share_common_length(Eina_Share *share, 75int eina_share_common_length(Eina_Share *share,
76 const char *str) EINA_CONST 76 const char *str) EINA_CONST
77EINA_WARN_UNUSED_RESULT; 77EINA_WARN_UNUSED_RESULT;
@@ -83,21 +83,4 @@ void eina_share_common_dump(Eina_Share *share, void (*additional_dump)(
83void eina_share_common_population_add(Eina_Share *share, int slen); 83void eina_share_common_population_add(Eina_Share *share, int slen);
84void eina_share_common_population_del(Eina_Share *share, int slen); 84void 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__)
101extern 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
81static int _eina_share_stringshare_log_dom = -1;
64 82
65/* The actual share */ 83/* The actual share */
66static Eina_Share *stringshare_share; 84static 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
500eina_stringshare_init(void) 515eina_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
536EAPI void 576EAPI void
537eina_stringshare_del(const char *str) 577eina_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
570EAPI const char * 611EAPI Eina_Stringshare *
571eina_stringshare_add_length(const char *str, unsigned int slen) 612eina_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
591EAPI const char * 632EAPI Eina_Stringshare *
592eina_stringshare_add(const char *str) 633eina_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
612EAPI const char * 653EAPI Eina_Stringshare *
613eina_stringshare_printf(const char *fmt, ...) 654eina_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
636EAPI const char * 677EAPI Eina_Stringshare *
637eina_stringshare_vprintf(const char *fmt, va_list args) 678eina_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
657EAPI const char * 698EAPI Eina_Stringshare *
658eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) 699eina_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
682EAPI const char * 723EAPI Eina_Stringshare *
683eina_stringshare_ref(const char *str) 724eina_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
723EAPI int 764EAPI int
724eina_stringshare_strlen(const char *str) 765eina_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;
30EAPI int 38EAPI int
31eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) 39eina_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
67eina_unicode_strlen(const Eina_Unicode *ustr) 84eina_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:
266EAPI Eina_Unicode 301EAPI Eina_Unicode
267eina_unicode_utf8_get_prev(const char *buf, int *iindex) 302eina_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
60static int _eina_share_ustringshare_log_dom = -1;
61
35/* The actual share */ 62/* The actual share */
36static Eina_Share *ustringshare_share; 63static Eina_Share *ustringshare_share;
37static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; 64static 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";
54Eina_Bool 81Eina_Bool
55eina_ustringshare_init(void) 82eina_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
94EAPI const Eina_Unicode * 151EAPI 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
2608static Eina_Bool 2631static 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
2934static Eina_Bool 2965static 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
3290static Eina_Bool 3340static 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
3957static Eina_Bool 4034static 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
4041static 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
4238static Eina_Bool 4339static 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
4277static Eina_Bool 4420static 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
4450static 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
4458static 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
4470static 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
4482static 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
4494static 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
4518static 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
4533static 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
4550static 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
4559static 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;
4800EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL; 5083EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL;
4801EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL; 5084EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL;
4802EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL; 5085EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL;
5086EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP = NULL;
4803EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL; 5087EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL;
4804EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL; 5088EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL;
4805EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL; 5089EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL;
@@ -4816,6 +5100,7 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL;
4816EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL; 5100EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL;
4817EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL; 5101EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
4818EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL; 5102EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
5103EAPI const Eina_Value_Type *EINA_VALUE_TYPE_MODEL = NULL;
4819 5104
4820EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL; 5105EAPI 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@
36subdir = src/modules 36subdir = src/modules
37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
39am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 39am__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
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4) 58 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d 59mkinstalldirs = $(install_sh) -d
@@ -150,13 +154,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
150EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 154EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
151EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 155EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
152EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 156EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
157EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
153EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 158EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
154EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 159EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
155EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 160EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
156EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 161EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
157EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 162EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
158EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 163EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
159EINA_CPPFLAGS = @EINA_CPPFLAGS@
160EINA_LIBS = @EINA_LIBS@ 164EINA_LIBS = @EINA_LIBS@
161EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 165EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
162EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 166EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -166,6 +170,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
166EVIL_CFLAGS = @EVIL_CFLAGS@ 170EVIL_CFLAGS = @EVIL_CFLAGS@
167EVIL_LIBS = @EVIL_LIBS@ 171EVIL_LIBS = @EVIL_LIBS@
168EXEEXT = @EXEEXT@ 172EXEEXT = @EXEEXT@
173EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
174EXOTIC_LIBS = @EXOTIC_LIBS@
169FGREP = @FGREP@ 175FGREP = @FGREP@
170GLIB_CFLAGS = @GLIB_CFLAGS@ 176GLIB_CFLAGS = @GLIB_CFLAGS@
171GLIB_LIBS = @GLIB_LIBS@ 177GLIB_LIBS = @GLIB_LIBS@
@@ -201,6 +207,8 @@ PACKAGE_URL = @PACKAGE_URL@
201PACKAGE_VERSION = @PACKAGE_VERSION@ 207PACKAGE_VERSION = @PACKAGE_VERSION@
202PATH_SEPARATOR = @PATH_SEPARATOR@ 208PATH_SEPARATOR = @PATH_SEPARATOR@
203PKG_CONFIG = @PKG_CONFIG@ 209PKG_CONFIG = @PKG_CONFIG@
210PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
211PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
204RANLIB = @RANLIB@ 212RANLIB = @RANLIB@
205SED = @SED@ 213SED = @SED@
206SET_MAKE = @SET_MAKE@ 214SET_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@
43subdir = src/modules/mp 43subdir = src/modules/mp
44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
46am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 46am__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
60am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 64am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
61 $(ACLOCAL_M4) 65 $(ACLOCAL_M4)
62mkinstalldirs = $(install_sh) -d 66mkinstalldirs = $(install_sh) -d
@@ -158,13 +162,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
158EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 162EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
159EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 163EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
160EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 164EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
165EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
161EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 166EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
162EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 167EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
163EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 168EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
164EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 169EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
165EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 170EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
166EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 171EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
167EINA_CPPFLAGS = @EINA_CPPFLAGS@
168EINA_LIBS = @EINA_LIBS@ 172EINA_LIBS = @EINA_LIBS@
169EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 173EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
170EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 174EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -174,6 +178,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
174EVIL_CFLAGS = @EVIL_CFLAGS@ 178EVIL_CFLAGS = @EVIL_CFLAGS@
175EVIL_LIBS = @EVIL_LIBS@ 179EVIL_LIBS = @EVIL_LIBS@
176EXEEXT = @EXEEXT@ 180EXEEXT = @EXEEXT@
181EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
182EXOTIC_LIBS = @EXOTIC_LIBS@
177FGREP = @FGREP@ 183FGREP = @FGREP@
178GLIB_CFLAGS = @GLIB_CFLAGS@ 184GLIB_CFLAGS = @GLIB_CFLAGS@
179GLIB_LIBS = @GLIB_LIBS@ 185GLIB_LIBS = @GLIB_LIBS@
@@ -209,6 +215,8 @@ PACKAGE_URL = @PACKAGE_URL@
209PACKAGE_VERSION = @PACKAGE_VERSION@ 215PACKAGE_VERSION = @PACKAGE_VERSION@
210PATH_SEPARATOR = @PATH_SEPARATOR@ 216PATH_SEPARATOR = @PATH_SEPARATOR@
211PKG_CONFIG = @PKG_CONFIG@ 217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
212RANLIB = @RANLIB@ 220RANLIB = @RANLIB@
213SED = @SED@ 221SED = @SED@
214SET_MAKE = @SET_MAKE@ 222SET_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
12controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) 11controllerdir = $(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@
37subdir = src/modules/mp/buddy 37subdir = src/modules/mp/buddy
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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
303controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) 310controllerdir = $(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@
37subdir = src/modules/mp/chained_pool 37subdir = src/modules/mp/chained_pool
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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@
37subdir = src/modules/mp/ememoa_fixed 37subdir = src/modules/mp/ememoa_fixed
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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@
37subdir = src/modules/mp/ememoa_unknown 37subdir = src/modules/mp/ememoa_unknown
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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
12controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) 11controllerdir = $(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@
37subdir = src/modules/mp/fixed_bitmap 37subdir = src/modules/mp/fixed_bitmap
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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
303controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) 310controllerdir = $(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@
37subdir = src/modules/mp/one_big 37subdir = src/modules/mp/one_big
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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
12controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) 11controllerdir = $(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@
37subdir = src/modules/mp/pass_through 37subdir = src/modules/mp/pass_through
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 40am__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
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4) 59 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d 60mkinstalldirs = $(install_sh) -d
@@ -166,13 +170,13 @@ EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
167EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
168EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
169EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
170EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
171EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
172EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
173EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
174EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
175EINA_CPPFLAGS = @EINA_CPPFLAGS@
176EINA_LIBS = @EINA_LIBS@ 180EINA_LIBS = @EINA_LIBS@
177EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
178EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -182,6 +186,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
182EVIL_CFLAGS = @EVIL_CFLAGS@ 186EVIL_CFLAGS = @EVIL_CFLAGS@
183EVIL_LIBS = @EVIL_LIBS@ 187EVIL_LIBS = @EVIL_LIBS@
184EXEEXT = @EXEEXT@ 188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
185FGREP = @FGREP@ 191FGREP = @FGREP@
186GLIB_CFLAGS = @GLIB_CFLAGS@ 192GLIB_CFLAGS = @GLIB_CFLAGS@
187GLIB_LIBS = @GLIB_LIBS@ 193GLIB_LIBS = @GLIB_LIBS@
@@ -217,6 +223,8 @@ PACKAGE_URL = @PACKAGE_URL@
217PACKAGE_VERSION = @PACKAGE_VERSION@ 223PACKAGE_VERSION = @PACKAGE_VERSION@
218PATH_SEPARATOR = @PATH_SEPARATOR@ 224PATH_SEPARATOR = @PATH_SEPARATOR@
219PKG_CONFIG = @PKG_CONFIG@ 225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@ 228RANLIB = @RANLIB@
221SED = @SED@ 229SED = @SED@
222SET_MAKE = @SET_MAKE@ 230SET_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
303controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) 310controllerdir = $(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 \
66eina_test_str.c \ 66eina_test_str.c \
67eina_test_quadtree.c \ 67eina_test_quadtree.c \
68eina_test_simple_xml_parser.c \ 68eina_test_simple_xml_parser.c \
69eina_test_value.c 69eina_test_value.c \
70eina_test_model.c
70 71
71eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm 72eina_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@
43subdir = src/tests 43subdir = src/tests
44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in 44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
46am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ 46am__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
60am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 64am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
61 $(ACLOCAL_M4) 65 $(ACLOCAL_M4)
62mkinstalldirs = $(install_sh) -d 66mkinstalldirs = $(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)
199eina_suite_OBJECTS = $(am_eina_suite_OBJECTS) 205eina_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@
296EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@ 302EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
297EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ 303EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
298EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@ 304EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
305EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
299EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ 306EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
300EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ 307EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
301EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ 308EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
302EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ 309EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
303EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ 310EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
304EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ 311EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
305EINA_CPPFLAGS = @EINA_CPPFLAGS@
306EINA_LIBS = @EINA_LIBS@ 312EINA_LIBS = @EINA_LIBS@
307EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ 313EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
308EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ 314EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
@@ -312,6 +318,8 @@ ESCAPE_LIBS = @ESCAPE_LIBS@
312EVIL_CFLAGS = @EVIL_CFLAGS@ 318EVIL_CFLAGS = @EVIL_CFLAGS@
313EVIL_LIBS = @EVIL_LIBS@ 319EVIL_LIBS = @EVIL_LIBS@
314EXEEXT = @EXEEXT@ 320EXEEXT = @EXEEXT@
321EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
322EXOTIC_LIBS = @EXOTIC_LIBS@
315FGREP = @FGREP@ 323FGREP = @FGREP@
316GLIB_CFLAGS = @GLIB_CFLAGS@ 324GLIB_CFLAGS = @GLIB_CFLAGS@
317GLIB_LIBS = @GLIB_LIBS@ 325GLIB_LIBS = @GLIB_LIBS@
@@ -347,6 +355,8 @@ PACKAGE_URL = @PACKAGE_URL@
347PACKAGE_VERSION = @PACKAGE_VERSION@ 355PACKAGE_VERSION = @PACKAGE_VERSION@
348PATH_SEPARATOR = @PATH_SEPARATOR@ 356PATH_SEPARATOR = @PATH_SEPARATOR@
349PKG_CONFIG = @PKG_CONFIG@ 357PKG_CONFIG = @PKG_CONFIG@
358PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
359PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
350RANLIB = @RANLIB@ 360RANLIB = @RANLIB@
351SED = @SED@ 361SED = @SED@
352SET_MAKE = @SET_MAKE@ 362SET_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)
137static void _mempool_shutdown(void) 138static 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);
56void eina_test_sched(TCase *tc); 56void eina_test_sched(TCase *tc);
57void eina_test_simple_xml_parser(TCase *tc); 57void eina_test_simple_xml_parser(TCase *tc);
58void eina_test_value(TCase *tc); 58void eina_test_value(TCase *tc);
59void 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
12Eina_Clist string_list = EINA_CLIST_INIT(string_list); 12Eina_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
31struct 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
40static 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
30START_TEST(eina_counter_simple) 67START_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
36struct 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
45static 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
36START_TEST(eina_error_errno) 71START_TEST(eina_error_errno)
37{ 72{
38 int test; 73 int test;
@@ -52,8 +87,157 @@ START_TEST(eina_error_errno)
52} 87}
53END_TEST 88END_TEST
54 89
90START_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}
112END_TEST
113
114START_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}
149END_TEST
150
151START_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}
178END_TEST
179
180#ifdef EINA_SAFETY_CHECKS
181START_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}
230END_TEST
231#endif
232
55void 233void
56eina_test_error(TCase *tc) 234eina_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
32struct 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
41static 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
31START_TEST(eina_file_split_simple) 69START_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
38struct 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
47static 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
37static Eina_Test_Inlist * 74static 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}
339END_TEST 339END_TEST
340 340
341START_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}
378END_TEST
379
341void 380void
342eina_test_list(TCase *tc) 381eina_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) 30struct 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
42static 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
59static 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
75static 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
101START_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
47START_TEST(eina_log_domains_macros) 148START_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
121START_TEST(eina_log_level_indexes) 260START_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
142START_TEST(eina_log_customize) 313START_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
43struct 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
52static 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
78static 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
43START_TEST(eina_magic_simple) 104START_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}
90END_TEST 200END_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
32struct 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
41static 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
31static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; 68static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
32static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0}; 69static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0};
33static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; 70static 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}
1779END_TEST 1809END_TEST
1780 1810
1811
1812START_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}
1853END_TEST
1854
1781void 1855void
1782eina_test_value(TCase *tc) 1856eina_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}