svn update: 51457 (latest:51480)
authorJeahwan Kim <jae.hwan.kim@samsung.com>
Tue, 7 Sep 2010 23:56:42 +0000 (08:56 +0900)
committerJeahwan Kim <jae.hwan.kim@samsung.com>
Tue, 7 Sep 2010 23:56:42 +0000 (08:56 +0900)
29 files changed:
COPYING
ChangeLog
INSTALL
Makefile.am
README.in
configure.ac
debian/SVN_REV
eet.pc.in
m4/efl_threads.m4 [new file with mode: 0644]
src/bin/Makefile.am
src/bin/eet_main.c
src/examples/eet-data-file_descriptor.c
src/examples/eet-data-nested.c
src/examples/eet-data-simple.c
src/lib/Eet.h
src/lib/Eet_private.h
src/lib/Makefile.am
src/lib/eet_cipher.c
src/lib/eet_connection.c
src/lib/eet_data.c
src/lib/eet_dictionary.c
src/lib/eet_image.c
src/lib/eet_lib.c
src/lib/eet_node.c
src/lib/eet_utils.c
src/tests/Makefile.am
src/tests/eet_data_suite.c
src/tests/eet_suite.c
src/tests/eet_suite.h

diff --git a/COPYING b/COPYING
index 9690c3f..9371350 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,32 +1,25 @@
+Copyright notice for Eet:
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Copyright (C) 2002-2010 Carsten Haitzler and various contributors (see AUTHORS)
 
-The above copyright notice and this permission notice shall be included in
-all copies of the Software and its Copyright notices. In addition publicly
-documented acknowledgment must be given that this software has been used if no
-source code of this software is made available publicly. Making the source
-available publicly means including the source for this software with the
-distribution, or a method to get this software via some reasonable mechanism
-(electronic transfer via a network or media) as well as making an offer to
-supply the source on request. This Copyright notice serves as an offer to
-supply the source on on request as well. Instead of this, supplying
-acknowledgments of use of this software in either Copyright notices, Manuals,
-Publicity and Marketing documents or any documentation provided with any
-product containing this software. This License does not apply to any software
-that links to the libraries provided by this software (statically or
-dynamically), but only to the software provided.
+All rights reserved.
 
-Please see the COPYING-PLAIN for a plain-english explanation of this notice
-and its intent.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
index 7a8b089..ce4ec2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
         * Release eet 1.3.0
 
+2010-06-27  Carsten Haitzler (The Rasterman)
+
+        * Release eet 1.3.2
+
+2010-06-29  Vincent Torri
+
+        * On Windows 64, long is of size 32 bits and not 64 bits. Also
+       LONG_BIT is not defined on Windows.
+
+2010-06-29  Cedric BAIL
+
+       * Add eet_alias support.
+       * Fix possible dead lock in eet_write_cipher.
+
+2010-07-08  Carsten Haitzler (The Rasterman)
+
+        * Moved Eet.h into $includedir/eet-MAJOR_VERSION/
+
+2010-07-15  Vincent Torri
+
+        * Add native Windows thread support instead of using pthread
+       (less overhead). On other OS, pthread is still used by default.
+       Pass --enable-win32-threads to activate thread support on
+       Windows.
+
+2010-07-20  Cedric BAIL
+
+       * Improve file change detection in eet_open by checking size also.
+
+2010-08-02  Cedric BAIL
+
+       * Fix bug in eet_connection code when running on 32bits machine.
+
+2010-08-06  Cedric BAIL
+
+       * Add EET_DATA_DESCRIPTOR_ADD_HASH_STRING.
+
+2010-08-06  Cedric BAIL
+
+       * Break eet_eina_* function helper to provide a clean API/ABI to
+       prevent futur break. This should prevent the ABI break that was
+       introduced with release 1.3.0.
+
+       * Add a specific allocator for array. This should fix wrong allocation
+       case discovered with recent edje file format change.
diff --git a/INSTALL b/INSTALL
index df426ed..23e5f25 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-COMPILING and INSTALLING:
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
 
-If you got a official release tar archive do:
-    ./configure
+Specifying the System Type
+==========================
 
-( otherwise if you got this from enlightenment cvs do: ./autogen.sh )
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
 
-Then to compile:
-    make
+     CPU-COMPANY-SYSTEM
 
-To install (run this as root, or the user who handles installs):
-    make install
+where SYSTEM can have one of these forms:
 
-To run the unit tests (See Note 5 below):
-    make check
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
 
-To get the coverage report (See Notes 6 and 7 below):
-    make coverage
+Sharing Defaults
+================
 
-The report is created in the coverage/ subdir
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
 
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).  Here is a another example:
 
+     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
 
+`configure' Invocation
+======================
 
-NOTE 1: You MUST make install Eet for it to run properly.
+`configure' recognizes the following options to control how it operates.
 
-NOTE 2: For compilation with MinGW, fnmatch.h is probably missing.
-        That file can be found here:
-http://www.koders.com/c/fid2B518462CB1EED3D4E31E271DB83CD1582F6EEBE.aspx
-        It should be installed in the mingw include directory.
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
 
-NOTE 3: For compilation with mingw32ce, run configure with the option
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
 
---host=arm-wince-mingw32ce
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
 
-NOTE 4: For compilation with cegcc, follow the wiki:
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
 
-http://wiki.enlightenment.org/index.php/Category:EFL_Windows_CE
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
 
-NOTE 5: If you want to be able to run make check, you need library check
-        from http://check.sourceforge.net/.
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
 
-NOTE 6: If you want to be able to run coverage test over eet, you will need
-        gcov (usually any distro provides it) and lcov from
-        http://ltp.sourceforge.net/coverage/lcov.php.
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
 
-NOTE 7: For coverage support you also need check support.
index 3cd8620..7e66af7 100644 (file)
@@ -26,11 +26,18 @@ m4/ltversion.m4
 EXTRA_DIST = \
 AUTHORS \
 COPYING \
-COPYING-PLAIN \
 autogen.sh \
 eet.pc.in \
 eet.spec.in \
 eet.spec \
+m4/ac_attribute.m4 \
+m4/ac_path_generic.m4 \
+m4/efl_binary.m4 \
+m4/efl_coverage.m4 \
+m4/efl_doxygen.m4 \
+m4/efl_fnmatch.m4 \
+m4/efl_tests.m4 \
+m4/efl_threads.m4 \
 README.in \
 README
 
index de400ff..182ac0a 100644 (file)
--- a/README.in
+++ b/README.in
@@ -1,17 +1,25 @@
-Eet @VERSION@
+Eet @VERSION@ ALPHA
+
+******************************************************************************
+
+ FOR ANY ISSUES PLEASE EMAIL:
+ enlightenment-devel@lists.sourceforge.net
+
+******************************************************************************
 
 Requirements:
 -------------
-Must:
-  libc libm zlib libjpeg
-  Windows: evil
+Must have:
+  libc
+  libm
+  zlib
+  libjpeg
+  eina (1.0.0 or better) 
+  (For windows you also need: evil)
 
-******************************************************************************
-***
-*** FOR ANY ISSUES WITH EET PLEASE EMAIL:
-*** enlightenment-devel@lists.sourceforge.net
-***
-******************************************************************************
+Optional requirements:
+  gnutls (1.7.6 or better)
+  openssl
 
 Eet is a tiny library designed to write an arbitary set of chunks of
 data to a file and optionally compress each chunk (very much like a
@@ -23,7 +31,10 @@ It also can encode and decode data structures in memory, as well as
 image data for saving to eet files or sending across the network to
 other machines, or just writing to arbitary files on the system. All
 data is encoded in a platform independant way and can be written and
-read by any architecture.
+read by any architecture. This data once encoded can be sent to
+another process or machine and decoded on the other end without
+needing to go into an eet file. Eet can also optionally encrypt files
+and use digital signatures (with gnutls or openssl support).
 
 ------------------------------------------------------------------------------
 COMPILING AND INSTALLING:
@@ -33,13 +44,26 @@ COMPILING AND INSTALLING:
 (do this as root unless you are installing in your users directories):
   make install
 
-------------------------------------------------------------------------------
-BUILDING PACKAGES:
+To get the coverage report:
+    make coverage
+The report is created in the coverage/ subdir
+If you want to be able to run coverage test over eet, you will need gcov 
+(usually any distro provides it) and lcov from:
+  http://ltp.sourceforge.net/coverage/lcov.php.
+For coverage support you also need "make check" support with the check
+library (see below).
+For compilation with MinGW, fnmatch.h is probably missing. That file can be
+found here:
+  http://www.koders.com/c/fid2B518462CB1EED3D4E31E271DB83CD1582F6EEBE.aspx
+It should be installed in the mingw include directory.
+
+For compilation with mingw32ce, run configure with the option
+  --host=arm-wince-mingw32ce
 
-RPM: To build rpm packages:
+For compilation with cegcc, follow the wiki:
+  http://wiki.enlightenment.org/index.php/Category:EFL_Windows_CE
 
-  sudo rpm -ta @PACKAGE@-@VERSION@.tar.gz
+If you want to be able to run "make check", you need library check
+  from http://check.sourceforge.net/
 
-You will find rpm packages in your system /usr/src/redhat/* dirs (note you may
-not need to use sudo or root if you have your own ~/.rpmrc. see rpm documents
-for more details)
index d675379..33c8574 100644 (file)
@@ -1,12 +1,12 @@
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
+y##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
 m4_define([v_maj], [1])
-m4_define([v_min], [3])
-m4_define([v_mic], [1])
-m4_define([v_rev], m4_esyscmd([(svnversion . | grep -v exported || echo 0) | awk -F : '{printf("%s\n", $1);}' | tr -d ' :MSP\n']))
+m4_define([v_min], [4])
+m4_define([v_mic], [0])
+m4_define([v_rev], m4_esyscmd([(svnversion "${SVN_REPO_PATH:-.}" | grep -v export || echo 0) | awk -F : '{printf("%s\n", $1);}' | tr -d ' :MSP\n']))
 m4_if(v_rev, [0], [m4_define([v_rev], m4_esyscmd([git log 2> /dev/null | (grep -m1 git-svn-id || echo 0) | sed -e 's/.*@\([0-9]*\).*/\1/' | tr -d '\n']))])
 ##--   When released, remove the dnl on the below line
-dnl m4_undefine([v_rev])
+m4_undefine([v_rev])
 ##--   When doing snapshots - change soname. remove dnl on below line
 dnl m4_define([relname], [ver-pre-svn-05])
 dnl m4_define([v_rel], [-release relname])
@@ -18,7 +18,7 @@ m4_define([lt_age], v_min)
 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
 
-AC_INIT([eet], [v_ver], [enlightenment-devel@lists.sourceforge.net])
+AC_INIT([eet], [v_ver-alpha], [enlightenment-devel@lists.sourceforge.net])
 AC_PREREQ([2.52])
 AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_MACRO_DIR([m4])
@@ -49,24 +49,15 @@ AC_SUBST(version_info)
 AC_SUBST(release_info)
 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-
+VMAJ=v_maj
+AC_SUBST(VMAJ)
 
 ### Default options with respect to host
 
-case "$host_os" in
-   mingw*)
-      want_gnutls="no"
-      want_openssl="no"
-      want_cipher="no"
-      want_signature="no"
-      ;;
-   *)
-      want_gnutls="auto"
-      want_openssl="auto"
-      want_cipher="yes"
-      want_signature="yes"
-      ;;
-esac
+want_gnutls="auto"
+want_openssl="auto"
+want_cipher="yes"
+want_signature="yes"
 
 requirement_eet=""
 
@@ -262,12 +253,12 @@ AC_SUBST(EET_LIBS)
 
 # Eina library
 
-PKG_CHECK_MODULES(EINA, [eina-0])
-requirement_eet="eina-0 ${requirement_eet}"
+PKG_CHECK_MODULES(EINA, [eina >= 1.0.0])
+requirement_eet="eina >= 1.0.0 ${requirement_eet}"
 
 # Gnutls library
 have_gnutls="no"
-if test "x${want_gnutls}" = "xyes" -o "x${want_gnutls}" = "xauto" ; then
+if test "x${want_gnutls}" = "xyes" || test "x${want_gnutls}" = "xauto" ; then
    PKG_CHECK_MODULES(GNUTLS, [gnutls >= 1.7.6],
       [
        have_gnutls="yes"
@@ -287,7 +278,7 @@ fi
 
 # Openssl library
 have_openssl="no"
-if test "x${want_openssl}" = "xyes" -o "x${want_openssl}" = "xauto" ; then
+if test "x${want_openssl}" = "xyes" || test "x${want_openssl}" = "xauto" ; then
    PKG_CHECK_MODULES(OPENSSL, openssl,
       [
        have_openssl="yes"
@@ -297,11 +288,19 @@ if test "x${want_openssl}" = "xyes" -o "x${want_openssl}" = "xauto" ; then
       [have_openssl="no"])
 fi
 
+if test "x${have_gnutls}" = "xyes" ; then
+   secure_layer="GnuTLS"
+elif test "x${have_openssl}" = "xyes" ; then
+   secure_layer="OpenSSL"
+else
+   secure_layer="no"
+fi
+
 have_cipher="no"
-if test "x${have_gnutls}" = "xyes" -a "x${want_cipher}" = "xyes" ; then
+if test "x${have_gnutls}" = "xyes" && test "x${want_cipher}" = "xyes" ; then
    have_cipher="yes"
    AC_DEFINE(HAVE_CIPHER, 1, [Have cipher support built in eet])
-elif test "x${have_openssl}" = "xyes" -a "x${want_cipher}" = "xyes" ; then
+elif test "x${have_openssl}" = "xyes" && test "x${want_cipher}" = "xyes" ; then
    have_cipher="yes"
    AC_DEFINE(HAVE_CIPHER, 1, [Have cipher support built in eet])
 fi
@@ -310,10 +309,10 @@ AC_MSG_CHECKING(whether to activate cipher support in eet)
 AC_MSG_RESULT(${have_cipher})
 
 have_signature="no"
-if test "x${have_gnutls}" = "xyes" -a "x${want_signature}" = "xyes" ; then
+if test "x${have_gnutls}" = "xyes" && test "x${want_signature}" = "xyes" ; then
    have_signature="yes"
    AC_DEFINE(HAVE_SIGNATURE, 1, [Have signature support for eet file])
-elif test "x${have_openssl}" = "xyes" -a "x${want_signature}" = "xyes" ; then
+elif test "x${have_openssl}" = "xyes" && test "x${want_signature}" = "xyes" ; then
    have_signature="yes"
    AC_DEFINE(HAVE_SIGNATURE, 1, [Have signature support for eet file])
 fi
@@ -323,7 +322,18 @@ AC_MSG_RESULT(${have_signature})
 
 # pthread library
 
-EFL_CHECK_PTHREAD(["no"], [have_pthread="yes"], [have_pthread="no"])
+EFL_CHECK_THREADS(["no"],
+   [
+    if test "x${_efl_have_posix_threads}" = "xyes" ; then
+       have_threads="POSIX"
+    else
+       if test "x${_efl_have_win32_threads}" = "xyes" ; then
+          have_threads="Win32"
+       else
+          have_threads="no"
+       fi
+    fi],
+   [have_threads="no"])
 
 
 ### Checks for header files
@@ -457,11 +467,12 @@ echo
 echo "Configuration Options Summary:"
 echo
 echo "  Amalgamation.........: ${do_amalgamation}"
-echo "  Gnutls...............: ${have_gnutls}"
-echo "  Openssl..............: ${have_openssl}"
-echo "    Cipher support.....: ${have_cipher}"
-echo "    Signature..........: ${have_signature}"
-echo "  Thread Support.......: ${have_pthread}"
+echo "  Secure layer.........: ${secure_layer}"
+if test "x${have_gnutls}" = "xyes" || test "x${have_openssl}" = "xyes" ; then
+   echo "    Cipher support.....: ${have_cipher}"
+   echo "    Signature..........: ${have_signature}"
+fi
+echo "  Thread Support.......: ${have_threads}"
 echo
 echo "  Old eet file format..: ${old_eet_file_format}"
 echo
index dd0e91d..7da86ca 100644 (file)
@@ -1,2 +1,2 @@
-Revision 49550
-Last Changed Rev 49540
+Revision 51480
+Last Changed Rev 51457
index df841e2..30a926f 100644 (file)
--- a/eet.pc.in
+++ b/eet.pc.in
@@ -8,6 +8,6 @@ Description: Library for speedy data storage, retrieval, and compression
 @pkgconfig_requires_private@: @requirement_eet@
 Version: @VERSION@
 Libs: -L${libdir} -leet
-Libs.private: @EET_LIBS@ @EFL_FNMATCH_LIBS@ @LIBGCRYPT_LIBS@ -ljpeg -lz -lm
-Cflags: -I${includedir}
+Libs.private: @EET_LIBS@ @EFL_FNMATCH_LIBS@ @LIBGCRYPT_LIBS@ @EFL_PTHREAD_LIBS@ -ljpeg -lz -lm
+Cflags: -I${includedir}/eet-@VMAJ@
 Cflags.private: @LIBGCRYPT_CFLAGS@
diff --git a/m4/efl_threads.m4 b/m4/efl_threads.m4
new file mode 100644 (file)
index 0000000..8866e37
--- /dev/null
@@ -0,0 +1,189 @@
+dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr>
+dnl That code is public domain and can be freely used or copied.
+
+dnl Macro that check if POSIX or Win32 threads library is available or not.
+
+dnl Usage: EFL_CHECK_THREADS(want_pthread_spin[, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Call AC_SUBST(EFL_PTHREAD_CFLAGS)
+dnl Call AC_SUBST(EFL_PTHREAD_LIBS)
+dnl Define EFL_HAVE_POSIX_THREADS or EFL_HAVE_WIN32_THREADS, and EFL_HAVE_THREADS
+dnl Define EFL_HAVE_POSIX_THREADS_SPINLOCK
+
+AC_DEFUN([EFL_CHECK_THREADS],
+[
+
+dnl configure option
+
+AC_ARG_ENABLE([posix-threads],
+   [AC_HELP_STRING([--disable-posix-threads], [enable POSIX threads code @<:@default=auto@:>@])],
+   [
+    if test "x${enableval}" = "xyes" ; then
+       _efl_enable_posix_threads="yes"
+    else
+       _efl_enable_posix_threads="no"
+    fi
+   ],
+   [_efl_enable_posix_threads="auto"])
+
+AC_MSG_CHECKING([whether to build POSIX threads code])
+AC_MSG_RESULT([${_efl_enable_posix_threads}])
+
+AC_ARG_ENABLE([win32-threads],
+   [AC_HELP_STRING([--disable-win32-threads], [enable Win32 threads code @<:@default=no@:>@])],
+   [
+    if test "x${enableval}" = "xyes" ; then
+       _efl_enable_win32_threads="yes"
+    else
+       _efl_enable_win32_threads="no"
+    fi
+   ],
+   [_efl_enable_win32_threads="no"])
+
+AC_MSG_CHECKING([whether to build Windows threads code])
+AC_MSG_RESULT([${_efl_enable_win32_threads}])
+
+dnl
+dnl * no  + no
+dnl * yes + no  : win32: error,    other : pthread
+dnl * yes + yes : win32 : wthread, other : pthread
+dnl * no  + yes : win32 : wthread, other : error
+
+if  test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_enable_win32_threads}" = "xyes" ; then
+   case "$host_os" in
+      mingw*)
+         _efl_enable_posix_threads=no
+         ;;
+      *)
+         _efl_enable_win32_threads=no
+         ;;
+   esac
+fi
+
+if  test "x${_efl_enable_win32_threads}" = "xyes" ; then
+   case "$host_os" in
+      mingw*)
+         ;;
+      *)
+         AC_MSG_ERROR([Win32 threads support requested but non Windows system found.])
+         ;;
+   esac
+fi
+
+if  test "x${_efl_enable_posix_threads}" = "xyes" ; then
+   case "$host_os" in
+      mingw*)
+         AC_MSG_ERROR([POSIX threads support requested but Windows system found.])
+         ;;
+      *)
+         ;;
+   esac
+fi
+
+dnl check if the compiler supports POSIX threads
+
+case "$host_os" in
+   mingw*)
+      ;;
+   solaris*)
+      _efl_thread_cflags="-mt"
+      _efl_thread_libs="-mt"
+      ;;
+   *)
+      _efl_thread_cflags="-pthread"
+      _efl_thread_libs="-pthread"
+      ;;
+esac
+
+_efl_have_posix_threads="no"
+_efl_have_win32_threads="no"
+
+if test "x${_efl_enable_posix_threads}" = "xyes" || test "x${_efl_enable_posix_threads}" = "xauto" ; then
+
+   SAVE_CFLAGS=${CFLAGS}
+   CFLAGS="${CFLAGS} ${_efl_threads_cflags}"
+   SAVE_LIBS=${LIBS}
+   LIBS="${LIBS} ${_efl_threads_libs}"
+   AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM([[
+#include <pthread.h>
+                       ]],
+                       [[
+pthread_t id;
+id = pthread_self();
+                       ]])],
+      [_efl_have_posix_threads="yes"],
+      [_efl_have_posix_threads="no"])
+   CFLAGS=${SAVE_CFLAGS}
+   LIBS=${SAVE_LIBS}
+
+fi
+
+AC_MSG_CHECKING([whether system support POSIX threads])
+AC_MSG_RESULT([${_efl_have_posix_threads}])
+if test "$x{_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads}" = "xno"; then
+   AC_MSG_ERROR([POSIX threads support requested but not found.])
+fi
+
+EFL_PTHREAD_CFLAGS=""
+EFL_PTHREAD_LIBS=""
+if test "x${_efl_have_posix_threads}" = "xyes" ; then
+   EFL_PTHREAD_CFLAGS=${_efl_thread_cflags}
+   EFL_PTHREAD_LIBS=${_efl_thread_libs}
+fi
+
+AC_SUBST(EFL_PTHREAD_CFLAGS)
+AC_SUBST(EFL_PTHREAD_LIBS)
+
+if test "x${_efl_have_posix_threads}" = "xyes" ; then
+   AC_DEFINE([EFL_HAVE_POSIX_THREADS], [1], [Define to mention that POSIX threads are supported])
+fi
+
+dnl check if the compiler supports pthreads spinlock
+
+_efl_have_posix_threads_spinlock="no"
+
+if test "x${_efl_have_posix_threads}" = "xyes" && test "x$1" = "xyes" ; then
+
+   SAVE_CFLAGS=${CFLAGS}
+   CFLAGS="${CFLAGS} ${EFL_PTHREAD_CFLAGS}"
+   SAVE_LIBS=${LIBS}
+   LIBS="${LIBS} ${EFL_PTHREAD_LIBS}"
+   AC_LINK_IFELSE(
+      [AC_LANG_PROGRAM([[
+#include <pthread.h>
+                       ]],
+                       [[
+pthread_spinlock_t lock;
+int res;
+res = pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE);
+                       ]])],
+      [_efl_have_posix_threads_spinlock="yes"],
+      [_efl_have_posix_threads_spinlock="no"])
+   CFLAGS=${SAVE_CFLAGS}
+   LIBS=${SAVE_LIBS}
+
+fi
+
+AC_MSG_CHECKING([whether to build POSIX threads spinlock code])
+AC_MSG_RESULT([${_efl_have_posix_threads_spinlock}])
+if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads_spinlock}" = "xno" && test "x$1" = "xyes" ; then
+   AC_MSG_WARN([POSIX threads support requested but spinlocks are not supported])
+fi
+
+if test "x${_efl_have_posix_threads_spinlock}" = "xyes" ; then
+   AC_DEFINE([EFL_HAVE_POSIX_THREADS_SPINLOCK], [1], [Define to mention that POSIX threads spinlocks are supported])
+fi
+
+if test "x${_efl_enable_win32_threads}" = "xyes" ; then
+   _efl_have_win32_threads="yes"
+   AC_DEFINE([EFL_HAVE_WIN32_THREADS], [1], [Define to mention that Win32 threads are supported])
+fi
+
+if test "x${_efl_have_posix_threads}" = "xyes" || test "x${_efl_have_win32_threads}" = "xyes" ; then
+   AC_DEFINE([EFL_HAVE_THREADS], [1], [Define to mention that POSIX or Win32 threads are supported])
+fi
+
+AS_IF([test "x$_efl_have_posix_threads" = "xyes" || test "x$_efl_have_win32_threads" = "xyes"], [$2], [$3])
+AS_IF([test "x$_efl_have_posix_threads_spinlock" = "xyes"], [$4], [$5])
+
+])
index 4fbb338..006bb3f 100644 (file)
@@ -17,5 +17,5 @@ EXTRA_PROGRAMS = eet
 
 eet_SOURCES = eet_main.c
 eet_CFLAGS = @EET_CFLAGS@
-eet_LDADD = $(top_builddir)/src/lib/libeet.la
+eet_LDADD = $(top_builddir)/src/lib/libeet.la @EINA_LIBS@ @EVIL_LIBS@
 eet_LDFLAGS = @lt_enable_auto_import@ @ld_as_needed@
index 5964d8a..0302924 100644 (file)
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #ifndef _MSC_VER
 # include <unistd.h>
-#endif
+#endif /* ifndef _MSC_VER */
 
 #ifdef HAVE_EVIL
 # include <Evil.h>
-#endif
+#endif /* ifdef HAVE_EVIL */
 
 #include <Eet.h>
 
-
 static int _eet_main_log_dom = -1;
 
 #ifdef EET_DEFAULT_LOG_COLOR
 #undef EET_DEFAULT_LOG_COLOR
-#endif
+#endif /* ifdef EET_DEFAULT_LOG_COLOR */
 #define EET_DEFAULT_LOG_COLOR EINA_COLOR_CYAN
 #ifdef ERR
 #undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_eet_main_log_dom, __VA_ARGS__)
+#endif /* ifdef ERR */
+#define ERR(...)  EINA_LOG_DOM_ERR(_eet_main_log_dom, __VA_ARGS__)
 #ifdef DBG
 #undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_eet_main_log_dom, __VA_ARGS__)
+#endif /* ifdef DBG */
+#define DBG(...)  EINA_LOG_DOM_DBG(_eet_main_log_dom, __VA_ARGS__)
 #ifdef INF
 #undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_eet_main_log_dom, __VA_ARGS__)
+#endif /* ifdef INF */
+#define INF(...)  EINA_LOG_DOM_INFO(_eet_main_log_dom, __VA_ARGS__)
 #ifdef WRN
 #undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_eet_main_log_dom, __VA_ARGS__)
+#endif /* ifdef WRN */
+#define WRN(...)  EINA_LOG_DOM_WARN(_eet_main_log_dom, __VA_ARGS__)
 #ifdef CRIT
 #undef CRIT
-#endif
+#endif /* ifdef CRIT */
 #define CRIT(...) EINA_LOG_DOM_CRIT(_eet_main_log_dom, __VA_ARGS__)
 
 static void
-do_eet_list(const char *file)
+do_eet_list(const char * file)
 {
    int i, num;
-   char **list;
-   Eet_File *ef;
+   char ** list;
+   Eet_File * ef;
 
    ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef)
      {
         ERR("cannot open for reading: %s\n", file);
-       exit(-1);
+        exit(-1);
      }
+
    list = eet_list(ef, "*", &num);
    if (list)
      {
-       for (i = 0; i < num; i++)
-         printf("%s\n",list[i]);
-       free(list);
+        for (i = 0; i < num; i++)
+           printf("%s\n",list[i]);
+        free(list);
      }
+
    eet_close(ef);
-}
+} /* do_eet_list */
 
 static void
-do_eet_extract(const char *file, const char *key, const char *out, const char *crypto_key)
+do_eet_extract(const char * file,
+               const char * key,
+               const char * out,
+               const char * crypto_key)
 {
-   Eet_File *ef;
-   void *data;
+   Eet_File * ef;
+   void * data;
    int size = 0;
-   FILE *f;
+   FILE * f;
 
    ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef)
      {
-       ERR("cannot open for reading: %s\n", file);
-       exit(-1);
+        ERR("cannot open for reading: %s\n", file);
+        exit(-1);
      }
+
    data = eet_read_cipher(ef, key, &size, crypto_key);
    if (!data)
      {
-       ERR("cannot read key %s\n", key);
-       exit(-1);
+        ERR("cannot read key %s\n", key);
+        exit(-1);
      }
+
    f = fopen(out, "wb");
    if (!f)
      {
-       ERR("cannot open %s\n", out);
-       exit(-1);
+        ERR("cannot open %s\n", out);
+        exit(-1);
      }
+
    if (fwrite(data, size, 1, f) != 1)
      {
-       ERR("cannot write to %s\n", out);
-       exit(-1);
+        ERR("cannot write to %s\n", out);
+        exit(-1);
      }
+
    fclose(f);
    free(data);
    eet_close(ef);
-}
+} /* do_eet_extract */
 
 static void
-do_eet_decode_dump(void *data, const char *str)
+do_eet_decode_dump(void * data, const char * str)
 {
    fputs(str, (FILE *)data);
-}
+} /* do_eet_decode_dump */
 
 static void
-do_eet_decode(const char *file, const char *key, const char *out, const char *crypto_key)
+do_eet_decode(const char * file,
+              const char * key,
+              const char * out,
+              const char * crypto_key)
 {
-   Eet_File *ef;
-   FILE *f;
+   Eet_File * ef;
+   FILE * f;
 
    ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef)
      {
-       ERR("cannot open for reading: %s\n", file);
-       exit(-1);
+        ERR("cannot open for reading: %s\n", file);
+        exit(-1);
      }
+
    f = fopen(out, "wb");
    if (!f)
      {
-       ERR("cannot open %s\n", out);
-       exit(-1);
+        ERR("cannot open %s\n", out);
+        exit(-1);
      }
+
    if (!eet_data_dump_cipher(ef, key, crypto_key, do_eet_decode_dump, f))
      {
-       ERR("cannot write to %s\n", out);
-       exit(-1);
+        ERR("cannot write to %s\n", out);
+        exit(-1);
      }
+
    fclose(f);
    eet_close(ef);
-}
+} /* do_eet_decode */
 
 static void
-do_eet_insert(const char *file, const char *key, const char *out, int compress, const char *crypto_key)
+do_eet_insert(const char * file,
+              const char * key,
+              const char * out,
+              int          compress,
+              const char * crypto_key)
 {
-   Eet_File *ef;
-   void *data;
+   Eet_File * ef;
+   void * data;
    int size = 0;
-   FILE *f;
+   FILE * f;
 
    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
    if (!ef)
-     ef = eet_open(file, EET_FILE_MODE_WRITE);
+      ef = eet_open(file, EET_FILE_MODE_WRITE);
+
    if (!ef)
      {
-       ERR("cannot open for read+write: %s\n", file);
-       exit(-1);
+        ERR("cannot open for read+write: %s\n", file);
+        exit(-1);
      }
+
    f = fopen(out, "rb");
    if (!f)
      {
-       ERR("cannot open %s\n", out);
-       exit(-1);
+        ERR("cannot open %s\n", out);
+        exit(-1);
      }
+
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    rewind(f);
    data = malloc(size);
    if (!data)
      {
-       ERR("cannot allocate %i bytes\n", size);
-       exit(-1);
+        ERR("cannot allocate %i bytes\n", size);
+        exit(-1);
      }
+
    if (fread(data, size, 1, f) != 1)
      {
-       ERR("cannot read file %s\n", out);
-       exit(-1);
+        ERR("cannot read file %s\n", out);
+        exit(-1);
      }
+
    fclose(f);
    eet_write_cipher(ef, key, data, size, compress, crypto_key);
    free(data);
    eet_close(ef);
-}
+} /* do_eet_insert */
 
 static void
-do_eet_encode(const char *file, const char *key, const char *out, int compress, const char *crypto_key)
+do_eet_encode(const char * file,
+              const char * key,
+              const char * out,
+              int          compress,
+              const char * crypto_key)
 {
-   Eet_File *ef;
-   char *text;
+   Eet_File * ef;
+   char * text;
    int textlen = 0;
    int size = 0;
-   FILE *f;
+   FILE * f;
 
    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
    if (!ef)
-     ef = eet_open(file, EET_FILE_MODE_WRITE);
+      ef = eet_open(file, EET_FILE_MODE_WRITE);
+
    if (!ef)
      {
-       ERR("cannot open for read+write: %s\n", file);
-       exit(-1);
+        ERR("cannot open for read+write: %s\n", file);
+        exit(-1);
      }
+
    f = fopen(out, "rb");
    if (!f)
      {
-       ERR("cannot open %s\n", out);
-       exit(-1);
+        ERR("cannot open %s\n", out);
+        exit(-1);
      }
+
    fseek(f, 0, SEEK_END);
    textlen = ftell(f);
    rewind(f);
    text = malloc(textlen);
    if (!text)
      {
-       ERR("cannot allocate %i bytes\n", size);
-       exit(-1);
+        ERR("cannot allocate %i bytes\n", size);
+        exit(-1);
      }
+
    if (fread(text, textlen, 1, f) != 1)
      {
-       ERR("cannot read file %s\n", out);
-       exit(-1);
+        ERR("cannot read file %s\n", out);
+        exit(-1);
      }
+
    fclose(f);
    if (!eet_data_undump_cipher(ef, key, crypto_key, text, textlen, compress))
      {
         ERR("cannot parse %s\n", out);
-       exit(-1);
+        exit(-1);
      }
+
    free(text);
    eet_close(ef);
-}
+} /* do_eet_encode */
 
 static void
-do_eet_remove(const char *file, const char *key)
+do_eet_remove(const char * file, const char * key)
 {
-   Eet_File *ef;
+   Eet_File * ef;
 
    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
    if (!ef)
      {
-       ERR("cannot open for read+write: %s\n", file);
-       exit(-1);
+        ERR("cannot open for read+write: %s\n", file);
+        exit(-1);
      }
+
    eet_delete(ef, key);
    eet_close(ef);
-}
+} /* do_eet_remove */
 
 static void
-do_eet_check(const char *file)
+do_eet_check(const char * file)
 {
-   Eet_File *ef;
-   const void *der;
+   Eet_File * ef;
+   const void * der;
    int der_length;
    int sign_length;
 
    ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef)
      {
-       ERR("checking signature of `%s` failed\n", file);
-       exit(-1);
+        ERR("checking signature of `%s` failed\n", file);
+        exit(-1);
      }
 
    der = eet_identity_x509(ef, &der_length);
@@ -267,26 +297,26 @@ do_eet_check(const char *file)
    fprintf(stdout, "Signature length %i.\n", sign_length);
 
    eet_close(ef);
-}
+} /* do_eet_check */
 
 static void
-do_eet_sign(const char *file, const char *private_key, const char *public_key)
+do_eet_sign(const char * file, const char * private_key, const char * public_key)
 {
-   Eet_File *ef;
-   Eet_Key *key;
+   Eet_File * ef;
+   Eet_Key * key;
 
    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
    if (!ef)
      {
-       ERR("cannot open for read+write: %s.\n", file);
-       exit(-1);
+        ERR("cannot open for read+write: %s.\n", file);
+        exit(-1);
      }
 
    key = eet_identity_open(public_key, private_key, NULL);
    if (!key)
      {
-       ERR("cannot open key '%s:%s'.\n", public_key, private_key);
-       exit(-1);
+        ERR("cannot open key '%s:%s'.\n", public_key, private_key);
+        exit(-1);
      }
 
    fprintf(stdout, "Using the following key to sign `%s`.\n", file);
@@ -295,90 +325,83 @@ do_eet_sign(const char *file, const char *private_key, const char *public_key)
    eet_identity_set(ef, key);
 
    eet_close(ef);
-}
+} /* do_eet_sign */
 
 int
-main(int argc, char **argv)
+main(int argc, char ** argv)
 {
    if (!eet_init())
-     return -1;
+      return -1;
 
    _eet_main_log_dom = eina_log_domain_register("Eet_Main",EINA_COLOR_CYAN);
    if(_eet_main_log_dom < -1)
      {
-       EINA_LOG_ERR("Impossible to create a log domain for eet_main.\n");
-       eet_shutdown();
-       return(-1);
+        EINA_LOG_ERR("Impossible to create a log domain for eet_main.\n");
+        eet_shutdown();
+        return(-1);
      }
+
    if (argc < 2)
      {
-       help:
-       printf("Usage:\n"
-              "  eet -l FILE.EET                                    list all keys in FILE.EET\n"
-              "  eet -x FILE.EET KEY OUT-FILE [CRYPTO_KEY]          extract data stored in KEY in FILE.EET and write to OUT-FILE\n"
-              "  eet -d FILE.EET KEY OUT-FILE [CRYPTO_KEY]          extract and decode data stored in KEY in FILE.EET and write to OUT-FILE\n"
-              "  eet -i FILE.EET KEY IN-FILE COMPRESS [CRYPTO_KEY]  insert data to KEY in FILE.EET from IN-FILE and if COMPRESS is 1, compress it\n"
-              "  eet -e FILE.EET KEY IN-FILE COMPRESS [CRYPTO_KEY]  insert and encode to KEY in FILE.EET from IN-FILE and if COMPRESS is 1, compress it\n"
-              "  eet -r FILE.EET KEY                                remove KEY in FILE.EET\n"
-              "  eet -c FILE.EET                                    report and check the signature information of an eet file\n"
-              "  eet -s FILE.EET PRIVATE_KEY PUBLIC_KEY             sign FILE.EET with PRIVATE_KEY and attach PUBLIC_KEY as it's certificate\n"
-              );
-       eet_shutdown();
-       return -1;
+help:
+        printf(
+           "Usage:\n"
+           "  eet -l FILE.EET                               list all keys in FILE.EET\n"
+           "  eet -x FILE.EET KEY OUT-FILE [CRYPTO_KEY]          extract data stored in KEY in FILE.EET and write to OUT-FILE\n"
+           "  eet -d FILE.EET KEY OUT-FILE [CRYPTO_KEY]          extract and decode data stored in KEY in FILE.EET and write to OUT-FILE\n"
+           "  eet -i FILE.EET KEY IN-FILE COMPRESS [CRYPTO_KEY]  insert data to KEY in FILE.EET from IN-FILE and if COMPRESS is 1, compress it\n"
+           "  eet -e FILE.EET KEY IN-FILE COMPRESS [CRYPTO_KEY]  insert and encode to KEY in FILE.EET from IN-FILE and if COMPRESS is 1, compress it\n"
+           "  eet -r FILE.EET KEY                                remove KEY in FILE.EET\n"
+           "  eet -c FILE.EET                                    report and check the signature information of an eet file\n"
+           "  eet -s FILE.EET PRIVATE_KEY PUBLIC_KEY             sign FILE.EET with PRIVATE_KEY and attach PUBLIC_KEY as it's certificate\n"
+           );
+        eet_shutdown();
+        return -1;
      }
+
    if ((!strncmp(argv[1], "-h", 2)))
-     {
-       goto help;
-     }
+      goto help;
    else if ((!strcmp(argv[1], "-l")) && (argc > 2))
-     {
-       do_eet_list(argv[2]);
-     }
+      do_eet_list(argv[2]);
    else if ((!strcmp(argv[1], "-x")) && (argc > 4))
      {
         if (argc > 5)
-         do_eet_extract(argv[2], argv[3], argv[4], argv[5]);
-       else
-         do_eet_extract(argv[2], argv[3], argv[4], NULL);
+           do_eet_extract(argv[2], argv[3], argv[4], argv[5]);
+        else
+           do_eet_extract(argv[2], argv[3], argv[4], NULL);
      }
    else if ((!strcmp(argv[1], "-d")) && (argc > 4))
      {
         if (argc > 5)
-        do_eet_decode(argv[2], argv[3], argv[4], argv[5]);
-       else
-        do_eet_decode(argv[2], argv[3], argv[4], NULL);
+           do_eet_decode(argv[2], argv[3], argv[4], argv[5]);
+        else
+           do_eet_decode(argv[2], argv[3], argv[4], NULL);
      }
    else if ((!strcmp(argv[1], "-i")) && (argc > 5))
      {
         if (argc > 6)
-         do_eet_insert(argv[2], argv[3], argv[4], atoi(argv[5]), argv[6]);
-       else
-         do_eet_insert(argv[2], argv[3], argv[4], atoi(argv[5]), NULL);
+           do_eet_insert(argv[2], argv[3], argv[4], atoi(argv[5]), argv[6]);
+        else
+           do_eet_insert(argv[2], argv[3], argv[4], atoi(argv[5]), NULL);
      }
    else if ((!strcmp(argv[1], "-e")) && (argc > 5))
      {
         if (argc > 6)
-         do_eet_encode(argv[2], argv[3], argv[4], atoi(argv[5]), argv[6]);
-       else
-         do_eet_encode(argv[2], argv[3], argv[4], atoi(argv[5]), NULL);
+           do_eet_encode(argv[2], argv[3], argv[4], atoi(argv[5]), argv[6]);
+        else
+           do_eet_encode(argv[2], argv[3], argv[4], atoi(argv[5]), NULL);
      }
    else if ((!strcmp(argv[1], "-r")) && (argc > 3))
-     {
-       do_eet_remove(argv[2], argv[3]);
-     }
+      do_eet_remove(argv[2], argv[3]);
    else if ((!strcmp(argv[1], "-c")) && (argc > 2))
-     {
-       do_eet_check(argv[2]);
-     }
+      do_eet_check(argv[2]);
    else if ((!strcmp(argv[1], "-s")) && (argc > 4))
-     {
-       do_eet_sign(argv[2], argv[3], argv[4]);
-     }
+      do_eet_sign(argv[2], argv[3], argv[4]);
    else
-     {
-       goto help;
-     }
+      goto help;
+
    eina_log_domain_unregister(_eet_main_log_dom);
    eet_shutdown();
    return 0;
-}
+} /* main */
+
index c97b398..70fba7b 100644 (file)
@@ -7,31 +7,35 @@
 #include <unistd.h>
 
 // complex real-world structures based on elmdentica database
-typedef struct {
-   const char *screen_name;
-   const char *name;
-   const char *message;
+typedef struct
+{
+   const char * screen_name;
+   const char * name;
+   const char * message;
    unsigned int id;
    unsigned int status_id;
    unsigned int date;
    unsigned int timeline;
 } My_Message;
 
-typedef struct {
-   const char *dm_to;
-   const char *message;
+typedef struct
+{
+   const char * dm_to;
+   const char * message;
 } My_Post;
 
-typedef struct {
+typedef struct
+{
    unsigned int id;
-   const char *name;
-   Eina_List *messages;
-   Eina_List *posts;
+   const char * name;
+   Eina_List *  messages;
+   Eina_List *  posts;
 } My_Account;
 
-typedef struct {
+typedef struct
+{
    unsigned int version; // it is recommended to use versioned configuration!
-   Eina_List *accounts;
+   Eina_List *  accounts;
 } My_Cache;
 
 // string that represents the entry in eet file, you might like to have
@@ -42,14 +46,14 @@ static const char MY_CACHE_FILE_ENTRY[] = "cache";
 // keep the descriptor static global, so it can be
 // shared by different functions (load/save) of this and only this
 // file.
-static Eet_Data_Descriptor *_my_cache_descriptor;
-static Eet_Data_Descriptor *_my_account_descriptor;
-static Eet_Data_Descriptor *_my_message_descriptor;
-static Eet_Data_Descriptor *_my_post_descriptor;
+static Eet_Data_Descriptor * _my_cache_descriptor;
+static Eet_Data_Descriptor * _my_account_descriptor;
+static Eet_Data_Descriptor * _my_message_descriptor;
+static Eet_Data_Descriptor * _my_post_descriptor;
 
 // keep file handle alive, so mmap()ed strings are all alive as well
-static Eet_File *_my_cache_file = NULL;
-static Eet_Dictionary *_my_cache_dict = NULL;
+static Eet_File * _my_cache_file = NULL;
+static Eet_Dictionary * _my_cache_dict = NULL;
 
 static void
 _my_cache_descriptor_init(void)
@@ -74,49 +78,49 @@ _my_cache_descriptor_init(void)
    // Describe the members to be saved:
    // Use a temporary macro so we don't type a lot, also avoid errors:
 
-#define ADD_BASIC(member, eet_type)                                    \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_message_descriptor, My_Message, #member, member, eet_type)
+#define ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_message_descriptor, My_Message, # member, member, eet_type)
    ADD_BASIC(screen_name, EET_T_STRING);
-   ADD_BASIC(name, EET_T_STRING);
-   ADD_BASIC(message, EET_T_STRING);
-   ADD_BASIC(id, EET_T_UINT);
-   ADD_BASIC(status_id, EET_T_UINT);
-   ADD_BASIC(date, EET_T_UINT);
-   ADD_BASIC(timeline, EET_T_UINT);
+   ADD_BASIC(name,        EET_T_STRING);
+   ADD_BASIC(message,     EET_T_STRING);
+   ADD_BASIC(id,          EET_T_UINT);
+   ADD_BASIC(status_id,   EET_T_UINT);
+   ADD_BASIC(date,        EET_T_UINT);
+   ADD_BASIC(timeline,    EET_T_UINT);
 #undef ADD_BASIC
 
-#define ADD_BASIC(member, eet_type)                                    \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_post_descriptor, My_Post, #member, member, eet_type)
-   ADD_BASIC(dm_to, EET_T_STRING);
+#define ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_post_descriptor, My_Post, # member, member, eet_type)
+   ADD_BASIC(dm_to,   EET_T_STRING);
    ADD_BASIC(message, EET_T_STRING);
 #undef ADD_BASIC
 
-#define ADD_BASIC(member, eet_type)                                    \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_account_descriptor, My_Account, #member, member, eet_type)
+#define ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_account_descriptor, My_Account, # member, member, eet_type)
    ADD_BASIC(name, EET_T_STRING);
-   ADD_BASIC(id, EET_T_UINT);
+   ADD_BASIC(id,   EET_T_UINT);
 #undef ADD_BASIC
 
    EET_DATA_DESCRIPTOR_ADD_LIST
-     (_my_account_descriptor, My_Account, "messages", messages,
+      (_my_account_descriptor, My_Account, "messages", messages,
       _my_message_descriptor);
    EET_DATA_DESCRIPTOR_ADD_LIST
-     (_my_account_descriptor, My_Account, "posts", posts,
+      (_my_account_descriptor, My_Account, "posts",    posts,
       _my_post_descriptor);
 
-#define ADD_BASIC(member, eet_type)                                    \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_cache_descriptor, My_Cache, #member, member, eet_type)
+#define ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_cache_descriptor, My_Cache, # member, member, eet_type)
    ADD_BASIC(version, EET_T_UINT);
 #undef ADD_BASIC
 
    EET_DATA_DESCRIPTOR_ADD_LIST
-     (_my_cache_descriptor, My_Cache, "accounts", accounts,
+      (_my_cache_descriptor, My_Cache, "accounts", accounts,
       _my_account_descriptor);
-}
+} /* _my_cache_descriptor_init */
 
 static void
 _my_cache_descriptor_shutdown(void)
@@ -125,167 +129,174 @@ _my_cache_descriptor_shutdown(void)
    eet_data_descriptor_free(_my_account_descriptor);
    eet_data_descriptor_free(_my_message_descriptor);
    eet_data_descriptor_free(_my_post_descriptor);
-}
+} /* _my_cache_descriptor_shutdown */
 
 // need to check if the pointer came from mmaped area in eet_dictionary
 // or it was allocated with eina_stringshare_add()
 static void
-_eet_string_free(const char *str)
+_eet_string_free(const char * str)
 {
    if (!str)
-     return;
+      return;
+
    if ((_my_cache_dict) && (eet_dictionary_string_check(_my_cache_dict, str)))
-     return;
+      return;
+
    eina_stringshare_del(str);
-}
+} /* _eet_string_free */
 
 static My_Message *
-_my_message_new(const char *message)
+_my_message_new(const char * message)
 {
-   My_Message *msg = calloc(1, sizeof(My_Message));
+   My_Message * msg = calloc(1, sizeof(My_Message));
    if (!msg)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Message\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Message\n");
+        return NULL;
      }
+
    msg->message = eina_stringshare_add(message);
    return msg;
-}
+} /* _my_message_new */
 
 static void
-_my_message_free(My_Message *msg)
+_my_message_free(My_Message * msg)
 {
    _eet_string_free(msg->screen_name);
    _eet_string_free(msg->name);
    _eet_string_free(msg->message);
    free(msg);
-}
+} /* _my_message_free */
 
 static My_Post *
-_my_post_new(const char *message)
+_my_post_new(const char * message)
 {
-   My_Post *post = calloc(1, sizeof(My_Post));
+   My_Post * post = calloc(1, sizeof(My_Post));
    if (!post)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Post\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Post\n");
+        return NULL;
      }
+
    post->message = eina_stringshare_add(message);
    return post;
-}
+} /* _my_post_new */
 
 static void
-_my_post_free(My_Post *post)
+_my_post_free(My_Post * post)
 {
    _eet_string_free(post->dm_to);
    _eet_string_free(post->message);
    free(post);
-}
+} /* _my_post_free */
 
 static My_Account *
-_my_account_new(const char *name)
+_my_account_new(const char * name)
 {
-   My_Account *acc = calloc(1, sizeof(My_Account));
+   My_Account * acc = calloc(1, sizeof(My_Account));
    if (!acc)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Account\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Account\n");
+        return NULL;
      }
+
    acc->name = eina_stringshare_add(name);
    return acc;
-}
+} /* _my_account_new */
 
 static void
-_my_account_free(My_Account *acc)
+_my_account_free(My_Account * acc)
 {
-   My_Message *m;
-   My_Post *p;
+   My_Message * m;
+   My_Post * p;
 
    _eet_string_free(acc->name);
 
    EINA_LIST_FREE(acc->messages, m)
-     _my_message_free(m);
+   _my_message_free(m);
 
    EINA_LIST_FREE(acc->posts, p)
-     _my_post_free(p);
+   _my_post_free(p);
 
    free(acc);
-}
+} /* _my_account_free */
 
 static My_Cache *
 _my_cache_new(void)
 {
-   My_Cache *my_cache = calloc(1, sizeof(My_Cache));
+   My_Cache * my_cache = calloc(1, sizeof(My_Cache));
    if (!my_cache)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Cache\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Cache\n");
+        return NULL;
      }
 
    my_cache->version = 1;
    return my_cache;
-}
+} /* _my_cache_new */
 
 static void
-_my_cache_free(My_Cache *my_cache)
+_my_cache_free(My_Cache * my_cache)
 {
-   My_Account *acc;
+   My_Account * acc;
    EINA_LIST_FREE(my_cache->accounts, acc)
-     _my_account_free(acc);
+   _my_account_free(acc);
    free(my_cache);
-}
+} /* _my_cache_free */
 
 static My_Account *
-_my_cache_account_find(My_Cache *my_cache, const char *name)
+_my_cache_account_find(My_Cache * my_cache, const char * name)
 {
-   My_Account *acc;
-   Eina_List *l;
+   My_Account * acc;
+   Eina_List * l;
    EINA_LIST_FOREACH(my_cache->accounts, l, acc)
-     if (strcmp(acc->name, name) == 0)
-       return acc;
+   if (strcmp(acc->name, name) == 0)
+      return acc;
+
    return NULL;
-}
+} /* _my_cache_account_find */
 
 static My_Cache *
-_my_cache_load(const char *filename)
+_my_cache_load(const char * filename)
 {
-   My_Cache *my_cache;
-   Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ);
+   My_Cache * my_cache;
+   Eet_File * ef = eet_open(filename, EET_FILE_MODE_READ);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
-       return NULL;
+        fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
+        return NULL;
      }
 
    my_cache = eet_data_read(ef, _my_cache_descriptor, MY_CACHE_FILE_ENTRY);
    if (!my_cache)
      {
-       eet_close(ef);
-       return NULL;
+        eet_close(ef);
+        return NULL;
      }
 
    if (my_cache->version < 1)
      {
-       fprintf(stderr,
-               "WARNING: version %#x was too old, upgrading it to %#x\n",
-               my_cache->version, 1);
+        fprintf(stderr,
+                "WARNING: version %#x was too old, upgrading it to %#x\n",
+                my_cache->version, 1);
 
-       my_cache->version = 1;
+        my_cache->version = 1;
      }
 
    if (_my_cache_file)
-     eet_close(_my_cache_file);
+      eet_close(_my_cache_file);
+
    _my_cache_file = ef;
    _my_cache_dict = eet_dictionary_get(ef);
 
    return my_cache;
-}
+} /* _my_cache_load */
 
 static Eina_Bool
-_my_cache_save(const My_Cache *my_cache, const char *filename)
+_my_cache_save(const My_Cache * my_cache, const char * filename)
 {
    char tmp[PATH_MAX];
-   Eet_File *ef;
+   Eet_File * ef;
    Eina_Bool ret;
    unsigned int i, len;
    struct stat st;
@@ -293,27 +304,27 @@ _my_cache_save(const My_Cache *my_cache, const char *filename)
    len = eina_strlcpy(tmp, filename, sizeof(tmp));
    if (len + 12 >= (int)sizeof(tmp))
      {
-       fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
+        return EINA_FALSE;
      }
 
    i = 0;
    do
      {
-       snprintf(tmp + len, 12, ".%u", i);
-       i++;
+        snprintf(tmp + len, 12, ".%u", i);
+        i++;
      }
    while (stat(tmp, &st) == 0);
 
    ef = eet_open(tmp, EET_FILE_MODE_WRITE);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
+        return EINA_FALSE;
      }
 
    ret = eet_data_write
-     (ef, _my_cache_descriptor, MY_CACHE_FILE_ENTRY, my_cache, EINA_TRUE);
+         (ef, _my_cache_descriptor, MY_CACHE_FILE_ENTRY, my_cache, EINA_TRUE);
 
    // VERY IMPORTANT NOTE:
    // after eet_close(), all strings mmaped from file will be GONE, invalid!
@@ -327,31 +338,31 @@ _my_cache_save(const My_Cache *my_cache, const char *filename)
 
    if (ret)
      {
-       unlink(filename);
-       rename(tmp, filename);
+        unlink(filename);
+        rename(tmp, filename);
      }
 
    return ret;
-}
+} /* _my_cache_save */
 
-int main(int argc, char *argv[])
+int main(int argc, char * argv[])
 {
-   My_Cache *my_cache;
-   const Eina_List *l_acc;
-   My_Account *acc;
+   My_Cache * my_cache;
+   const Eina_List * l_acc;
+   My_Account * acc;
    int ret = 0;
 
    if (argc < 3)
      {
-       fprintf(stderr,
-               "Usage:\n\t%s <input> <output> [action] [action-params]\n\n"
-               "Where actions and their parameters:\n"
-               "\tacc <name>\n"
-               "\tpost <account-name> <message>\n"
-               "\tmessage <account-name> <message>\n"
-               "\n",
-               argv[0]);
-       return -1;
+        fprintf(stderr,
+                "Usage:\n\t%s <input> <output> [action] [action-params]\n\n"
+                "Where actions and their parameters:\n"
+                "\tacc <name>\n"
+                "\tpost <account-name> <message>\n"
+                "\tmessage <account-name> <message>\n"
+                "\n",
+                argv[0]);
+        return -1;
      }
 
    eina_init();
@@ -361,130 +372,135 @@ int main(int argc, char *argv[])
    my_cache = _my_cache_load(argv[1]);
    if (!my_cache)
      {
-       printf("creating new cache.\n");
-       my_cache = _my_cache_new();
-       if (!my_cache)
-         {
-            ret = -2;
-            goto end;
-         }
+        printf("creating new cache.\n");
+        my_cache = _my_cache_new();
+        if (!my_cache)
+          {
+             ret = -2;
+             goto end;
+          }
      }
 
    if (argc > 3)
      {
-       if (strcmp(argv[3], "acc") == 0)
-         {
-            if (argc == 5)
-              {
-                 My_Account *acc = _my_cache_account_find(my_cache, argv[4]);
-                 if (!acc)
-                   {
-                      acc = _my_account_new(argv[4]);
-                      my_cache->accounts = eina_list_append
-                        (my_cache->accounts, acc);
-                   }
-                 else
-                   fprintf(stderr, "ERROR: account '%s' already exists.\n",
-                           argv[4]);
-              }
-            else
-              fprintf(stderr, "ERROR: wrong number of parameters (%d).\n",
-                      argc);
-         }
-       else if (strcmp(argv[3], "post") == 0)
-         {
-            if (argc == 6)
-              {
-                 My_Account *acc = _my_cache_account_find(my_cache, argv[4]);
-                 if (acc)
-                   {
-                      My_Post *post = _my_post_new(argv[5]);
-                      acc->posts = eina_list_append(acc->posts, post);
-                   }
-                 else
-                   fprintf(stderr, "ERROR: unknown account: '%s'\n", argv[4]);
-              }
-            else
-              fprintf(stderr, "ERROR: wrong number of parameters (%d).\n",
-                      argc);
-         }
-       else if (strcmp(argv[3], "message") == 0)
-         {
-            if (argc == 6)
-              {
-                 My_Account *acc = _my_cache_account_find(my_cache, argv[4]);
-                 if (acc)
-                   {
-                      My_Message *msg = _my_message_new(argv[5]);
-                      acc->messages = eina_list_append(acc->messages, msg);
-                   }
-                 else
-                   fprintf(stderr, "ERROR: unknown account: '%s'\n", argv[4]);
-              }
-            else
-              fprintf(stderr, "ERROR: wrong number of parameters (%d).\n",
-                      argc);
-         }
-       else
-         fprintf(stderr, "ERROR: unknown action '%s'\n", argv[2]);
+        if (strcmp(argv[3], "acc") == 0)
+          {
+             if (argc == 5)
+               {
+                  My_Account * acc = _my_cache_account_find(my_cache, argv[4]);
+                  if (!acc)
+                    {
+                       acc = _my_account_new(argv[4]);
+                       my_cache->accounts = eina_list_append
+                             (my_cache->accounts, acc);
+                    }
+                  else
+                     fprintf(stderr, "ERROR: account '%s' already exists.\n",
+                             argv[4]);
+               }
+             else
+                fprintf(stderr,
+                        "ERROR: wrong number of parameters (%d).\n",
+                        argc);
+          }
+        else if (strcmp(argv[3], "post") == 0)
+          {
+             if (argc == 6)
+               {
+                  My_Account * acc = _my_cache_account_find(my_cache, argv[4]);
+                  if (acc)
+                    {
+                       My_Post * post = _my_post_new(argv[5]);
+                       acc->posts = eina_list_append(acc->posts, post);
+                    }
+                  else
+                     fprintf(stderr, "ERROR: unknown account: '%s'\n", argv[4]);
+               }
+             else
+                fprintf(stderr,
+                        "ERROR: wrong number of parameters (%d).\n",
+                        argc);
+          }
+        else if (strcmp(argv[3], "message") == 0)
+          {
+             if (argc == 6)
+               {
+                  My_Account * acc = _my_cache_account_find(my_cache, argv[4]);
+                  if (acc)
+                    {
+                       My_Message * msg = _my_message_new(argv[5]);
+                       acc->messages = eina_list_append(acc->messages, msg);
+                    }
+                  else
+                     fprintf(stderr, "ERROR: unknown account: '%s'\n", argv[4]);
+               }
+             else
+                fprintf(stderr,
+                        "ERROR: wrong number of parameters (%d).\n",
+                        argc);
+          }
+        else
+           fprintf(stderr, "ERROR: unknown action '%s'\n", argv[2]);
      }
 
    printf("My_Cache:\n"
-         "\tversion.: %#x\n"
-         "\taccounts: %u\n",
-         my_cache->version,
-         eina_list_count(my_cache->accounts));
+          "\tversion.: %#x\n"
+          "\taccounts: %u\n",
+          my_cache->version,
+          eina_list_count(my_cache->accounts));
    EINA_LIST_FOREACH(my_cache->accounts, l_acc, acc)
-     {
-       const My_Post *post;
-
-       printf("\t  > %-#8x '%.20s' stats: m=%u, p=%u\n",
-              acc->id, acc->name ? acc->name : "",
-              eina_list_count(acc->messages),
-              eina_list_count(acc->posts));
-
-       if (eina_list_count(acc->messages))
-         {
-            const Eina_List *l;
-            const My_Message *msg;
-            printf("\t  |messages:\n");
-
-            EINA_LIST_FOREACH(acc->messages, l, msg)
-              {
-                 printf("\t  |   %-8x '%s' [%s]: '%.20s'\n",
-                        msg->id,
-                        msg->name ? msg->name : "",
-                        msg->screen_name ? msg->screen_name : "",
-                        msg->message ? msg->message : "");
-              }
-         }
-
-       if (eina_list_count(acc->posts))
-         {
-            const Eina_List *l;
-            const My_Post *post;
-            printf("\t  |posts:\n");
-
-            EINA_LIST_FOREACH(acc->posts, l, post)
-              {
-                 if (post->dm_to)
-                   printf("\t  |  @%s: '%.20s'\n", post->dm_to, post->message);
-                 else
-                   printf("\t  |  '%.20s'\n", post->message);
-              }
-         }
-       printf("\n");
-     }
+   {
+      const My_Post * post;
+
+      printf("\t  > %-#8x '%.20s' stats: m=%u, p=%u\n",
+             acc->id, acc->name ? acc->name : "",
+             eina_list_count(acc->messages),
+             eina_list_count(acc->posts));
+
+      if (eina_list_count(acc->messages))
+        {
+           const Eina_List * l;
+           const My_Message * msg;
+           printf("\t  |messages:\n");
+
+           EINA_LIST_FOREACH(acc->messages, l, msg)
+           {
+              printf("\t  |   %-8x '%s' [%s]: '%.20s'\n",
+                     msg->id,
+                     msg->name ? msg->name : "",
+                     msg->screen_name ? msg->screen_name : "",
+                     msg->message ? msg->message : "");
+           }
+        }
+
+      if (eina_list_count(acc->posts))
+        {
+           const Eina_List * l;
+           const My_Post * post;
+           printf("\t  |posts:\n");
+
+           EINA_LIST_FOREACH(acc->posts, l, post)
+           {
+              if (post->dm_to)
+                 printf("\t  |  @%s: '%.20s'\n", post->dm_to, post->message);
+              else
+                 printf("\t  |  '%.20s'\n",      post->message);
+           }
+        }
+
+      printf("\n");
+   }
 
    if (!_my_cache_save(my_cache, argv[2]))
-     ret = -3;
+      ret = -3;
 
    _my_cache_free(my_cache);
 
- end:
+end:
    _my_cache_descriptor_shutdown();
    eet_shutdown();
    eina_shutdown();
 
    return ret;
-}
+} /* main */
+
index 52a095d..b11956f 100644 (file)
 // will be automatically handled. The other members will have their
 // space reserved and zeroed (as it uses calloc()), but not
 // saved or loaded from eet files.
-typedef struct {
+typedef struct
+{
    unsigned int version; // it is recommended to use versioned configuration!
-   const char *name;
-   int id;
-   int not_saved_value; // example of not saved data inside!
-   Eina_Bool enabled;
-   Eina_List *subs;
+   const char * name;
+   int          id;
+   int          not_saved_value; // example of not saved data inside!
+   Eina_Bool    enabled;
+   Eina_List *  subs;
 } My_Conf_Type;
 
-typedef struct {
-   const char *server;
-   int port;
+typedef struct
+{
+   const char * server;
+   int          port;
 } My_Conf_Subtype;
 
 // string that represents the entry in eet file, you might like to have
@@ -30,12 +32,11 @@ typedef struct {
 // different strings
 static const char MY_CONF_FILE_ENTRY[] = "config";
 
-
 // keep the descriptor static global, so it can be
 // shared by different functions (load/save) of this and only this
 // file.
-static Eet_Data_Descriptor *_my_conf_descriptor;
-static Eet_Data_Descriptor *_my_conf_sub_descriptor;
+static Eet_Data_Descriptor * _my_conf_descriptor;
+static Eet_Data_Descriptor * _my_conf_sub_descriptor;
 
 static void
 _my_conf_descriptor_init(void)
@@ -62,45 +63,45 @@ _my_conf_descriptor_init(void)
 
    // Describe the members to be saved:
    // Use a temporary macro so we don't type a lot, also avoid errors:
-#define MY_CONF_ADD_BASIC(member, eet_type)                            \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_conf_descriptor, My_Conf_Type, #member, member, eet_type)
-#define MY_CONF_SUB_ADD_BASIC(member, eet_type)                                \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_conf_sub_descriptor, My_Conf_Subtype, #member, member, eet_type)
+#define MY_CONF_ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_conf_descriptor,     My_Conf_Type,    # member, member, eet_type)
+#define MY_CONF_SUB_ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_conf_sub_descriptor, My_Conf_Subtype, # member, member, eet_type)
 
    MY_CONF_SUB_ADD_BASIC(server, EET_T_STRING);
-   MY_CONF_SUB_ADD_BASIC(port, EET_T_INT);
+   MY_CONF_SUB_ADD_BASIC(port,   EET_T_INT);
 
    MY_CONF_ADD_BASIC(version, EET_T_UINT);
-   MY_CONF_ADD_BASIC(name, EET_T_STRING);
-   MY_CONF_ADD_BASIC(id, EET_T_INT);
+   MY_CONF_ADD_BASIC(name,    EET_T_STRING);
+   MY_CONF_ADD_BASIC(id,      EET_T_INT);
    MY_CONF_ADD_BASIC(enabled, EET_T_UCHAR);
 
    // And add the sub descriptor as a linked list at 'subs' in the main struct
    EET_DATA_DESCRIPTOR_ADD_LIST
-     (_my_conf_descriptor, My_Conf_Type, "subs", subs, _my_conf_sub_descriptor);
+      (_my_conf_descriptor, My_Conf_Type, "subs", subs, _my_conf_sub_descriptor);
 
 #undef MY_CONF_ADD_BASIC
 #undef MY_CONF_SUB_ADD_BASIC
-}
+} /* _my_conf_descriptor_init */
 
 static void
 _my_conf_descriptor_shutdown(void)
 {
    eet_data_descriptor_free(_my_conf_sub_descriptor);
    eet_data_descriptor_free(_my_conf_descriptor);
-}
+} /* _my_conf_descriptor_shutdown */
 
 static My_Conf_Type *
 _my_conf_new(void)
 {
-   My_Conf_Type *my_conf = calloc(1, sizeof(My_Conf_Type));
-   My_Conf_Subtype *sub;
+   My_Conf_Type * my_conf = calloc(1, sizeof(My_Conf_Type));
+   My_Conf_Subtype * sub;
    if (!my_conf)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Conf_Type\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Conf_Type\n");
+        return NULL;
      }
 
    my_conf->version = 0x112233;
@@ -109,63 +110,63 @@ _my_conf_new(void)
    sub = calloc(1, sizeof(My_Conf_Subtype));
    if (sub)
      {
-       sub->server = eina_stringshare_add("my-server.com");
-       sub->port = 1234;
-       my_conf->subs = eina_list_append(my_conf->subs, sub);
+        sub->server = eina_stringshare_add("my-server.com");
+        sub->port = 1234;
+        my_conf->subs = eina_list_append(my_conf->subs, sub);
      }
 
    return my_conf;
-}
+} /* _my_conf_new */
 
 static void
-_my_conf_free(My_Conf_Type *my_conf)
+_my_conf_free(My_Conf_Type * my_conf)
 {
-   My_Conf_Subtype *sub;
+   My_Conf_Subtype * sub;
    EINA_LIST_FREE(my_conf->subs, sub)
-     {
-       eina_stringshare_del(sub->server);
-       free(sub);
-     }
+   {
+      eina_stringshare_del(sub->server);
+      free(sub);
+   }
 
    eina_stringshare_del(my_conf->name);
    free(my_conf);
-}
+} /* _my_conf_free */
 
 static My_Conf_Type *
-_my_conf_load(const char *filename)
+_my_conf_load(const char * filename)
 {
-   My_Conf_Type *my_conf;
-   Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ);
+   My_Conf_Type * my_conf;
+   Eet_File * ef = eet_open(filename, EET_FILE_MODE_READ);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
-       return NULL;
+        fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
+        return NULL;
      }
 
    my_conf = eet_data_read(ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY);
    if (!my_conf)
-     goto end;
+      goto end;
 
    if (my_conf->version < 0x112233)
      {
-       fprintf(stderr,
-               "WARNING: version %#x was too old, upgrading it to %#x\n",
-               my_conf->version, 0x112233);
+        fprintf(stderr,
+                "WARNING: version %#x was too old, upgrading it to %#x\n",
+                my_conf->version, 0x112233);
 
-       my_conf->version = 0x112233;
-       my_conf->enabled = EINA_TRUE;
+        my_conf->version = 0x112233;
+        my_conf->enabled = EINA_TRUE;
      }
 
- end:
+end:
    eet_close(ef);
    return my_conf;
-}
+} /* _my_conf_load */
 
 static Eina_Bool
-_my_conf_save(const My_Conf_Type *my_conf, const char *filename)
+_my_conf_save(const My_Conf_Type * my_conf, const char * filename)
 {
    char tmp[PATH_MAX];
-   Eet_File *ef;
+   Eet_File * ef;
    Eina_Bool ret;
    unsigned int i, len;
    struct stat st;
@@ -173,49 +174,49 @@ _my_conf_save(const My_Conf_Type *my_conf, const char *filename)
    len = eina_strlcpy(tmp, filename, sizeof(tmp));
    if (len + 12 >= (int)sizeof(tmp))
      {
-       fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
+        return EINA_FALSE;
      }
 
    i = 0;
    do
      {
-       snprintf(tmp + len, 12, ".%u", i);
-       i++;
+        snprintf(tmp + len, 12, ".%u", i);
+        i++;
      }
    while (stat(tmp, &st) == 0);
 
    ef = eet_open(tmp, EET_FILE_MODE_WRITE);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
+        return EINA_FALSE;
      }
 
    ret = eet_data_write
-     (ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY, my_conf, EINA_TRUE);
+         (ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY, my_conf, EINA_TRUE);
    eet_close(ef);
 
    if (ret)
      {
-       unlink(filename);
-       rename(tmp, filename);
+        unlink(filename);
+        rename(tmp, filename);
      }
 
    return ret;
-}
+} /* _my_conf_save */
 
-int main(int argc, char *argv[])
+int main(int argc, char * argv[])
 {
-   My_Conf_Type *my_conf;
-   const My_Conf_Subtype *sub;
-   const Eina_List *l;
+   My_Conf_Type * my_conf;
+   const My_Conf_Subtype * sub;
+   const Eina_List * l;
    int ret = 0;
 
    if (argc != 3)
      {
-       fprintf(stderr, "Usage:\n\t%s <input> <output>\n\n", argv[0]);
-       return -1;
+        fprintf(stderr, "Usage:\n\t%s <input> <output>\n\n", argv[0]);
+        return -1;
      }
 
    eina_init();
@@ -225,40 +226,41 @@ int main(int argc, char *argv[])
    my_conf = _my_conf_load(argv[1]);
    if (!my_conf)
      {
-       printf("creating new configuration.\n");
-       my_conf = _my_conf_new();
-       if (!my_conf)
-         {
-            ret = -2;
-            goto end;
-         }
+        printf("creating new configuration.\n");
+        my_conf = _my_conf_new();
+        if (!my_conf)
+          {
+             ret = -2;
+             goto end;
+          }
      }
 
    printf("My_Conf_Type:\n"
-         "\tversion: %#x\n"
-         "\tname...: '%s'\n"
-         "\tid.....: %d\n"
-         "\tenabled: %hhu\n"
-         "\tsubs...:\n",
-         my_conf->version,
-         my_conf->name ? my_conf->name : "",
-         my_conf->id,
-         my_conf->enabled);
+          "\tversion: %#x\n"
+          "\tname...: '%s'\n"
+          "\tid.....: %d\n"
+          "\tenabled: %hhu\n"
+          "\tsubs...:\n",
+          my_conf->version,
+          my_conf->name ? my_conf->name : "",
+          my_conf->id,
+          my_conf->enabled);
 
    EINA_LIST_FOREACH(my_conf->subs, l, sub)
-     printf("\t\tserver: '%s', port: %d\n",
-           sub->server ? sub->server : "",
-           sub->port);
+   printf("\t\tserver: '%s', port: %d\n",
+          sub->server ? sub->server : "",
+          sub->port);
 
    if (!_my_conf_save(my_conf, argv[2]))
-     ret = -3;
+      ret = -3;
 
    _my_conf_free(my_conf);
 
- end:
+end:
    _my_conf_descriptor_shutdown();
    eet_shutdown();
    eina_shutdown();
 
    return ret;
-}
+} /* main */
+
index 72d00c9..14b0a86 100644 (file)
 // will be automatically handled. The other members will have their
 // space reserved and zeroed (as it uses calloc()), but not
 // saved or loaded from eet files.
-typedef struct {
+typedef struct
+{
    unsigned int version; // it is recommended to use versioned configuration!
-   const char *name;
-   int id;
-   int not_saved_value; // example of not saved data inside!
-   Eina_Bool enabled;
+   const char * name;
+   int          id;
+   int          not_saved_value; // example of not saved data inside!
+   Eina_Bool    enabled;
 } My_Conf_Type;
 
 // string that represents the entry in eet file, you might like to have
@@ -24,11 +25,10 @@ typedef struct {
 // different strings
 static const char MY_CONF_FILE_ENTRY[] = "config";
 
-
 // keep the descriptor static global, so it can be
 // shared by different functions (load/save) of this and only this
 // file.
-static Eet_Data_Descriptor *_my_conf_descriptor;
+static Eet_Data_Descriptor * _my_conf_descriptor;
 
 static void
 _my_conf_descriptor_init(void)
@@ -52,81 +52,81 @@ _my_conf_descriptor_init(void)
 
    // Describe the members to be saved:
    // Use a temporary macro so we don't type a lot, also avoid errors:
-#define MY_CONF_ADD_BASIC(member, eet_type)                            \
-   EET_DATA_DESCRIPTOR_ADD_BASIC                                       \
-     (_my_conf_descriptor, My_Conf_Type, #member, member, eet_type)
+#define MY_CONF_ADD_BASIC(member, eet_type)\
+   EET_DATA_DESCRIPTOR_ADD_BASIC\
+      (_my_conf_descriptor, My_Conf_Type, # member, member, eet_type)
 
    MY_CONF_ADD_BASIC(version, EET_T_UINT);
-   MY_CONF_ADD_BASIC(name, EET_T_STRING);
-   MY_CONF_ADD_BASIC(id, EET_T_INT);
+   MY_CONF_ADD_BASIC(name,    EET_T_STRING);
+   MY_CONF_ADD_BASIC(id,      EET_T_INT);
    MY_CONF_ADD_BASIC(enabled, EET_T_UCHAR);
 
 #undef MY_CONF_ADD_BASIC
-}
+} /* _my_conf_descriptor_init */
 
 static void
 _my_conf_descriptor_shutdown(void)
 {
    eet_data_descriptor_free(_my_conf_descriptor);
-}
+} /* _my_conf_descriptor_shutdown */
 
 static My_Conf_Type *
 _my_conf_new(void)
 {
-   My_Conf_Type *my_conf = calloc(1, sizeof(My_Conf_Type));
+   My_Conf_Type * my_conf = calloc(1, sizeof(My_Conf_Type));
    if (!my_conf)
      {
-       fprintf(stderr, "ERROR: could not calloc My_Conf_Type\n");
-       return NULL;
+        fprintf(stderr, "ERROR: could not calloc My_Conf_Type\n");
+        return NULL;
      }
 
    my_conf->version = 0x112233;
    my_conf->enabled = EINA_TRUE;
    return my_conf;
-}
+} /* _my_conf_new */
 
 static void
-_my_conf_free(My_Conf_Type *my_conf)
+_my_conf_free(My_Conf_Type * my_conf)
 {
    eina_stringshare_del(my_conf->name);
    free(my_conf);
-}
+} /* _my_conf_free */
 
 static My_Conf_Type *
-_my_conf_load(const char *filename)
+_my_conf_load(const char * filename)
 {
-   My_Conf_Type *my_conf;
-   Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ);
+   My_Conf_Type * my_conf;
+   Eet_File * ef = eet_open(filename, EET_FILE_MODE_READ);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
-       return NULL;
+        fprintf(stderr, "ERROR: could not open '%s' for read\n", filename);
+        return NULL;
      }
 
    my_conf = eet_data_read(ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY);
    if (!my_conf)
-     goto end;
+      goto end;
 
    if (my_conf->version < 0x112233)
      {
-       fprintf(stderr,
-               "WARNING: version %#x was too old, upgrading it to %#x\n",
-               my_conf->version, 0x112233);
+        fprintf(stderr,
+                "WARNING: version %#x was too old, upgrading it to %#x\n",
+                my_conf->version, 0x112233);
 
-       my_conf->version = 0x112233;
-       my_conf->enabled = EINA_TRUE;
+        my_conf->version = 0x112233;
+        my_conf->enabled = EINA_TRUE;
      }
 
- end:
+end:
    eet_close(ef);
    return my_conf;
-}
+} /* _my_conf_load */
 
 static Eina_Bool
-_my_conf_save(const My_Conf_Type *my_conf, const char *filename)
+_my_conf_save(const My_Conf_Type * my_conf, const char * filename)
 {
    char tmp[PATH_MAX];
-   Eet_File *ef;
+   Eet_File * ef;
    Eina_Bool ret;
    unsigned int i, len;
    struct stat st;
@@ -134,47 +134,47 @@ _my_conf_save(const My_Conf_Type *my_conf, const char *filename)
    len = eina_strlcpy(tmp, filename, sizeof(tmp));
    if (len + 12 >= (int)sizeof(tmp))
      {
-       fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: file name is too big: %s\n", filename);
+        return EINA_FALSE;
      }
 
    i = 0;
    do
      {
-       snprintf(tmp + len, 12, ".%u", i);
-       i++;
+        snprintf(tmp + len, 12, ".%u", i);
+        i++;
      }
    while (stat(tmp, &st) == 0);
 
    ef = eet_open(tmp, EET_FILE_MODE_WRITE);
    if (!ef)
      {
-       fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
-       return EINA_FALSE;
+        fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp);
+        return EINA_FALSE;
      }
 
    ret = eet_data_write
-     (ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY, my_conf, EINA_TRUE);
+         (ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY, my_conf, EINA_TRUE);
    eet_close(ef);
 
    if (ret)
      {
-       unlink(filename);
-       rename(tmp, filename);
+        unlink(filename);
+        rename(tmp, filename);
      }
 
    return ret;
-}
+} /* _my_conf_save */
 
-int main(int argc, char *argv[])
+int main(int argc, char * argv[])
 {
-   My_Conf_Type *my_conf;
+   My_Conf_Type * my_conf;
    int ret = 0;
 
    if (argc != 3)
      {
-       fprintf(stderr, "Usage:\n\t%s <input> <output>\n\n", argv[0]);
-       return -1;
+        fprintf(stderr, "Usage:\n\t%s <input> <output>\n\n", argv[0]);
+        return -1;
      }
 
    eina_init();
@@ -184,34 +184,35 @@ int main(int argc, char *argv[])
    my_conf = _my_conf_load(argv[1]);
    if (!my_conf)
      {
-       printf("creating new configuration.\n");
-       my_conf = _my_conf_new();
-       if (!my_conf)
-         {
-            ret = -2;
-            goto end;
-         }
+        printf("creating new configuration.\n");
+        my_conf = _my_conf_new();
+        if (!my_conf)
+          {
+             ret = -2;
+             goto end;
+          }
      }
 
    printf("My_Conf_Type:\n"
-         "\tversion: %#x\n"
-         "\tname...: '%s'\n"
-         "\tid.....: %d\n"
-         "\tenabled: %hhu\n",
-         my_conf->version,
-         my_conf->name ? my_conf->name : "",
-         my_conf->id,
-         my_conf->enabled);
+          "\tversion: %#x\n"
+          "\tname...: '%s'\n"
+          "\tid.....: %d\n"
+          "\tenabled: %hhu\n",
+          my_conf->version,
+          my_conf->name ? my_conf->name : "",
+          my_conf->id,
+          my_conf->enabled);
 
    if (!_my_conf_save(my_conf, argv[2]))
-     ret = -3;
+      ret = -3;
 
    _my_conf_free(my_conf);
 
- end:
+end:
    _my_conf_descriptor_shutdown();
    eet_shutdown();
    eina_shutdown();
 
    return ret;
-}
+} /* main */
+
index 3b758c8..9ca3658 100644 (file)
 
 #ifdef EAPI
 # undef EAPI
-#endif
+#endif /* ifdef EAPI */
 
 #ifdef _WIN32
 # ifdef EFL_EET_BUILD
 #  ifdef DLL_EXPORT
 #   define EAPI __declspec(dllexport)
-#  else
+#  else /* ifdef DLL_EXPORT */
 #   define EAPI
 #  endif /* ! DLL_EXPORT */
-# else
+# else /* ifdef EFL_EET_BUILD */
 #  define EAPI __declspec(dllimport)
 # endif /* ! EFL_EET_BUILD */
-#else
+#else /* ifdef _WIN32 */
 # ifdef __GNUC__
 #  if __GNUC__ >= 4
 #   define EAPI __attribute__ ((visibility("default")))
-#  else
+#  else /* if __GNUC__ >= 4 */
 #   define EAPI
-#  endif
-# else
+#  endif /* if __GNUC__ >= 4 */
+# else /* ifdef __GNUC__ */
 #  define EAPI
-# endif
+# endif /* ifdef __GNUC__ */
 #endif /* ! _WIN32 */
 
 #ifdef __cplusplus
 extern "C" {
-#endif
-   
-  /**
  * @file Eet.h
  * @brief The file that provides the eet functions.
  *
  * This header provides the Eet management functions.
  *
  */
+#endif /* ifdef __cplusplus */
+
+/**
+ * @file Eet.h
+ * @brief The file that provides the eet functions.
+ *
+ * This header provides the Eet management functions.
+ *
+ */
 
 #define EET_VERSION_MAJOR 1
-#define EET_VERSION_MINOR 2
-  /**
-   * @typedef Eet_Version
-   * 
-   * This is the Eet version information structure that can be used at
-   * runtiime to detect which version of eet is being used and adapt
-   * appropriately as follows for example:
-   * 
-   * @code
-   * #if defined(EET_VERSION_MAJOR) && (EET_VERSION_MAJOR >= 1) && defined(EET_VERSION_MINOR) && (EET_VERSION_MINOR > 2)
-   * printf("Eet version: %i.%i.%i\n", 
-   *        eet_version->major, 
-   *        eet_version->minor, 
-   *        eet_version->micro);
-   * if (eet_version->revision > 0)
-   *   {
-   *     printf("  Built from SVN revision # %i\n", eet_version->revision);
-   *   }
-   * #endif
-   * @endcode
-   * 
-   * Note the #if check can be dropped if your program refuses to compile or
-   * work with an Eet version less than 1.3.0. 
-   */
-   typedef struct _Eet_Version
-     { 
-        int major; /** < major (binary or source incompatible changes) */
-        int minor; /** < minor (new features, bugfixes, major improvements version) */
-        int micro; /** < micro (bugfix, internal improvements, no new features version) */
-        int revision; /** < svn revision (0 if a proper rlease or the svn revsion number Eet is built from) */
-     } Eet_Version;
+#define EET_VERSION_MINOR 4
+/**
+ * @typedef Eet_Version
+ *
+ * This is the Eet version information structure that can be used at
+ * runtiime to detect which version of eet is being used and adapt
+ * appropriately as follows for example:
+ *
+ * @code
+ * #if defined(EET_VERSION_MAJOR) && (EET_VERSION_MAJOR >= 1) && defined(EET_VERSION_MINOR) && (EET_VERSION_MINOR > 2)
+ * printf("Eet version: %i.%i.%i\n",
+ *        eet_version->major,
+ *        eet_version->minor,
+ *        eet_version->micro);
+ * if (eet_version->revision > 0)
+ *   {
+ *     printf("  Built from SVN revision # %i\n", eet_version->revision);
+ *   }
+ * #endif
+ * @endcode
+ *
+ * Note the #if check can be dropped if your program refuses to compile or
+ * work with an Eet version less than 1.3.0.
+ */
+typedef struct _Eet_Version
+{
+   int major; /** < major (binary or source incompatible changes) */
+   int minor; /** < minor (new features, bugfixes, major improvements version) */
+   int micro; /** < micro (bugfix, internal improvements, no new features version) */
+   int revision; /** < svn revision (0 if a proper rlease or the svn revsion number Eet is built from) */
+} Eet_Version;
+
+EAPI extern Eet_Version *eet_version;
+
+/**
+ * @defgroup Eet_Group Top level functions
+ * Functions that affect Eet as a whole.
+ *
+ * @{
+ */
+
+/**
+ * @enum _Eet_Error
+ * All the error identifiers known by Eet.
+ */
+typedef enum _Eet_Error
+{
+   EET_ERROR_NONE, /**< No error, it's all fine! */
+   EET_ERROR_BAD_OBJECT, /**< Given object or handle is NULL or invalid */
+   EET_ERROR_EMPTY, /**< There was nothing to do */
+   EET_ERROR_NOT_WRITABLE, /**< Could not write to file or fine is #EET_FILE_MODE_READ */
+   EET_ERROR_OUT_OF_MEMORY, /**< Could not allocate memory */
+   EET_ERROR_WRITE_ERROR, /**< Failed to write data to destination */
+   EET_ERROR_WRITE_ERROR_FILE_TOO_BIG, /**< Failed to write file since it is too big */
+   EET_ERROR_WRITE_ERROR_IO_ERROR, /**< Failed to write since generic Input/Output error */
+   EET_ERROR_WRITE_ERROR_OUT_OF_SPACE, /**< Failed to write due out of space */
+   EET_ERROR_WRITE_ERROR_FILE_CLOSED, /**< Failed to write because file was closed */
+   EET_ERROR_MMAP_FAILED, /**< Could not mmap file */
+   EET_ERROR_X509_ENCODING_FAILED, /**< Could not encode using X509 */
+   EET_ERROR_SIGNATURE_FAILED, /**< Could not validate signature */
+   EET_ERROR_INVALID_SIGNATURE, /**< Signature is invalid */
+   EET_ERROR_NOT_SIGNED, /**< File or contents are not signed */
+   EET_ERROR_NOT_IMPLEMENTED, /**< Function is not implemented */
+   EET_ERROR_PRNG_NOT_SEEDED, /**< Could not introduce random seed */
+   EET_ERROR_ENCRYPT_FAILED, /**< Could not encrypt contents */
+   EET_ERROR_DECRYPT_FAILED /**< Could not decrypt contents */
+} Eet_Error; /**< Eet error identifiers */
+
+/**
+ * @}
+ */
+
+/**
+ * Initialize the EET library.
+ *
+ * @return The new init count.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Group
+ */
+EAPI int
+eet_init(void);
+
+/**
+ * Shut down the EET library.
+ *
+ * @return The new init count.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Group
+ */
+EAPI int
+eet_shutdown(void);
+
+/**
+ * Clear eet cache
+ *
+ * Eet didn't free items by default. If you are under memory
+ * presure, just call this function to recall all memory that are
+ * not yet referenced anymore.  The cache take care of modification
+ * on disk.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Group
+ */
+EAPI void
+eet_clearcache(void);
+
+/**
+ * @defgroup Eet_File_Group Eet File Main Functions
+ *
+ * Functions to create, destroy and do basic manipulation of
+ * #Eet_File handles.
+ *
+ * @{
+ */
+
+/**
+ * @enum _Eet_File_Mode
+ * Modes that a file can be opened.
+ */
+typedef enum _Eet_File_Mode
+{
+   EET_FILE_MODE_INVALID = -1,
+   EET_FILE_MODE_READ, /**< File is read-only. */
+   EET_FILE_MODE_WRITE, /**< File is write-only. */
+   EET_FILE_MODE_READ_WRITE /**< File is for both read and write */
+} Eet_File_Mode; /**< Modes that a file can be opened. */
+
+/**
+ * @typedef Eet_File
+ * Opaque handle that defines an Eet file (or memory).
+ *
+ * @see eet_open()
+ * @see eet_memopen_read()
+ * @see eet_close()
+ */
+typedef struct _Eet_File         Eet_File;
+
+/**
+ * @typedef Eet_Dictionary
+ * Opaque handle that defines a file-backed (mmaped) dictionary of strings.
+ */
+typedef struct _Eet_Dictionary   Eet_Dictionary;
+
+/**
+ * @}
+ */
+
+/**
+ * Open an eet file on disk, and returns a handle to it.
+ * @param file The file path to the eet file. eg: @c "/tmp/file.eet".
+ * @param mode The mode for opening. Either #EET_FILE_MODE_READ,
+ *        #EET_FILE_MODE_WRITE or #EET_FILE_MODE_READ_WRITE.
+ * @return An opened eet file handle.
+ * @ingroup Eet_File_Group
+ *
+ * This function will open an exiting eet file for reading, and build
+ * the directory table in memory and return a handle to the file, if it
+ * exists and can be read, and no memory errors occur on the way, otherwise
+ * NULL will be returned.
+ *
+ * It will also open an eet file for writing. This will, if successful,
+ * delete the original file and replace it with a new empty file, till
+ * the eet file handle is closed or flushed. If it cannot be opened for
+ * writing or a memory error occurs, NULL is returned.
+ *
+ * You can also open the file for read/write. If you then write a key that
+ * does not exist it will be created, if the key exists it will be replaced
+ * by the new data.
+ *
+ * Example:
+ * @code
+ * #include <Eet.h>
+ * #include <stdio.h>
+ * #include <string.h>
+ *
+ * int
+ * main(int argc, char **argv)
+ * {
+ *   Eet_File *ef;
+ *   char buf[1024], *ret, **list;
+ *   int size, num, i;
+ *
+ *   eet_init();
+ *
+ *   strcpy(buf, "Here is a string of data to save!");
+ *
+ *   ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_WRITE);
+ *   if (!ef) return -1;
+ *   if (!eet_write(ef, "/key/to_store/at", buf, 1024, 1))
+ *     fprintf(stderr, "Error writing data!\n");
+ *   eet_close(ef);
+ *
+ *   ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_READ);
+ *   if (!ef) return -1;
+ *   list = eet_list(ef, "*", &num);
+ *   if (list)
+ *     {
+ *       for (i = 0; i < num; i++)
+ *         printf("Key stored: %s\n", list[i]);
+ *       free(list);
+ *     }
+ *   ret = eet_read(ef, "/key/to_store/at", &size);
+ *   if (ret)
+ *     {
+ *       printf("Data read (%i bytes):\n%s\n", size, ret);
+ *       free(ret);
+ *     }
+ *   eet_close(ef);
+ *
+ *   eet_shutdown();
+ *
+ *   return 0;
+ * }
+ * @endcode
+ *
+ * @since 1.0.0
+ */
+EAPI Eet_File *
+eet_open(const char   *file,
+         Eet_File_Mode mode);
+
+/**
+ * Open an eet file directly from a memory location. The data are not copied,
+ * so you must keep them around as long as the eet file is open. Their is
+ * currently no cache for this kind of Eet_File, so it's reopen every time
+ * you do use eet_memopen_read.
+ *
+ * @since 1.1.0
+ * @ingroup Eet_File_Group
+ */
+EAPI Eet_File *
+eet_memopen_read(const void *data,
+                 size_t      size);
+
+/**
+ * Get the mode an Eet_File was opened with.
+ * @param ef A valid eet file handle.
+ * @return The mode ef was opened with.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI Eet_File_Mode
+eet_mode_get(Eet_File *ef);
+
+/**
+ * Close an eet file handle and flush and writes pending.
+ * @param ef A valid eet file handle.
+ *
+ * This function will flush any pending writes to disk if the eet file
+ * was opened for write, and free all data associated with the file handle
+ * and file, and close the file.
+ *
+ * If the eet file handle is not valid nothing will be done.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI Eet_Error
+eet_close(Eet_File *ef);
+
+/**
+ * Sync content of an eet file handle, flushing pending writes.
+ * @param ef A valid eet file handle.
+ *
+ * This function will flush any pending writes to disk. The eet file must
+ * be opened for write.
+ *
+ * If the eet file handle is not valid nothing will be done.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_File_Group
+ */
+EAPI Eet_Error
+eet_sync(Eet_File *ef);
+
+/**
+ * Return a handle to the shared string dictionary of the Eet file
+ * @param ef A valid eet file handle.
+ * @return A handle to the dictionary of the file
+ *
+ * This function returns a handle to the dictionary of an Eet file whose
+ * handle is @p ef, if a dictionary exists. NULL is returned otherwise or
+ * if the file handle is known to be invalid.
+ *
+ * @see eet_dictionary_string_check() to know if given string came
+ *      from the dictionary or it was dynamically allocated using
+ *      the #Eet_Data_Descriptor_Class instructrions.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI Eet_Dictionary *
+eet_dictionary_get(Eet_File *ef);
+
+/**
+ * Check if a given string comes from a given dictionary
+ * @param ed A valid dictionary handle
+ * @param string A valid 0 byte terminated C string
+ * @return 1 if it is in the dictionary, 0 otherwise
+ *
+ * This checks the given dictionary to see if the given string is actually
+ * inside that dictionary (i.e. comes from it) and returns 1 if it does.
+ * If the dictionary handle is invlide, the string is NULL or the string is
+ * not in the dictionary, 0 is returned.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI int
+eet_dictionary_string_check(Eet_Dictionary *ed,
+                            const char     *string);
+
+/**
+ * Read a specified entry from an eet file and return data
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param size_ret Number of bytes read from entry and returned.
+ * @return The data stored in that entry in the eet file.
+ *
+ * This function finds an entry in the eet file that is stored under the
+ * name specified, and returns that data, decompressed, if successful.
+ * NULL is returned if the lookup fails or if memory errors are
+ * encountered. It is the job of the calling program to call free() on
+ * the returned data. The number of bytes in the returned data chunk are
+ * placed in size_ret.
+ *
+ * If the eet file handle is not valid NULL is returned and size_ret is
+ * filled with 0.
+ *
+ * @see eet_read_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI void *
+eet_read(Eet_File   *ef,
+         const char *name,
+         int        *size_ret);
+
+/**
+ * Read a specified entry from an eet file and return data
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param size_ret Number of bytes read from entry and returned.
+ * @return The data stored in that entry in the eet file.
+ *
+ * This function finds an entry in the eet file that is stored under the
+ * name specified, and returns that data if not compressed and successful.
+ * NULL is returned if the lookup fails or if memory errors are
+ * encountered or if the data is comrpessed. The calling program must never
+ * call free() on the returned data. The number of bytes in the returned
+ * data chunk are placed in size_ret.
+ *
+ * If the eet file handle is not valid NULL is returned and size_ret is
+ * filled with 0.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI const void *
+eet_read_direct(Eet_File   *ef,
+                const char *name,
+                int        *size_ret);
+
+/**
+ * Write a specified entry to an eet file handle
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param data Pointer to the data to be stored.
+ * @param size Length in bytes in the data to be stored.
+ * @param compress Compression flags (1 == compress, 0 = don't compress).
+ * @return bytes written on successful write, 0 on failure.
+ *
+ * This function will write the specified chunk of data to the eet file
+ * and return greater than 0 on success. 0 will be returned on failure.
+ *
+ * The eet file handle must be a valid file handle for an eet file opened
+ * for writing. If it is not, 0 will be returned and no action will be
+ * performed.
+ *
+ * Name, and data must not be NULL, and size must be > 0. If these
+ * conditions are not met, 0 will be returned.
+ *
+ * The data will be copied (and optionally compressed) in ram, pending
+ * a flush to disk (it will stay in ram till the eet file handle is
+ * closed though).
+ *
+ * @see eet_write_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI int
+eet_write(Eet_File   *ef,
+          const char *name,
+          const void *data,
+          int         size,
+          int         compress);
+
+/**
+ * Delete a specified entry from an Eet file being written or re-written
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @return Success or failure of the delete.
+ *
+ * This function will delete the specified chunk of data from the eet file
+ * and return greater than 0 on success. 0 will be returned on failure.
+ *
+ * The eet file handle must be a valid file handle for an eet file opened
+ * for writing. If it is not, 0 will be returned and no action will be
+ * performed.
+ *
+ * Name, must not be NULL, otherwise 0 will be returned.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI int
+eet_delete(Eet_File   *ef,
+           const char *name);
+
+/**
+ * Alias a specific section to another one. Destination may exist or not,
+ * no check are done.
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param destination Destionation of the alias. eg: "/base/the_real_stuff_i_want".
+ * @param compress Compression flags (1 == compress, 0 = don't compress).
+ * @return EINA_TRUE on success, EINA_FALSE on failure.
+ *
+ * Name and Destination must not be NULL, otherwhise EINA_FALSE will be returned.
+ *
+ * @since 1.3.3
+ * @ingroup Eet_File_Group
+ */
+EAPI Eina_Bool
+eet_alias(Eet_File   *ef,
+          const char *name,
+          const char *destination,
+          int         compress);
+
+/**
+ * List all entries in eet file matching shell glob.
+ * @param ef A valid eet file handle.
+ * @param glob A shell glob to match against.
+ * @param count_ret Number of entries found to match.
+ * @return Pointer to an array of strings.
+ *
+ * This function will list all entries in the eet file matching the
+ * supplied shell glob and return an allocated list of their names, if
+ * there are any, and if no memory errors occur.
+ *
+ * The eet file handle must be valid and glob must not be NULL, or NULL
+ * will be returned and count_ret will be filled with 0.
+ *
+ * The calling program must call free() on the array returned, but NOT
+ * on the string pointers in the array. They are taken as read-only
+ * internals from the eet file handle. They are only valid as long as
+ * the file handle is not closed. When it is closed those pointers in the
+ * array are now not valid and should not be used.
+ *
+ * On success the array returned will have a list of string pointers
+ * that are the names of the entries that matched, and count_ret will have
+ * the number of entries in this array placed in it.
+ *
+ * Hint: an easy way to list all entries in an eet file is to use a glob
+ * value of "*".
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI char **
+eet_list(Eet_File   *ef,
+         const char *glob,
+         int        *count_ret);
+
+/**
+ * Return the number of entries in the specified eet file.
+ * @param ef A valid eet file handle.
+ * @return Number of entries in ef or -1 if the number of entries
+ *         cannot be read due to open mode restrictions.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Group
+ */
+EAPI int
+eet_num_entries(Eet_File *ef);
+
+/**
+ * @defgroup Eet_File_Cipher_Group Eet File Ciphered Main Functions
+ *
+ * Most of the @ref Eet_File_Group have alternative versions that
+ * accounts for ciphers to protect their content.
+ *
+ * @see @ref Eet_Cipher_Group
+ *
+ * @ingroup Eet_File_Group
+ */
+
+/**
+ * Read a specified entry from an eet file and return data using a cipher.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param size_ret Number of bytes read from entry and returned.
+ * @param cipher_key The key to use as cipher.
+ * @return The data stored in that entry in the eet file.
+ *
+ * This function finds an entry in the eet file that is stored under the
+ * name specified, and returns that data, decompressed, if successful.
+ * NULL is returned if the lookup fails or if memory errors are
+ * encountered. It is the job of the calling program to call free() on
+ * the returned data. The number of bytes in the returned data chunk are
+ * placed in size_ret.
+ *
+ * If the eet file handle is not valid NULL is returned and size_ret is
+ * filled with 0.
+ *
+ * @see eet_read()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Cipher_Group
+ */
+EAPI void *
+eet_read_cipher(Eet_File   *ef,
+                const char *name,
+                int        *size_ret,
+                const char *cipher_key);
+
+/**
+ * Write a specified entry to an eet file handle using a cipher.
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param data Pointer to the data to be stored.
+ * @param size Length in bytes in the data to be stored.
+ * @param compress Compression flags (1 == compress, 0 = don't compress).
+ * @param cipher_key The key to use as cipher.
+ * @return bytes written on successful write, 0 on failure.
+ *
+ * This function will write the specified chunk of data to the eet file
+ * and return greater than 0 on success. 0 will be returned on failure.
+ *
+ * The eet file handle must be a valid file handle for an eet file opened
+ * for writing. If it is not, 0 will be returned and no action will be
+ * performed.
+ *
+ * Name, and data must not be NULL, and size must be > 0. If these
+ * conditions are not met, 0 will be returned.
+ *
+ * The data will be copied (and optionally compressed) in ram, pending
+ * a flush to disk (it will stay in ram till the eet file handle is
+ * closed though).
+ *
+ * @see eet_write()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Cipher_Group
+ */
+EAPI int
+eet_write_cipher(Eet_File   *ef,
+                 const char *name,
+                 const void *data,
+                 int         size,
+                 int         compress,
+                 const char *cipher_key);
+
+/**
+ * @defgroup Eet_File_Image_Group Image Store and Load
+ *
+ * Eet efficiently stores and loads images, including alpha
+ * channels and lossy compressions.
+ */
+
+/**
+ * Read just the header data for an image and dont decode the pixels.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on successfull decode, 0 otherwise
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1 indicating the header was read and
+ * decoded properly, or 0 on failure.
+ *
+ * @see eet_data_image_header_read_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI int
+eet_data_image_header_read(Eet_File     *ef,
+                           const char   *name,
+                           unsigned int *w,
+                           unsigned int *h,
+                           int          *alpha,
+                           int          *compress,
+                           int          *quality,
+                           int          *lossy);
+
+/**
+ * Read image data from the named key in the eet file.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return The image pixel data decoded
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns a pointer to the image data decoded. The
+ * calling application is responsible for calling free() on the image data
+ * when it is done with it. On failure NULL is returned and the parameter
+ * values may not contain any sensible data.
+ *
+ * @see eet_data_image_read_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI void *
+eet_data_image_read(Eet_File     *ef,
+                    const char   *name,
+                    unsigned int *w,
+                    unsigned int *h,
+                    int          *alpha,
+                    int          *compress,
+                    int          *quality,
+                    int          *lossy);
+
+/**
+ * Read image data from the named key in the eet file.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param src_x The starting x coordinate from where to dump the stream.
+ * @param src_y The starting y coordinate from where to dump the stream.
+ * @param d A pointer to the pixel surface.
+ * @param w The expected width in pixels of the pixel surface to decode.
+ * @param h The expected height in pixels of the pixel surface to decode.
+ * @param row_stride The length of a pixels line in the destination surface.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 otherwise.
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1, and 0 on failure. On failure the
+ * parameter values may not contain any sensible data.
+ *
+ * @see eet_data_image_read_to_surface_cipher()
+ *
+ * @since 1.0.2
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI int
+eet_data_image_read_to_surface(Eet_File     *ef,
+                               const char   *name,
+                               unsigned int  src_x,
+                               unsigned int  src_y,
+                               unsigned int *d,
+                               unsigned int  w,
+                               unsigned int  h,
+                               unsigned int  row_stride,
+                               int          *alpha,
+                               int          *compress,
+                               int          *quality,
+                               int          *lossy);
+
+/**
+ * Write image data to the named key in an eet file.
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param data A pointer to the image pixel data.
+ * @param w The width of the image in pixels.
+ * @param h The height of the image in pixels.
+ * @param alpha The alpha channel flag.
+ * @param compress The compression amount.
+ * @param quality The quality encoding amount.
+ * @param lossy The lossiness flag.
+ * @return Success if the data was encoded and written or not.
+ *
+ * This function takes image pixel data and encodes it in an eet file
+ * stored under the supplied name key, and returns how many bytes were
+ * actually written to encode the image data.
+ *
+ * The data expected is the same format as returned by eet_data_image_read.
+ * If this is not the case weird things may happen. Width and height must
+ * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
+ * the alpha values are not useful and 1 meaning they are). Compress can
+ * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
+ * This is only used if the image is not lossily encoded. Quality is used on
+ * lossy compression and should be a value from 0 to 100. The lossy flag
+ * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
+ * image quality loss (but then have a much smaller encoding).
+ *
+ * On success this function returns the number of bytes that were required
+ * to encode the image data, or on failure it returns 0.
+ *
+ * @see eet_data_image_write_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI int
+eet_data_image_write(Eet_File    *ef,
+                     const char  *name,
+                     const void  *data,
+                     unsigned int w,
+                     unsigned int h,
+                     int          alpha,
+                     int          compress,
+                     int          quality,
+                     int          lossy);
+
+/**
+ * Decode Image data header only to get information.
+ * @param data The encoded pixel data.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 on failure.
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1 indicating the header was read and
+ * decoded properly, or 0 on failure.
+ *
+ * @see eet_data_image_header_decode_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI int
+eet_data_image_header_decode(const void   *data,
+                             int           size,
+                             unsigned int *w,
+                             unsigned int *h,
+                             int          *alpha,
+                             int          *compress,
+                             int          *quality,
+                             int          *lossy);
+
+/**
+ * Decode Image data into pixel data.
+ * @param data The encoded pixel data.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return The image pixel data decoded
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns a pointer to the image data decoded. The
+ * calling application is responsible for calling free() on the image data
+ * when it is done with it. On failure NULL is returned and the parameter
+ * values may not contain any sensible data.
+ *
+ * @see eet_data_image_decode_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI void *
+eet_data_image_decode(const void   *data,
+                      int           size,
+                      unsigned int *w,
+                      unsigned int *h,
+                      int          *alpha,
+                      int          *compress,
+                      int          *quality,
+                      int          *lossy);
+
+/**
+ * Decode Image data into pixel data.
+ * @param data The encoded pixel data.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param src_x The starting x coordinate from where to dump the stream.
+ * @param src_y The starting y coordinate from where to dump the stream.
+ * @param d A pointer to the pixel surface.
+ * @param w The expected width in pixels of the pixel surface to decode.
+ * @param h The expected height in pixels of the pixel surface to decode.
+ * @param row_stride The length of a pixels line in the destination surface.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 otherwise.
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (alpha, compress etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1, and 0 on failure. On failure the
+ * parameter values may not contain any sensible data.
+ *
+ * @see eet_data_image_decode_to_surface_cipher()
+ *
+ * @since 1.0.2
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI int
+eet_data_image_decode_to_surface(const void   *data,
+                                 int           size,
+                                 unsigned int  src_x,
+                                 unsigned int  src_y,
+                                 unsigned int *d,
+                                 unsigned int  w,
+                                 unsigned int  h,
+                                 unsigned int  row_stride,
+                                 int          *alpha,
+                                 int          *compress,
+                                 int          *quality,
+                                 int          *lossy);
+
+/**
+ * Encode image data for storage or transmission.
+ * @param data A pointer to the image pixel data.
+ * @param size_ret A pointer to an int to hold the size of the returned data.
+ * @param w The width of the image in pixels.
+ * @param h The height of the image in pixels.
+ * @param alpha The alpha channel flag.
+ * @param compress The compression amount.
+ * @param quality The quality encoding amount.
+ * @param lossy The lossiness flag.
+ * @return The encoded image data.
+ *
+ * This function stakes image pixel data and encodes it with compression and
+ * possible loss of quality (as a trade off for size) for storage or
+ * transmission to another system.
+ *
+ * The data expected is the same format as returned by eet_data_image_read.
+ * If this is not the case weird things may happen. Width and height must
+ * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
+ * the alpha values are not useful and 1 meaning they are). Compress can
+ * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
+ * This is only used if the image is not lossily encoded. Quality is used on
+ * lossy compression and should be a value from 0 to 100. The lossy flag
+ * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
+ * image quality loss (but then have a much smaller encoding).
+ *
+ * On success this function returns a pointer to the encoded data that you
+ * can free with free() when no longer needed.
+ *
+ * @see eet_data_image_encode_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Group
+ */
+EAPI void *
+eet_data_image_encode(const void  *data,
+                      int         *size_ret,
+                      unsigned int w,
+                      unsigned int h,
+                      int          alpha,
+                      int          compress,
+                      int          quality,
+                      int          lossy);
+
+/**
+ * @defgroup Eet_File_Image_Cipher_Group Image Store and Load using a Cipher
+ *
+ * Most of the @ref Eet_File_Image_Group have alternative versions
+ * that accounts for ciphers to protect their content.
+ *
+ * @see @ref Eet_Cipher_Group
+ *
+ * @ingroup Eet_File_Image_Group
+ */
+
+/**
+ * Read just the header data for an image and dont decode the pixels using a cipher.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on successfull decode, 0 otherwise
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1 indicating the header was read and
+ * decoded properly, or 0 on failure.
+ *
+ * @see eet_data_image_header_read()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI int
+eet_data_image_header_read_cipher(Eet_File     *ef,
+                                  const char   *name,
+                                  const char   *cipher_key,
+                                  unsigned int *w,
+                                  unsigned int *h,
+                                  int          *alpha,
+                                  int          *compress,
+                                  int          *quality,
+                                  int          *lossy);
+
+/**
+ * Read image data from the named key in the eet file using a cipher.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return The image pixel data decoded
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns a pointer to the image data decoded. The
+ * calling application is responsible for calling free() on the image data
+ * when it is done with it. On failure NULL is returned and the parameter
+ * values may not contain any sensible data.
+ *
+ * @see eet_data_image_read()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI void *
+eet_data_image_read_cipher(Eet_File     *ef,
+                           const char   *name,
+                           const char   *cipher_key,
+                           unsigned int *w,
+                           unsigned int *h,
+                           int          *alpha,
+                           int          *compress,
+                           int          *quality,
+                           int          *lossy);
    
-   EAPI extern Eet_Version *eet_version;
-   
-  /**
-   * @defgroup Eet_Group Top level functions
-   * Functions that affect Eet as a whole.
-   *
-   * @{
-   */
-
-  /**
-   * @enum _Eet_Error
-   * All the error identifiers known by Eet.
-   */
-   typedef enum _Eet_Error
-     {
-       EET_ERROR_NONE, /**< No error, it's all fine! */
-       EET_ERROR_BAD_OBJECT, /**< Given object or handle is NULL or invalid */
-       EET_ERROR_EMPTY, /**< There was nothing to do */
-       EET_ERROR_NOT_WRITABLE, /**< Could not write to file or fine is #EET_FILE_MODE_READ */
-       EET_ERROR_OUT_OF_MEMORY, /**< Could not allocate memory */
-       EET_ERROR_WRITE_ERROR, /**< Failed to write data to destination */
-       EET_ERROR_WRITE_ERROR_FILE_TOO_BIG, /**< Failed to write file since it is too big */
-       EET_ERROR_WRITE_ERROR_IO_ERROR, /**< Failed to write since generic Input/Output error */
-       EET_ERROR_WRITE_ERROR_OUT_OF_SPACE, /**< Failed to write due out of space */
-       EET_ERROR_WRITE_ERROR_FILE_CLOSED, /**< Failed to write because file was closed */
-       EET_ERROR_MMAP_FAILED, /**< Could not mmap file */
-       EET_ERROR_X509_ENCODING_FAILED, /**< Could not encode using X509 */
-       EET_ERROR_SIGNATURE_FAILED, /**< Could not validate signature */
-       EET_ERROR_INVALID_SIGNATURE, /**< Signature is invalid */
-       EET_ERROR_NOT_SIGNED, /**< File or contents are not signed */
-       EET_ERROR_NOT_IMPLEMENTED, /**< Function is not implemented */
-       EET_ERROR_PRNG_NOT_SEEDED, /**< Could not introduce random seed */
-       EET_ERROR_ENCRYPT_FAILED, /**< Could not encrypt contents */
-       EET_ERROR_DECRYPT_FAILED /**< Could not decrypt contents */
-     } Eet_Error; /**< Eet error identifiers */
-
-  /**
-   * @}
-   */
-
-   /**
-    * Initialize the EET library.
-    *
-    * @return The new init count.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Group
-    */
-   EAPI int eet_init(void);
-
-   /**
-    * Shut down the EET library.
-    *
-    * @return The new init count.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Group
-    */
-   EAPI int eet_shutdown(void);
-
-   /**
-    * Clear eet cache
-    *
-    * Eet didn't free items by default. If you are under memory
-    * presure, just call this function to recall all memory that are
-    * not yet referenced anymore.  The cache take care of modification
-    * on disk.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Group
-    */
-   EAPI void eet_clearcache(void);
-
-
-  /**
-    * @defgroup Eet_File_Group Eet File Main Functions
-    *
-    * Functions to create, destroy and do basic manipulation of
-    * #Eet_File handles.
-    *
-    * @{
-    */
-
-  /**
-   * @enum _Eet_File_Mode
-   * Modes that a file can be opened.
-   */
-   typedef enum _Eet_File_Mode
-     {
-       EET_FILE_MODE_INVALID = -1,
-       EET_FILE_MODE_READ, /**< File is read-only. */
-       EET_FILE_MODE_WRITE, /**< File is write-only. */
-       EET_FILE_MODE_READ_WRITE /**< File is for both read and write */
-     } Eet_File_Mode; /**< Modes that a file can be opened. */
-
-  /**
-   * @typedef Eet_File
-   * Opaque handle that defines an Eet file (or memory).
-   *
-   * @see eet_open()
-   * @see eet_memopen_read()
-   * @see eet_close()
-   */
-   typedef struct _Eet_File Eet_File;
-
-  /**
-   * @typedef Eet_Dictionary
-   * Opaque handle that defines a file-backed (mmaped) dictionary of strings.
-   */
-   typedef struct _Eet_Dictionary Eet_Dictionary;
-
-
-  /**
-   * @}
-   */
-
-   /**
-    * Open an eet file on disk, and returns a handle to it.
-    * @param file The file path to the eet file. eg: @c "/tmp/file.eet".
-    * @param mode The mode for opening. Either #EET_FILE_MODE_READ,
-    *        #EET_FILE_MODE_WRITE or #EET_FILE_MODE_READ_WRITE.
-    * @return An opened eet file handle.
-    * @ingroup Eet_File_Group
-    *
-    * This function will open an exiting eet file for reading, and build
-    * the directory table in memory and return a handle to the file, if it
-    * exists and can be read, and no memory errors occur on the way, otherwise
-    * NULL will be returned.
-    *
-    * It will also open an eet file for writing. This will, if successful,
-    * delete the original file and replace it with a new empty file, till
-    * the eet file handle is closed or flushed. If it cannot be opened for
-    * writing or a memory error occurs, NULL is returned.
-    *
-    * You can also open the file for read/write. If you then write a key that
-    * does not exist it will be created, if the key exists it will be replaced
-    * by the new data.
-    *
-    * Example:
-    * @code
-    * #include <Eet.h>
-    * #include <stdio.h>
-    * #include <string.h>
-    *
-    * int
-    * main(int argc, char **argv)
-    * {
-    *   Eet_File *ef;
-    *   char buf[1024], *ret, **list;
-    *   int size, num, i;
-    *
-    *   eet_init();
-    *
-    *   strcpy(buf, "Here is a string of data to save!");
-    *
-    *   ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_WRITE);
-    *   if (!ef) return -1;
-    *   if (!eet_write(ef, "/key/to_store/at", buf, 1024, 1))
-    *     fprintf(stderr, "Error writing data!\n");
-    *   eet_close(ef);
-    *
-    *   ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_READ);
-    *   if (!ef) return -1;
-    *   list = eet_list(ef, "*", &num);
-    *   if (list)
-    *     {
-    *       for (i = 0; i < num; i++)
-    *         printf("Key stored: %s\n", list[i]);
-    *       free(list);
-    *     }
-    *   ret = eet_read(ef, "/key/to_store/at", &size);
-    *   if (ret)
-    *     {
-    *       printf("Data read (%i bytes):\n%s\n", size, ret);
-    *       free(ret);
-    *     }
-    *   eet_close(ef);
-    *
-    *   eet_shutdown();
-    *
-    *   return 0;
-    * }
-    * @endcode
-    *
-    * @since 1.0.0
-    */
-   EAPI Eet_File *eet_open(const char *file, Eet_File_Mode mode);
-
-   /**
-    * Open an eet file directly from a memory location. The data are not copied,
-    * so you must keep them around as long as the eet file is open. Their is
-    * currently no cache for this kind of Eet_File, so it's reopen every time
-    * you do use eet_memopen_read.
-    *
-    * @since 1.1.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI Eet_File *eet_memopen_read(const void *data, size_t size);
-
-   /**
-    * Get the mode an Eet_File was opened with.
-    * @param ef A valid eet file handle.
-    * @return The mode ef was opened with.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI Eet_File_Mode eet_mode_get(Eet_File *ef);
-
-   /**
-    * Close an eet file handle and flush and writes pending.
-    * @param ef A valid eet file handle.
-    *
-    * This function will flush any pending writes to disk if the eet file
-    * was opened for write, and free all data associated with the file handle
-    * and file, and close the file.
-    *
-    * If the eet file handle is not valid nothing will be done.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI Eet_Error eet_close(Eet_File *ef);
-
-   /**
-    * Sync content of an eet file handle, flushing pending writes.
-    * @param ef A valid eet file handle.
-    *
-    * This function will flush any pending writes to disk. The eet file must
-    * be opened for write.
-    *
-    * If the eet file handle is not valid nothing will be done.
-    *
-    * @since 1.2.4
-    * @ingroup Eet_File_Group
-    */
-   EAPI Eet_Error eet_sync(Eet_File *ef);
-
-   /**
-    * Return a handle to the shared string dictionary of the Eet file
-    * @param ef A valid eet file handle.
-    * @return A handle to the dictionary of the file
-    *
-    * This function returns a handle to the dictionary of an Eet file whose
-    * handle is @p ef, if a dictionary exists. NULL is returned otherwise or
-    * if the file handle is known to be invalid.
-    *
-    * @see eet_dictionary_string_check() to know if given string came
-    *      from the dictionary or it was dynamically allocated using
-    *      the #Eet_Data_Descriptor_Class instructrions.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI Eet_Dictionary *eet_dictionary_get(Eet_File *ef);
-
-   /**
-    * Check if a given string comes from a given dictionary
-    * @param ed A valid dictionary handle
-    * @param string A valid 0 byte terminated C string
-    * @return 1 if it is in the dictionary, 0 otherwise
-    *
-    * This checks the given dictionary to see if the given string is actually
-    * inside that dictionary (i.e. comes from it) and returns 1 if it does.
-    * If the dictionary handle is invlide, the string is NULL or the string is
-    * not in the dictionary, 0 is returned.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI int eet_dictionary_string_check(Eet_Dictionary *ed, const char *string);
-
-   /**
-    * Read a specified entry from an eet file and return data
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param size_ret Number of bytes read from entry and returned.
-    * @return The data stored in that entry in the eet file.
-    *
-    * This function finds an entry in the eet file that is stored under the
-    * name specified, and returns that data, decompressed, if successful.
-    * NULL is returned if the lookup fails or if memory errors are
-    * encountered. It is the job of the calling program to call free() on
-    * the returned data. The number of bytes in the returned data chunk are
-    * placed in size_ret.
-    *
-    * If the eet file handle is not valid NULL is returned and size_ret is
-    * filled with 0.
-    *
-    * @see eet_read_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI void *eet_read(Eet_File *ef, const char *name, int *size_ret);
-
-   /**
-    * Read a specified entry from an eet file and return data
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param size_ret Number of bytes read from entry and returned.
-    * @return The data stored in that entry in the eet file.
-    *
-    * This function finds an entry in the eet file that is stored under the
-    * name specified, and returns that data if not compressed and successful.
-    * NULL is returned if the lookup fails or if memory errors are
-    * encountered or if the data is comrpessed. The calling program must never
-    * call free() on the returned data. The number of bytes in the returned
-    * data chunk are placed in size_ret.
-    *
-    * If the eet file handle is not valid NULL is returned and size_ret is
-    * filled with 0.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI const void *eet_read_direct(Eet_File *ef, const char *name, int *size_ret);
-
-   /**
-    * Write a specified entry to an eet file handle
-    * @param ef A valid eet file handle opened for writing.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param data Pointer to the data to be stored.
-    * @param size Length in bytes in the data to be stored.
-    * @param compress Compression flags (1 == compress, 0 = don't compress).
-    * @return bytes written on successful write, 0 on failure.
-    *
-    * This function will write the specified chunk of data to the eet file
-    * and return greater than 0 on success. 0 will be returned on failure.
-    *
-    * The eet file handle must be a valid file handle for an eet file opened
-    * for writing. If it is not, 0 will be returned and no action will be
-    * performed.
-    *
-    * Name, and data must not be NULL, and size must be > 0. If these
-    * conditions are not met, 0 will be returned.
-    *
-    * The data will be copied (and optionally compressed) in ram, pending
-    * a flush to disk (it will stay in ram till the eet file handle is
-    * closed though).
-    *
-    * @see eet_write_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI int eet_write(Eet_File *ef, const char *name, const void *data, int size, int compress);
-
-   /**
-    * Delete a specified entry from an Eet file being written or re-written
-    * @param ef A valid eet file handle opened for writing.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @return Success or failure of the delete.
-    *
-    * This function will delete the specified chunk of data from the eet file
-    * and return greater than 0 on success. 0 will be returned on failure.
-    *
-    * The eet file handle must be a valid file handle for an eet file opened
-    * for writing. If it is not, 0 will be returned and no action will be
-    * performed.
-    *
-    * Name, must not be NULL, otherwise 0 will be returned.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI int eet_delete(Eet_File *ef, const char *name);
-
-   /**
-    * List all entries in eet file matching shell glob.
-    * @param ef A valid eet file handle.
-    * @param glob A shell glob to match against.
-    * @param count_ret Number of entries found to match.
-    * @return Pointer to an array of strings.
-    *
-    * This function will list all entries in the eet file matching the
-    * supplied shell glob and return an allocated list of their names, if
-    * there are any, and if no memory errors occur.
-    *
-    * The eet file handle must be valid and glob must not be NULL, or NULL
-    * will be returned and count_ret will be filled with 0.
-    *
-    * The calling program must call free() on the array returned, but NOT
-    * on the string pointers in the array. They are taken as read-only
-    * internals from the eet file handle. They are only valid as long as
-    * the file handle is not closed. When it is closed those pointers in the
-    * array are now not valid and should not be used.
-    *
-    * On success the array returned will have a list of string pointers
-    * that are the names of the entries that matched, and count_ret will have
-    * the number of entries in this array placed in it.
-    *
-    * Hint: an easy way to list all entries in an eet file is to use a glob
-    * value of "*".
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI char **eet_list(Eet_File *ef, const char *glob, int *count_ret);
-
-   /**
-    * Return the number of entries in the specified eet file.
-    * @param ef A valid eet file handle.
-    * @return Number of entries in ef or -1 if the number of entries
-    *         cannot be read due to open mode restrictions.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Group
-    */
-   EAPI int eet_num_entries(Eet_File *ef);
-
-   /**
-    * @defgroup Eet_File_Cipher_Group Eet File Ciphered Main Functions
-    *
-    * Most of the @ref Eet_File_Group have alternative versions that
-    * accounts for ciphers to protect their content.
-    *
-    * @see @ref Eet_Cipher_Group
-    *
-    * @ingroup Eet_File_Group
-    */
-
-   /**
-    * Read a specified entry from an eet file and return data using a cipher.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param size_ret Number of bytes read from entry and returned.
-    * @param cipher_key The key to use as cipher.
-    * @return The data stored in that entry in the eet file.
-    *
-    * This function finds an entry in the eet file that is stored under the
-    * name specified, and returns that data, decompressed, if successful.
-    * NULL is returned if the lookup fails or if memory errors are
-    * encountered. It is the job of the calling program to call free() on
-    * the returned data. The number of bytes in the returned data chunk are
-    * placed in size_ret.
-    *
-    * If the eet file handle is not valid NULL is returned and size_ret is
-    * filled with 0.
-    *
-    * @see eet_read()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Cipher_Group
-    */
-   EAPI void *eet_read_cipher(Eet_File *ef, const char *name, int *size_ret, const char *cipher_key);
-
-   /**
-    * Write a specified entry to an eet file handle using a cipher.
-    * @param ef A valid eet file handle opened for writing.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param data Pointer to the data to be stored.
-    * @param size Length in bytes in the data to be stored.
-    * @param compress Compression flags (1 == compress, 0 = don't compress).
-    * @param cipher_key The key to use as cipher.
-    * @return bytes written on successful write, 0 on failure.
-    *
-    * This function will write the specified chunk of data to the eet file
-    * and return greater than 0 on success. 0 will be returned on failure.
-    *
-    * The eet file handle must be a valid file handle for an eet file opened
-    * for writing. If it is not, 0 will be returned and no action will be
-    * performed.
-    *
-    * Name, and data must not be NULL, and size must be > 0. If these
-    * conditions are not met, 0 will be returned.
-    *
-    * The data will be copied (and optionally compressed) in ram, pending
-    * a flush to disk (it will stay in ram till the eet file handle is
-    * closed though).
-    *
-    * @see eet_write()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Cipher_Group
-    */
-   EAPI int eet_write_cipher(Eet_File *ef, const char *name, const void *data, int size, int compress, const char *cipher_key);
-
-
-   /**
-    * @defgroup Eet_File_Image_Group Image Store and Load
-    *
-    * Eet efficiently stores and loads images, including alpha
-    * channels and lossy compressions.
-    */
-
-   /**
-    * Read just the header data for an image and dont decode the pixels.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on successfull decode, 0 otherwise
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1 indicating the header was read and
-    * decoded properly, or 0 on failure.
-    *
-    * @see eet_data_image_header_read_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI int eet_data_image_header_read(Eet_File *ef, const char *name, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Read image data from the named key in the eet file.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return The image pixel data decoded
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns a pointer to the image data decoded. The
-    * calling application is responsible for calling free() on the image data
-    * when it is done with it. On failure NULL is returned and the parameter
-    * values may not contain any sensible data.
-    *
-    * @see eet_data_image_read_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI void *eet_data_image_read(Eet_File *ef, const char *name, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Read image data from the named key in the eet file.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param src_x The starting x coordinate from where to dump the stream.
-    * @param src_y The starting y coordinate from where to dump the stream.
-    * @param d A pointer to the pixel surface.
-    * @param w The expected width in pixels of the pixel surface to decode.
-    * @param h The expected height in pixels of the pixel surface to decode.
-    * @param row_stride The length of a pixels line in the destination surface.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 otherwise.
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1, and 0 on failure. On failure the
-    * parameter values may not contain any sensible data.
-    *
-    * @see eet_data_image_read_to_surface_cipher()
-    *
-    * @since 1.0.2
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI int eet_data_image_read_to_surface(Eet_File *ef, const char *name, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Write image data to the named key in an eet file.
-    * @param ef A valid eet file handle opened for writing.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param data A pointer to the image pixel data.
-    * @param w The width of the image in pixels.
-    * @param h The height of the image in pixels.
-    * @param alpha The alpha channel flag.
-    * @param compress The compression amount.
-    * @param quality The quality encoding amount.
-    * @param lossy The lossiness flag.
-    * @return Success if the data was encoded and written or not.
-    *
-    * This function takes image pixel data and encodes it in an eet file
-    * stored under the supplied name key, and returns how many bytes were
-    * actually written to encode the image data.
-    *
-    * The data expected is the same format as returned by eet_data_image_read.
-    * If this is not the case weird things may happen. Width and height must
-    * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
-    * the alpha values are not useful and 1 meaning they are). Compress can
-    * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
-    * This is only used if the image is not lossily encoded. Quality is used on
-    * lossy compression and should be a value from 0 to 100. The lossy flag
-    * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
-    * image quality loss (but then have a much smaller encoding).
-    *
-    * On success this function returns the number of bytes that were required
-    * to encode the image data, or on failure it returns 0.
-    *
-    * @see eet_data_image_write_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI int eet_data_image_write(Eet_File *ef, const char *name, const void *data, unsigned int w, unsigned int h, int alpha, int compress, int quality, int lossy);
-
-   /**
-    * Decode Image data header only to get information.
-    * @param data The encoded pixel data.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 on failure.
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1 indicating the header was read and
-    * decoded properly, or 0 on failure.
-    *
-    * @see eet_data_image_header_decode_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI int eet_data_image_header_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Decode Image data into pixel data.
-    * @param data The encoded pixel data.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return The image pixel data decoded
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns a pointer to the image data decoded. The
-    * calling application is responsible for calling free() on the image data
-    * when it is done with it. On failure NULL is returned and the parameter
-    * values may not contain any sensible data.
-    *
-    * @see eet_data_image_decode_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI void *eet_data_image_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Decode Image data into pixel data.
-    * @param data The encoded pixel data.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param src_x The starting x coordinate from where to dump the stream.
-    * @param src_y The starting y coordinate from where to dump the stream.
-    * @param d A pointer to the pixel surface.
-    * @param w The expected width in pixels of the pixel surface to decode.
-    * @param h The expected height in pixels of the pixel surface to decode.
-    * @param row_stride The length of a pixels line in the destination surface.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 otherwise.
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (alpha, compress etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1, and 0 on failure. On failure the
-    * parameter values may not contain any sensible data.
-    *
-    * @see eet_data_image_decode_to_surface_cipher()
-    *
-    * @since 1.0.2
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI int eet_data_image_decode_to_surface(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Encode image data for storage or transmission.
-    * @param data A pointer to the image pixel data.
-    * @param size_ret A pointer to an int to hold the size of the returned data.
-    * @param w The width of the image in pixels.
-    * @param h The height of the image in pixels.
-    * @param alpha The alpha channel flag.
-    * @param compress The compression amount.
-    * @param quality The quality encoding amount.
-    * @param lossy The lossiness flag.
-    * @return The encoded image data.
-    *
-    * This function stakes image pixel data and encodes it with compression and
-    * possible loss of quality (as a trade off for size) for storage or
-    * transmission to another system.
-    *
-    * The data expected is the same format as returned by eet_data_image_read.
-    * If this is not the case weird things may happen. Width and height must
-    * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
-    * the alpha values are not useful and 1 meaning they are). Compress can
-    * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
-    * This is only used if the image is not lossily encoded. Quality is used on
-    * lossy compression and should be a value from 0 to 100. The lossy flag
-    * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
-    * image quality loss (but then have a much smaller encoding).
-    *
-    * On success this function returns a pointer to the encoded data that you
-    * can free with free() when no longer needed.
-    *
-    * @see eet_data_image_encode_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Group
-    */
-   EAPI void *eet_data_image_encode(const void *data, int *size_ret, unsigned int w, unsigned int h, int alpha, int compress, int quality, int lossy);
-
-   /**
-    * @defgroup Eet_File_Image_Cipher_Group Image Store and Load using a Cipher
-    *
-    * Most of the @ref Eet_File_Image_Group have alternative versions
-    * that accounts for ciphers to protect their content.
-    *
-    * @see @ref Eet_Cipher_Group
-    *
-    * @ingroup Eet_File_Image_Group
-    */
-
-   /**
-    * Read just the header data for an image and dont decode the pixels using a cipher.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on successfull decode, 0 otherwise
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1 indicating the header was read and
-    * decoded properly, or 0 on failure.
-    *
-    * @see eet_data_image_header_read()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI int eet_data_image_header_read_cipher(Eet_File *ef, const char *name, const char *cipher_key, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Read image data from the named key in the eet file using a cipher.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return The image pixel data decoded
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns a pointer to the image data decoded. The
-    * calling application is responsible for calling free() on the image data
-    * when it is done with it. On failure NULL is returned and the parameter
-    * values may not contain any sensible data.
-    *
-    * @see eet_data_image_read()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI void *eet_data_image_read_cipher(Eet_File *ef, const char *name, const char *cipher_key, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Read image data from the named key in the eet file using a cipher.
-    * @param ef A valid eet file handle opened for reading.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param src_x The starting x coordinate from where to dump the stream.
-    * @param src_y The starting y coordinate from where to dump the stream.
-    * @param d A pointer to the pixel surface.
-    * @param w The expected width in pixels of the pixel surface to decode.
-    * @param h The expected height in pixels of the pixel surface to decode.
-    * @param row_stride The length of a pixels line in the destination surface.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 otherwise.
-    *
-    * This function reads an image from an eet file stored under the named
-    * key in the eet file and return a pointer to the decompressed pixel data.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pile is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1, and 0 on failure. On failure the
-    * parameter values may not contain any sensible data.
-    *
-    * @see eet_data_image_read_to_surface()
-    *
-    * @since 1.0.2
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI int eet_data_image_read_to_surface_cipher(Eet_File *ef, const char *name, const char *cipher_key, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Write image data to the named key in an eet file using a cipher.
-    * @param ef A valid eet file handle opened for writing.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param data A pointer to the image pixel data.
-    * @param w The width of the image in pixels.
-    * @param h The height of the image in pixels.
-    * @param alpha The alpha channel flag.
-    * @param compress The compression amount.
-    * @param quality The quality encoding amount.
-    * @param lossy The lossiness flag.
-    * @return Success if the data was encoded and written or not.
-    *
-    * This function takes image pixel data and encodes it in an eet file
-    * stored under the supplied name key, and returns how many bytes were
-    * actually written to encode the image data.
-    *
-    * The data expected is the same format as returned by eet_data_image_read.
-    * If this is not the case weird things may happen. Width and height must
-    * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
-    * the alpha values are not useful and 1 meaning they are). Compress can
-    * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
-    * This is only used if the image is not lossily encoded. Quality is used on
-    * lossy compression and should be a value from 0 to 100. The lossy flag
-    * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
-    * image quality loss (but then have a much smaller encoding).
-    *
-    * On success this function returns the number of bytes that were required
-    * to encode the image data, or on failure it returns 0.
-    *
-    * @see eet_data_image_write()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI int eet_data_image_write_cipher(Eet_File *ef, const char *name, const char *cipher_key, const void *data, unsigned int w, unsigned int h, int alpha, int compress, int quality, int lossy);
-
-
-   /**
-    * Decode Image data header only to get information using a cipher.
-    * @param data The encoded pixel data.
-    * @param cipher_key The key to use as cipher.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 on failure.
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1 indicating the header was read and
-    * decoded properly, or 0 on failure.
-    *
-    * @see eet_data_image_header_decode()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI int eet_data_image_header_decode_cipher(const void *data, const char *cipher_key, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Decode Image data into pixel data using a cipher.
-    * @param data The encoded pixel data.
-    * @param cipher_key The key to use as cipher.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param w A pointer to the unsigned int to hold the width in pixels.
-    * @param h A pointer to the unsigned int to hold the height in pixels.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return The image pixel data decoded
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (width, height etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns a pointer to the image data decoded. The
-    * calling application is responsible for calling free() on the image data
-    * when it is done with it. On failure NULL is returned and the parameter
-    * values may not contain any sensible data.
-    *
-    * @see eet_data_image_decode()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI void *eet_data_image_decode_cipher(const void *data, const char *cipher_key, int size, unsigned int *w, unsigned int *h, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Decode Image data into pixel data using a cipher.
-    * @param data The encoded pixel data.
-    * @param cipher_key The key to use as cipher.
-    * @param size The size, in bytes, of the encoded pixel data.
-    * @param src_x The starting x coordinate from where to dump the stream.
-    * @param src_y The starting y coordinate from where to dump the stream.
-    * @param d A pointer to the pixel surface.
-    * @param w The expected width in pixels of the pixel surface to decode.
-    * @param h The expected height in pixels of the pixel surface to decode.
-    * @param row_stride The length of a pixels line in the destination surface.
-    * @param alpha A pointer to the int to hold the alpha flag.
-    * @param compress A pointer to the int to hold the compression amount.
-    * @param quality A pointer to the int to hold the quality amount.
-    * @param lossy A pointer to the int to hold the lossiness flag.
-    * @return 1 on success, 0 otherwise.
-    *
-    * This function takes encoded pixel data and decodes it into raw RGBA
-    * pixels on success.
-    *
-    * The other parameters of the image (alpha, compress etc.) are placed into
-    * the values pointed to (they must be supplied). The pixel data is a linear
-    * array of pixels starting from the top-left of the image scanning row by
-    * row from left to right. Each pixel is a 32bit value, with the high byte
-    * being the alpha channel, the next being red, then green, and the low byte
-    * being blue. The width and height are measured in pixels and will be
-    * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
-    * that the alpha channel is not used. 1 denotes that it is significant.
-    * Compress is filled with the compression value/amount the image was
-    * stored with. The quality value is filled with the quality encoding of
-    * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
-    * the image was encoded lossily or not.
-    *
-    * On success the function returns 1, and 0 on failure. On failure the
-    * parameter values may not contain any sensible data.
-    *
-    * @see eet_data_image_decode_to_surface()
-    *
-    * @since 1.0.2
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI int eet_data_image_decode_to_surface_cipher(const void *data, const char *cipher_key, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride, int *alpha, int *compress, int *quality, int *lossy);
-
-   /**
-    * Encode image data for storage or transmission using a cipher.
-    * @param data A pointer to the image pixel data.
-    * @param cipher_key The key to use as cipher.
-    * @param size_ret A pointer to an int to hold the size of the returned data.
-    * @param w The width of the image in pixels.
-    * @param h The height of the image in pixels.
-    * @param alpha The alpha channel flag.
-    * @param compress The compression amount.
-    * @param quality The quality encoding amount.
-    * @param lossy The lossiness flag.
-    * @return The encoded image data.
-    *
-    * This function stakes image pixel data and encodes it with compression and
-    * possible loss of quality (as a trade off for size) for storage or
-    * transmission to another system.
-    *
-    * The data expected is the same format as returned by eet_data_image_read.
-    * If this is not the case weird things may happen. Width and height must
-    * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
-    * the alpha values are not useful and 1 meaning they are). Compress can
-    * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
-    * This is only used if the image is not lossily encoded. Quality is used on
-    * lossy compression and should be a value from 0 to 100. The lossy flag
-    * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
-    * image quality loss (but then have a much smaller encoding).
-    *
-    * On success this function returns a pointer to the encoded data that you
-    * can free with free() when no longer needed.
-    *
-    * @see eet_data_image_encode()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_File_Image_Cipher_Group
-    */
-   EAPI void *eet_data_image_encode_cipher(const void *data, const char *cipher_key, unsigned int w, unsigned int h, int alpha, int compress, int quality, int lossy, int *size_ret);
-
-
-   /**
-    * @defgroup Eet_Cipher_Group Cipher, Identity and Protection Mechanisms
-    *
-    * Eet allows one to protect entries of an #Eet_File
-    * individually. This may be used to ensure data was not tampered or
-    * that third party does not read your data.
-    *
-    * @see @ref Eet_File_Cipher_Group
-    * @see @ref Eet_File_Image_Cipher_Group
-    *
-    * @{
-    */
-
-   /**
-    * @typedef Eet_Key
-    * Opaque handle that defines an identity (also known as key)
-    * in Eet's cipher system.
-    */
-   typedef struct _Eet_Key Eet_Key;
-
-   /**
-    * @}
-    */
-
-
-   /**
-    * Callback used to request if needed the password of a private key.
-    *
-    * @param buffer the buffer where to store the password.
-    * @param size the maximum password size (size of buffer, including '@\0').
-    * @param rwflag if the buffer is also readable or just writable.
-    * @param data currently unused, may contain some context in future.
-    * @return 1 on success and password was set to @p buffer, 0 on failure.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   typedef int (*Eet_Key_Password_Callback)(char *buffer, int size, int rwflag, void *data);
-
-   /**
-    * Create an Eet_Key needed for signing an eet file.
-    *
-    * The certificate should provide the public that match the private key.
-    * No verification is done to ensure that.
-    *
-    * @param certificate_file The file where to find the certificate.
-    * @param private_key_file The file that contains the private key.
-    * @param cb Function to callback if password is required to unlock
-    *        private key.
-    * @return A key handle to use, or @c NULL on failure.
-    *
-    * @see eet_identity_close()
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI Eet_Key* eet_identity_open(const char *certificate_file, const char *private_key_file, Eet_Key_Password_Callback cb);
-
-   /**
-    * Close and release all ressource used by an Eet_Key.  An
-    * reference counter prevent it from being freed until all file
-    * using it are also closed.
-    *
-    * @param key the key handle to close and free resources.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI void eet_identity_close(Eet_Key *key);
-
-   /**
-    * Set a key to sign a file
-    *
-    * @param ef the file to set the identity.
-    * @param key the key handle to set as identity.
-    * @return #EET_ERROR_BAD_OBJECT if @p ef is invalid or
-    *         #EET_ERROR_NONE on success.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI Eet_Error eet_identity_set(Eet_File *ef, Eet_Key *key);
-
-   /**
-    * Display both private and public key of an Eet_Key.
-    *
-    * @param key the handle to print.
-    * @param out where to print.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI void eet_identity_print(Eet_Key *key, FILE *out);
-
-   /**
-    * Get the x509 der certificate associated with an Eet_File. Will return NULL
-    * if the file is not signed.
-    *
-    * @param ef The file handle to query.
-    * @param der_length The length of returned data, may be @c NULL.
-    * @return the x509 certificate or @c NULL on error.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI const void *eet_identity_x509(Eet_File *ef, int *der_length);
-
-   /**
-    * Get the raw signature associated with an Eet_File. Will return NULL
-    * if the file is not signed.
-    *
-    * @param ef The file handle to query.
-    * @param signature_length The length of returned data, may be @c NULL.
-    * @return the raw signature or @c NULL on error.
-    *
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI const void *eet_identity_signature(Eet_File *ef, int *signature_length);
-
-   /**
-    * Get the SHA1 associated with a file. Could be the one used to
-    * sign the data or if the data where not signed, it will be the
-    * SHA1 of the file.
-    *
-    * @param ef The file handle to query.
-    * @param sha1_length The length of returned data, may be @c NULL.
-    * @return the associated SHA1 or @c NULL on error.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI const void *eet_identity_sha1(Eet_File *ef, int *sha1_length);
-
-   /**
-    * Display the x509 der certificate to out.
-    *
-    * @param certificate the x509 certificate to print
-    * @param der_length The length the certificate.
-    * @param out where to print.
-    *
-    * @since 1.2.0
-    * @ingroup Eet_Cipher_Group
-    */
-   EAPI void eet_identity_certificate_print(const unsigned char *certificate, int der_length, FILE *out);
-
-
-   /**
-    * @defgroup Eet_Data_Group Eet Data Serialization
-    *
-    * Convenience functions to serialize and parse complex data
-    * structures to binary blobs.
-    *
-    * While Eet core just handles binary blobs, it is often required
-    * to save some structured data of different types, such as
-    * strings, integers, lists, hashes and so on.
-    *
-    * Eet can serialize and then parse data types given some
-    * construction instructions. These are defined in two levels:
-    *
-    * - #Eet_Data_Descriptor_Class to tell generic memory handling,
-    *   such as the size of the type, how to allocate memory, strings,
-    *   lists, hashes and so on.
-    *
-    * - #Eet_Data_Descriptor to tell inside such type, the members and
-    *   their offsets inside the memory blob, their types and
-    *   names. These members can be simple types or other
-    *   #Eet_Data_Descriptor, allowing hierarchical types to be
-    *   defined.
-    *
-    * Given that C provides no introspection, this process can be
-    * quite cumbersome, so we provide lots of macros and convenience
-    * functions to aid creating the types.
-    *
-    * Example:
-    *
-    * @code
-    * #include <Eet.h>
-    * #include <Evas.h>
-    *
-    * typedef struct _blah2
-    * {
-    *    char *string;
-    * } Blah2;
-    *
-    * typedef struct _blah3
-    * {
-    *    char *string;
-    * } Blah3;
-    *
-    * typedef struct _blah
-    * {
-    *    char character;
-    *    short sixteen;
-    *    int integer;
-    *    long long lots;
-    *    float floating;
-    *    double floating_lots;
-    *    char *string;
-    *    Blah2 *blah2;
-    *    Eina_List *blah3;
-    * } Blah;
-    *
-    * int
-    * main(int argc, char **argv)
-    * {
-    *    Blah blah;
-    *    Blah2 blah2;
-    *    Blah3 blah3;
-    *    Eet_Data_Descriptor *edd, *edd2, *edd3;
-    *    Eet_Data_Descriptor_Class eddc, eddc2, eddc3;
-    *    void *data;
-    *    int size;
-    *    FILE *f;
-    *    Blah *blah_in;
-    *
-    *    eet_init();
-    *
-    *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc3, Blah3);
-    *    edd3 = eet_data_descriptor_stream_new(&eddc3);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd3, Blah3, "string3", string, EET_T_STRING);
-    *
-    *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc2, Blah2);
-    *    edd2 = eet_data_descriptor_stream_new(&eddc2);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd2, Blah2, "string2", string, EET_T_STRING);
-    *
-    *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Blah);
-    *    edd = eet_data_descriptor_stream_new(&eddc);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "character", character, EET_T_CHAR);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "sixteen", sixteen, EET_T_SHORT);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "integer", integer, EET_T_INT);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "lots", lots, EET_T_LONG_LONG);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating", floating, EET_T_FLOAT);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating_lots", floating_lots, EET_T_DOUBLE);
-    *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "string", string, EET_T_STRING);
-    *    EET_DATA_DESCRIPTOR_ADD_SUB(edd, Blah, "blah2", blah2, edd2);
-    *    EET_DATA_DESCRIPTOR_ADD_LIST(edd, Blah, "blah3", blah3, edd3);
-    *
-    *    blah3.string = "PANTS";
-    *
-    *    blah2.string = "subtype string here!";
-    *
-    *    blah.character = '7';
-    *    blah.sixteen = 0x7777;
-    *    blah.integer = 0xc0def00d;
-    *    blah.lots = 0xdeadbeef31337777;
-    *    blah.floating = 3.141592654;
-    *    blah.floating_lots = 0.777777777777777;
-    *    blah.string = "bite me like a turnip";
-    *    blah.blah2 = &blah2;
-    *    blah.blah3 = eina_list_append(NULL, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
-    *
-    *    data = eet_data_descriptor_encode(edd, &blah, &size);
-    *    printf("-----DECODING\n");
-    *    blah_in = eet_data_descriptor_decode(edd, data, size);
-    *
-    *    printf("-----DECODED!\n");
-    *    printf("%c\n", blah_in->character);
-    *    printf("%x\n", (int)blah_in->sixteen);
-    *    printf("%x\n", blah_in->integer);
-    *    printf("%lx\n", blah_in->lots);
-    *    printf("%f\n", (double)blah_in->floating);
-    *    printf("%f\n", (double)blah_in->floating_lots);
-    *    printf("%s\n", blah_in->string);
-    *    printf("%p\n", blah_in->blah2);
-    *    printf("  %s\n", blah_in->blah2->string);
-    *      {
-    *         Eina_List *l;
-    *         Blah3 *blah3_in;
-    *
-    *         EINA_LIST_FOREACH(blah_in->blah3, l, blah3_in)
-    *           {
-    *              printf("%p\n", blah3_in);
-    *              printf("  %s\n", blah3_in->string);
-    *           }
-    *      }
-    *    eet_data_descriptor_free(edd);
-    *    eet_data_descriptor_free(edd2);
-    *    eet_data_descriptor_free(edd3);
-    *
-    *    eet_shutdown();
-    *
-    *   return 0;
-    * }
-    * @endcode
-    *
-    * @{
-    */
-#define EET_T_UNKNOW            0 /**< Unknown data encoding type */
-#define EET_T_CHAR              1 /**< Data type: char */
-#define EET_T_SHORT             2 /**< Data type: short */
-#define EET_T_INT               3 /**< Data type: int */
-#define EET_T_LONG_LONG         4 /**< Data type: long long */
-#define EET_T_FLOAT             5 /**< Data type: float */
-#define EET_T_DOUBLE            6 /**< Data type: double */
-#define EET_T_UCHAR             7 /**< Data type: unsigned char */
-#define EET_T_USHORT            8 /**< Data type: unsigned short */
-#define EET_T_UINT              9 /**< Data type: unsigned int */
-#define EET_T_ULONG_LONG        10 /**< Data type: unsigned long long */
-#define EET_T_STRING            11 /**< Data type: char * */
-#define EET_T_INLINED_STRING    12 /**< Data type: char * (but compressed inside the resulting eet) */
-#define EET_T_NULL              13 /**< Data type: (void *) (only use it if you know why) */
-#define EET_T_F32P32           14 /**< Data type: fixed point 32.32 */
-#define EET_T_F16P16           15 /**< Data type: fixed point 16.16 */
-#define EET_T_F8P24            16 /**< Data type: fixed point 8.24 */
-#define EET_T_LAST              18 /**< Last data type */
-
-#define EET_G_UNKNOWN    100 /**< Unknown group data encoding type */
-#define EET_G_ARRAY      101 /**< Fixed size array group type */
-#define EET_G_VAR_ARRAY  102 /**< Variable size array group type */
-#define EET_G_LIST       103 /**< Linked list group type */
-#define EET_G_HASH       104 /**< Hash table group type */
-#define EET_G_UNION      105 /**< Union group type */
-#define EET_G_VARIANT    106 /**< Selectable subtype group */
-#define EET_G_LAST       107 /**< Last group type */
-
-#define EET_I_LIMIT      128 /**< Other type exist but are reserved for internal purpose. */
-
-   /**
-    * @typedef Eet_Data_Descriptor
-    *
-    * Opaque handle that have information on a type members.
-    *
-    * The members are added by means of
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB(),
-    * EET_DATA_DESCRIPTOR_ADD_LIST(), EET_DATA_DESCRIPTOR_ADD_HASH()
-    * or eet_data_descriptor_element_add().
-    *
-    * @see eet_data_descriptor_stream_new()
-    * @see eet_data_descriptor_file_new()
-    * @see eet_data_descriptor_free()
-    */
-   typedef struct _Eet_Data_Descriptor       Eet_Data_Descriptor;
-
-   /**
-    * @def EET_DATA_DESCRIPTOR_CLASS_VERSION
-    * The version of #Eet_Data_Descriptor_Class at the time of the
-    * distribution of the sources. One should define this to its
-    * version member so it is compatible with abi changes, or at least
-    * will not crash with them.
-    */
-#define EET_DATA_DESCRIPTOR_CLASS_VERSION 3
-
-  /**
-   * @typedef Eet_Data_Descriptor_Class
-   *
-   * Instructs Eet about memory management for different needs under
-   * serialization and parse process.
-   */
-   typedef struct _Eet_Data_Descriptor_Class Eet_Data_Descriptor_Class;
-
-   /**
-    * @struct _Eet_Data_Descriptor_Class
-    *
-    * Instructs Eet about memory management for different needs under
-    * serialization and parse process.
-    *
-    * If using Eina data types, it is advised to use the helpers
-    * EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET() and
-    * EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET().
-    */
-   struct _Eet_Data_Descriptor_Class
-     {
-       int         version; /**< ABI version as #EET_DATA_DESCRIPTOR_CLASS_VERSION */
-       const char *name; /**< Name of data type to be serialized */
-       int         size; /**< Size in bytes of data type to be serialized */
-       struct {
-          void   *(*mem_alloc) (size_t size); /**< how to allocate memory (usually malloc()) */
-          void    (*mem_free) (void *mem); /**< how to free memory (usually free()) */
-           char   *(*str_alloc) (const char *str); /**< how to allocate a string */
-          void    (*str_free) (const char *str); /**< how to free a string */
-          void   *(*list_next) (void *l); /**< how to iterate to the next element of a list. Receives and should return the list node. */
-          void   *(*list_append) (void *l, void *d); /**< how to append data @p d to list which head node is @p l */
-          void   *(*list_data) (void *l); /**< retrieves the data from node @p l */
-          void   *(*list_free) (void *l); /**< free all the nodes from the list which head node is @p l */
-          void    (*hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt); /**< iterates over all elements in the hash @p h in no specific order */
-          void   *(*hash_add) (void *h, const char *k, void *d); /**< add a new data @p d as key @p k in hash @p h */
-          void    (*hash_free) (void *h); /**< free all entries from the hash @p h */
-           char   *(*str_direct_alloc) (const char *str); /**< how to allocate a string directly from file backed/mmaped region pointed by @p str */
-           void    (*str_direct_free) (const char *str); /**< how to free a string returned by str_direct_alloc */
-
-          const char *(*type_get) (const void *data, Eina_Bool *unknow); /**< convert any kind of data type to a name that define an Eet_Data_Element. */
-          Eina_Bool  (*type_set) (const char *type, void *data, Eina_Bool unknow); /**< set the type at a particular adress */
-       } func;
-     };
-
-   /**
-    * @}
-    */
-
-   /**
-    * Create a new empty data structure descriptor.
-    * @param name The string name of this data structure (most be a
-    *        global constant and never change).
-    * @param size The size of the struct (in bytes).
-    * @param func_list_next The function to get the next list node.
-    * @param func_list_append The function to append a member to a list.
-    * @param func_list_data The function to get the data from a list node.
-    * @param func_list_free The function to free an entire linked list.
-    * @param func_hash_foreach The function to iterate through all
-    *        hash table entries.
-    * @param func_hash_add The function to add a member to a hash table.
-    * @param func_hash_free The function to free an entire hash table.
-    * @return A new empty data descriptor.
-    *
-    * This function creates a new data descriptore and returns a handle to the
-    * new data descriptor. On creation it will be empty, containing no contents
-    * describing anything other than the shell of the data structure.
-    *
-    * You add structure members to the data descriptor using the macros
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
-    * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
-    * adding to the description.
-    *
-    * Once you have described all the members of a struct you want loaded, or
-    * saved eet can load and save those members for you, encode them into
-    * endian-independant serialised data chunks for transmission across a
-    * a network or more.
-    *
-    * The function pointers to the list and hash table functions are only
-    * needed if you use those data types, else you can pass NULL instead.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    *
-    * @deprecated use eet_data_descriptor_stream_new() or
-    *             eet_data_descriptor_file_new()
-    */
-   EINA_DEPRECATED EAPI Eet_Data_Descriptor *eet_data_descriptor_new(const char *name, int size, void *(*func_list_next) (void *l), void *(*func_list_append) (void *l, void *d), void *(*func_list_data) (void *l), void *(*func_list_free) (void *l), void  (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), void *(*func_hash_add) (void *h, const char *k, void *d), void  (*func_hash_free) (void *h));
-   /*
-    * FIXME:
-    *
-    * moving to this api from the old above. this will break things when the
-    * move happens - but be warned
-    */
-   EINA_DEPRECATED EAPI Eet_Data_Descriptor *eet_data_descriptor2_new(const Eet_Data_Descriptor_Class *eddc);
-   EINA_DEPRECATED EAPI Eet_Data_Descriptor *eet_data_descriptor3_new(const Eet_Data_Descriptor_Class *eddc);
-
-   /**
-    * This function creates a new data descriptore and returns a handle to the
-    * new data descriptor. On creation it will be empty, containing no contents
-    * describing anything other than the shell of the data structure.
-    * @param eddc The data descriptor to free.
-    *
-    * You add structure members to the data descriptor using the macros
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
-    * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
-    * adding to the description.
-    *
-    * Once you have described all the members of a struct you want loaded, or
-    * saved eet can load and save those members for you, encode them into
-    * endian-independant serialised data chunks for transmission across a
-    * a network or more.
-    *
-    * This function specially ignore str_direct_alloc and str_direct_free. It
-    * is usefull when the eet_data you are reading don't have a dictionnary
-    * like network stream or ipc. It also mean that all string will be allocated
-    * and duplicated in memory.
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-   EAPI Eet_Data_Descriptor *eet_data_descriptor_stream_new(const Eet_Data_Descriptor_Class *eddc);
-
-   /**
-    * This function creates a new data descriptore and returns a handle to the
-    * new data descriptor. On creation it will be empty, containing no contents
-    * describing anything other than the shell of the data structure.
-    * @param eddc The data descriptor to free.
-    *
-    * You add structure members to the data descriptor using the macros
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
-    * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
-    * adding to the description.
-    *
-    * Once you have described all the members of a struct you want loaded, or
-    * saved eet can load and save those members for you, encode them into
-    * endian-independant serialised data chunks for transmission across a
-    * a network or more.
-    *
-    * This function use str_direct_alloc and str_direct_free. It is
-    * usefull when the eet_data you are reading come from a file and
-    * have a dictionnary. This will reduce memory use, improve the
-    * possibility for the OS to page this string out. But be carrefull
-    * all EET_T_STRING are pointer to a mmapped area and it will point
-    * to nowhere if you close the file. So as long as you use this
-    * strings, you need to have the Eet_File open.
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-   EAPI Eet_Data_Descriptor *eet_data_descriptor_file_new(const Eet_Data_Descriptor_Class *eddc);
-
-   /**
-    * This function is an helper that set all the parameter of an
-    * Eet_Data_Descriptor_Class correctly when you use Eina data type
-    * with a stream.
-    * @param eddc The Eet_Data_Descriptor_Class you want to set.
-    * @param name The name of the structure described by this class.
-    * @param size The size of the structure described by this class.
-    * @return EINA_TRUE if the structure was correctly set (The only
-    *         reason that could make it fail is if you did give wrong
-    *         parameter).
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-   EAPI Eina_Bool eet_eina_stream_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc, const char *name, int size);
-
-   /**
-    * This macro is an helper that set all the parameter of an
-    * Eet_Data_Descriptor_Class correctly when you use Eina data type
-    * with stream.
-    * @param Clas The Eet_Data_Descriptor_Class you want to set.
-    * @param Type The type of the structure described by this class.
-    * @return EINA_TRUE if the structure was correctly set (The only
-    *         reason that could make it fail is if you did give wrong
-    *         parameter).
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-#define EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(Clas, Type) (eet_eina_stream_data_descriptor_class_set(Clas, #Type , sizeof (Type)))
-
-   /**
-    * This function is an helper that set all the parameter of an
-    * Eet_Data_Descriptor_Class correctly when you use Eina data type
-    * with a file.
-    * @param eddc The Eet_Data_Descriptor_Class you want to set.
-    * @param name The name of the structure described by this class.
-    * @param size The size of the structure described by this class.
-    * @return EINA_TRUE if the structure was correctly set (The only
-    *         reason that could make it fail is if you did give wrong
-    *         parameter).
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-   EAPI Eina_Bool eet_eina_file_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc, const char *name, int size);
-
-   /**
-    * This macro is an helper that set all the parameter of an
-    * Eet_Data_Descriptor_Class correctly when you use Eina data type
-    * with file.
-    * @param Clas The Eet_Data_Descriptor_Class you want to set.
-    * @param Type The type of the structure described by this class.
-    * @return EINA_TRUE if the structure was correctly set (The only
-    *         reason that could make it fail is if you did give wrong
-    *         parameter).
-    *
-    * @since 1.2.3
-    * @ingroup Eet_Data_Group
-    */
-#define EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(Clas, Type) (eet_eina_file_data_descriptor_class_set(Clas, #Type , sizeof (Type)))
-
-   /**
-    * This function frees a data descriptor when it is not needed anymore.
-    * @param edd The data descriptor to free.
-    *
-    * This function takes a data descriptor handle as a parameter and frees all
-    * data allocated for the data descriptor and the handle itself. After this
-    * call the descriptor is no longer valid.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void eet_data_descriptor_free(Eet_Data_Descriptor *edd);
-
-   /**
-    * This function is an internal used by macros.
-    *
-    * This function is used by macros EET_DATA_DESCRIPTOR_ADD_BASIC(),
-    * EET_DATA_DESCRIPTOR_ADD_SUB() and EET_DATA_DESCRIPTOR_ADD_LIST(). It is
-    * complex to use by hand and should be left to be used by the macros, and
-    * thus is not documented.
-    *
-    * @param edd The data descriptor handle to add element (member).
-    * @param name The name of element to be serialized.
-    * @param type The type of element to be serialized, like
-    *        #EET_T_INT. If #EET_T_UNKNOW, then it is considered to be a
-    *        group, list or hash.
-    * @param group_type If element type is #EET_T_UNKNOW, then the @p
-    *        group_type will speficy if it is a list (#EET_G_LIST),
-    *        array (#EET_G_ARRAY) and so on. If #EET_G_UNKNOWN, then
-    *        the member is a subtype (pointer to another type defined by
-    *        another #Eet_Data_Descriptor).
-    * @param offset byte offset inside the source memory to be serialized.
-    * @param count number of elements (if #EET_G_ARRAY or #EET_G_VAR_ARRAY).
-    * @param counter_name variable that defines the name of number of elements.
-    * @param subtype If contains a subtype, then its data descriptor.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void eet_data_descriptor_element_add(Eet_Data_Descriptor *edd, const char *name, int type, int group_type, int offset, /* int count_offset,  */int count, const char *counter_name, Eet_Data_Descriptor *subtype);
-
-   /**
-    * Read a data structure from an eet file and decodes it.
-    * @param ef The eet file handle to read from.
-    * @param edd The data descriptor handle to use when decoding.
-    * @param name The key the data is stored under in the eet file.
-    * @return A pointer to the decoded data structure.
-    *
-    * This function decodes a data structure stored in an eet file, returning
-    * a pointer to it if it decoded successfully, or NULL on failure. This
-    * can save a programmer dozens of hours of work in writing configuration
-    * file parsing and writing code, as eet does all that work for the program
-    * and presents a program-friendly data structure, just as the programmer
-    * likes. Eet can handle members being added or deleted from the data in
-    * storage and safely zero-fills unfilled members if they were not found
-    * in the data. It checks sizes and headers whenever it reads data, allowing
-    * the programmer to not worry about corrupt data.
-    *
-    * Once a data structure has been described by the programmer with the
-    * fields they wish to save or load, storing or retrieving a data structure
-    * from an eet file, or from a chunk of memory is as simple as a single
-    * function call.
-    *
-    * @see eet_data_read_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void *eet_data_read(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name);
-
-   /**
-    * Write a data structure from memory and store in an eet file.
-    * @param ef The eet file handle to write to.
-    * @param edd The data descriptor to use when encoding.
-    * @param name The key to store the data under in the eet file.
-    * @param data A pointer to the data structure to ssave and encode.
-    * @param compress Compression flags for storage.
-    * @return bytes written on successful write, 0 on failure.
-    *
-    * This function is the reverse of eet_data_read(), saving a data structure
-    * to an eet file.
-    *
-    * @see eet_data_write_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI int eet_data_write(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const void *data, int compress);
-
-   /**
-    * Dump an eet encoded data structure into ascii text
-    * @param data_in The pointer to the data to decode into a struct.
-    * @param size_in The size of the data pointed to in bytes.
-    * @param dumpfunc The function to call passed a string when new
-    *        data is converted to text
-    * @param dumpdata The data to pass to the @p dumpfunc callback.
-    * @return 1 on success, 0 on failure
-    *
-    * This function will take a chunk of data encoded by
-    * eet_data_descriptor_encode() and convert it into human readable
-    * ascii text.  It does this by calling the @p dumpfunc callback
-    * for all new text that is generated. This callback should append
-    * to any existing text buffer and will be passed the pointer @p
-    * dumpdata as a parameter as well as a string with new text to be
-    * appended.
-    *
-    * Example:
-    *
-    * @code
-    * void output(void *data, const char *string)
-    * {
-    *   printf("%s", string);
-    * }
-    *
-    * void dump(const char *file)
-    * {
-    *   FILE *f;
-    *   int len;
-    *   void *data;
-    *
-    *   f = fopen(file, "r");
-    *   fseek(f, 0, SEEK_END);
-    *   len = ftell(f);
-    *   rewind(f);
-    *   data = malloc(len);
-    *   fread(data, len, 1, f);
-    *   fclose(f);
-    *   eet_data_text_dump(data, len, output, NULL);
-    * }
-    * @endcode
-    *
-    * @see eet_data_text_dump_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI int eet_data_text_dump(const void *data_in, int size_in, void (*dumpfunc) (void *data, const char *str), void *dumpdata);
-
-   /**
-    * Take an ascii encoding from eet_data_text_dump() and re-encode in binary.
-    * @param text The pointer to the string data to parse and encode.
-    * @param textlen The size of the string in bytes (not including 0
-    *        byte terminator).
-    * @param size_ret This gets filled in with the encoded data blob
-    *        size in bytes.
-    * @return The encoded data on success, NULL on failure.
-    *
-    * This function will parse the string pointed to by @p text and return
-    * an encoded data lump the same way eet_data_descriptor_encode() takes an
-    * in-memory data struct and encodes into a binary blob. @p text is a normal
-    * C string.
-    *
-    * @see eet_data_text_undump_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void *eet_data_text_undump(const char *text, int textlen, int *size_ret);
-
-   /**
-    * Dump an eet encoded data structure from an eet file into ascii text
-    * @param ef A valid eet file handle.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param dumpfunc The function to call passed a string when new
-    *        data is converted to text
-    * @param dumpdata The data to pass to the @p dumpfunc callback.
-    * @return 1 on success, 0 on failure
-    *
-    * This function will take an open and valid eet file from
-    * eet_open() request the data encoded by
-    * eet_data_descriptor_encode() corresponding to the key @p name
-    * and convert it into human readable ascii text. It does this by
-    * calling the @p dumpfunc callback for all new text that is
-    * generated. This callback should append to any existing text
-    * buffer and will be passed the pointer @p dumpdata as a parameter
-    * as well as a string with new text to be appended.
-    *
-    * @see eet_data_dump_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI int eet_data_dump(Eet_File *ef, const char *name, void (*dumpfunc) (void *data, const char *str), void *dumpdata);
-
-   /**
-    * Take an ascii encoding from eet_data_dump() and re-encode in binary.
-    * @param ef A valid eet file handle.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param text The pointer to the string data to parse and encode.
-    * @param textlen The size of the string in bytes (not including 0
-    *        byte terminator).
-    * @param compress Compression flags (1 == compress, 0 = don't compress).
-    * @return 1 on success, 0 on failure
-    *
-    * This function will parse the string pointed to by @p text,
-    * encode it the same way eet_data_descriptor_encode() takes an
-    * in-memory data struct and encodes into a binary blob.
-    *
-    * The data (optionally compressed) will be in ram, pending a flush to
-    * disk (it will stay in ram till the eet file handle is closed though).
-    *
-    * @see eet_data_undump_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI int eet_data_undump(Eet_File *ef, const char *name, const char *text, int textlen, int compress);
-
-   /**
-    * Decode a data structure from an arbitary location in memory.
-    * @param edd The data  descriptor to use when decoding.
-    * @param data_in The pointer to the data to decode into a struct.
-    * @param size_in The size of the data pointed to in bytes.
-    * @return NULL on failure, or a valid decoded struct pointer on success.
-    *
-    * This function will decode a data structure that has been encoded using
-    * eet_data_descriptor_encode(), and return a data structure with all its
-    * elements filled out, if successful, or NULL on failure.
-    *
-    * The data to be decoded is stored at the memory pointed to by @p data_in,
-    * and is described by the descriptor pointed to by @p edd. The data size is
-    * passed in as the value to @p size_in, ande must be greater than 0 to
-    * succeed.
-    *
-    * This function is useful for decoding data structures delivered to the
-    * application by means other than an eet file, such as an IPC or socket
-    * connection, raw files, shared memory etc.
-    *
-    * Please see eet_data_read() for more information.
-    *
-    * @see eet_data_descriptor_decode_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void *eet_data_descriptor_decode(Eet_Data_Descriptor *edd, const void *data_in, int size_in);
-
-   /**
-    * Encode a dsata struct to memory and return that encoded data.
-    * @param edd The data  descriptor to use when encoding.
-    * @param data_in The pointer to the struct to encode into data.
-    * @param size_ret pointer to the an int to be filled with the decoded size.
-    * @return NULL on failure, or a valid encoded data chunk on success.
-    *
-    * This function takes a data structutre in memory and encodes it into a
-    * serialised chunk of data that can be decoded again by
-    * eet_data_descriptor_decode(). This is useful for being able to transmit
-    * data structures across sockets, pipes, IPC or shared file mechanisms,
-    * without having to worry about memory space, machine type, endianess etc.
-    *
-    * The parameter @p edd must point to a valid data descriptor, and
-    * @p data_in must point to the right data structure to encode. If not, the
-    * encoding may fail.
-    *
-    * On success a non NULL valid pointer is returned and what @p size_ret
-    * points to is set to the size of this decoded data, in bytes. When the
-    * encoded data is no longer needed, call free() on it. On failure NULL is
-    * returned and what @p size_ret points to is set to 0.
-    *
-    * Please see eet_data_write() for more information.
-    *
-    * @see eet_data_descriptor_encode_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
-   EAPI void *eet_data_descriptor_encode(Eet_Data_Descriptor *edd, const void *data_in, int *size_ret);
-
-   /**
-    * Add a basic data element to a data descriptor.
-    * @param edd The data descriptor to add the type to.
-    * @param struct_type The type of the struct.
-    * @param name The string name to use to encode/decode this member
-    *        (must be a constant global and never change).
-    * @param member The struct member itself to be encoded.
-    * @param type The type of the member to encode.
-    *
-    * This macro is a convenience macro provided to add a member to
-    * the data descriptor @p edd. The type of the structure is
-    * provided as the @p struct_type parameter (for example: struct
-    * my_struct). The @p name parameter defines a string that will be
-    * used to uniquely name that member of the struct (it is suggested
-    * to use the struct member itself).  The @p member parameter is
-    * the actual struct member itself (for eet_dictionary_string_check
-    * example: values), and @p type is the basic data type of the
-    * member which must be one of: EET_T_CHAR, EET_T_SHORT, EET_T_INT,
-    * EET_T_LONG_LONG, EET_T_FLOAT, EET_T_DOUBLE, EET_T_UCHAR,
-    * EET_T_USHORT, EET_T_UINT, EET_T_ULONG_LONG or EET_T_STRING.
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Group
-    */
+/**
+ * Read image data from the named key in the eet file using a cipher.
+ * @param ef A valid eet file handle opened for reading.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param src_x The starting x coordinate from where to dump the stream.
+ * @param src_y The starting y coordinate from where to dump the stream.
+ * @param d A pointer to the pixel surface.
+ * @param w The expected width in pixels of the pixel surface to decode.
+ * @param h The expected height in pixels of the pixel surface to decode.
+ * @param row_stride The length of a pixels line in the destination surface.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 otherwise.
+ *
+ * This function reads an image from an eet file stored under the named
+ * key in the eet file and return a pointer to the decompressed pixel data.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pile is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1, and 0 on failure. On failure the
+ * parameter values may not contain any sensible data.
+ *
+ * @see eet_data_image_read_to_surface()
+ *
+ * @since 1.0.2
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI int
+eet_data_image_read_to_surface_cipher(Eet_File     *ef,
+                                      const char   *name,
+                                      const char   *cipher_key,
+                                      unsigned int  src_x,
+                                      unsigned int  src_y,
+                                      unsigned int *d,
+                                      unsigned int  w,
+                                      unsigned int  h,
+                                      unsigned int  row_stride,
+                                      int          *alpha,
+                                      int          *compress,
+                                      int          *quality,
+                                      int          *lossy);
+
+/**
+ * Write image data to the named key in an eet file using a cipher.
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param data A pointer to the image pixel data.
+ * @param w The width of the image in pixels.
+ * @param h The height of the image in pixels.
+ * @param alpha The alpha channel flag.
+ * @param compress The compression amount.
+ * @param quality The quality encoding amount.
+ * @param lossy The lossiness flag.
+ * @return Success if the data was encoded and written or not.
+ *
+ * This function takes image pixel data and encodes it in an eet file
+ * stored under the supplied name key, and returns how many bytes were
+ * actually written to encode the image data.
+ *
+ * The data expected is the same format as returned by eet_data_image_read.
+ * If this is not the case weird things may happen. Width and height must
+ * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
+ * the alpha values are not useful and 1 meaning they are). Compress can
+ * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
+ * This is only used if the image is not lossily encoded. Quality is used on
+ * lossy compression and should be a value from 0 to 100. The lossy flag
+ * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
+ * image quality loss (but then have a much smaller encoding).
+ *
+ * On success this function returns the number of bytes that were required
+ * to encode the image data, or on failure it returns 0.
+ *
+ * @see eet_data_image_write()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI int
+eet_data_image_write_cipher(Eet_File    *ef,
+                            const char  *name,
+                            const char  *cipher_key,
+                            const void  *data,
+                            unsigned int w,
+                            unsigned int h,
+                            int          alpha,
+                            int          compress,
+                            int          quality,
+                            int          lossy);
+
+/**
+ * Decode Image data header only to get information using a cipher.
+ * @param data The encoded pixel data.
+ * @param cipher_key The key to use as cipher.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 on failure.
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1 indicating the header was read and
+ * decoded properly, or 0 on failure.
+ *
+ * @see eet_data_image_header_decode()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI int
+eet_data_image_header_decode_cipher(const void   *data,
+                                    const char   *cipher_key,
+                                    int           size,
+                                    unsigned int *w,
+                                    unsigned int *h,
+                                    int          *alpha,
+                                    int          *compress,
+                                    int          *quality,
+                                    int          *lossy);
+
+/**
+ * Decode Image data into pixel data using a cipher.
+ * @param data The encoded pixel data.
+ * @param cipher_key The key to use as cipher.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param w A pointer to the unsigned int to hold the width in pixels.
+ * @param h A pointer to the unsigned int to hold the height in pixels.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return The image pixel data decoded
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (width, height etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns a pointer to the image data decoded. The
+ * calling application is responsible for calling free() on the image data
+ * when it is done with it. On failure NULL is returned and the parameter
+ * values may not contain any sensible data.
+ *
+ * @see eet_data_image_decode()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI void *
+eet_data_image_decode_cipher(const void   *data,
+                             const char   *cipher_key,
+                             int           size,
+                             unsigned int *w,
+                             unsigned int *h,
+                             int          *alpha,
+                             int          *compress,
+                             int          *quality,
+                             int          *lossy);
+
+/**
+ * Decode Image data into pixel data using a cipher.
+ * @param data The encoded pixel data.
+ * @param cipher_key The key to use as cipher.
+ * @param size The size, in bytes, of the encoded pixel data.
+ * @param src_x The starting x coordinate from where to dump the stream.
+ * @param src_y The starting y coordinate from where to dump the stream.
+ * @param d A pointer to the pixel surface.
+ * @param w The expected width in pixels of the pixel surface to decode.
+ * @param h The expected height in pixels of the pixel surface to decode.
+ * @param row_stride The length of a pixels line in the destination surface.
+ * @param alpha A pointer to the int to hold the alpha flag.
+ * @param compress A pointer to the int to hold the compression amount.
+ * @param quality A pointer to the int to hold the quality amount.
+ * @param lossy A pointer to the int to hold the lossiness flag.
+ * @return 1 on success, 0 otherwise.
+ *
+ * This function takes encoded pixel data and decodes it into raw RGBA
+ * pixels on success.
+ *
+ * The other parameters of the image (alpha, compress etc.) are placed into
+ * the values pointed to (they must be supplied). The pixel data is a linear
+ * array of pixels starting from the top-left of the image scanning row by
+ * row from left to right. Each pixel is a 32bit value, with the high byte
+ * being the alpha channel, the next being red, then green, and the low byte
+ * being blue. The width and height are measured in pixels and will be
+ * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes
+ * that the alpha channel is not used. 1 denotes that it is significant.
+ * Compress is filled with the compression value/amount the image was
+ * stored with. The quality value is filled with the quality encoding of
+ * the image file (0 - 100). The lossy flags is either 0 or 1 as to if
+ * the image was encoded lossily or not.
+ *
+ * On success the function returns 1, and 0 on failure. On failure the
+ * parameter values may not contain any sensible data.
+ *
+ * @see eet_data_image_decode_to_surface()
+ *
+ * @since 1.0.2
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI int
+eet_data_image_decode_to_surface_cipher(const void   *data,
+                                        const char   *cipher_key,
+                                        int           size,
+                                        unsigned int  src_x,
+                                        unsigned int  src_y,
+                                        unsigned int *d,
+                                        unsigned int  w,
+                                        unsigned int  h,
+                                        unsigned int  row_stride,
+                                        int          *alpha,
+                                        int          *compress,
+                                        int          *quality,
+                                        int          *lossy);
+
+/**
+ * Encode image data for storage or transmission using a cipher.
+ * @param data A pointer to the image pixel data.
+ * @param cipher_key The key to use as cipher.
+ * @param size_ret A pointer to an int to hold the size of the returned data.
+ * @param w The width of the image in pixels.
+ * @param h The height of the image in pixels.
+ * @param alpha The alpha channel flag.
+ * @param compress The compression amount.
+ * @param quality The quality encoding amount.
+ * @param lossy The lossiness flag.
+ * @return The encoded image data.
+ *
+ * This function stakes image pixel data and encodes it with compression and
+ * possible loss of quality (as a trade off for size) for storage or
+ * transmission to another system.
+ *
+ * The data expected is the same format as returned by eet_data_image_read.
+ * If this is not the case weird things may happen. Width and height must
+ * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning
+ * the alpha values are not useful and 1 meaning they are). Compress can
+ * be from 0 to 9 (0 meaning no compression, 9 meaning full compression).
+ * This is only used if the image is not lossily encoded. Quality is used on
+ * lossy compression and should be a value from 0 to 100. The lossy flag
+ * can be 0 or 1. 0 means encode losslessly and 1 means to encode with
+ * image quality loss (but then have a much smaller encoding).
+ *
+ * On success this function returns a pointer to the encoded data that you
+ * can free with free() when no longer needed.
+ *
+ * @see eet_data_image_encode()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_File_Image_Cipher_Group
+ */
+EAPI void *
+eet_data_image_encode_cipher(const void   *data,
+                             const char   *cipher_key,
+                             unsigned int  w,
+                             unsigned int  h,
+                             int           alpha,
+                             int           compress,
+                             int           quality,
+                             int           lossy,
+                             int          *size_ret);
+
+/**
+ * @defgroup Eet_Cipher_Group Cipher, Identity and Protection Mechanisms
+ *
+ * Eet allows one to protect entries of an #Eet_File
+ * individually. This may be used to ensure data was not tampered or
+ * that third party does not read your data.
+ *
+ * @see @ref Eet_File_Cipher_Group
+ * @see @ref Eet_File_Image_Cipher_Group
+ *
+ * @{
+ */
+
+/**
+ * @typedef Eet_Key
+ * Opaque handle that defines an identity (also known as key)
+ * in Eet's cipher system.
+ */
+typedef struct _Eet_Key   Eet_Key;
+
+/**
+ * @}
+ */
+
+/**
+ * Callback used to request if needed the password of a private key.
+ *
+ * @param buffer the buffer where to store the password.
+ * @param size the maximum password size (size of buffer, including '@\0').
+ * @param rwflag if the buffer is also readable or just writable.
+ * @param data currently unused, may contain some context in future.
+ * @return 1 on success and password was set to @p buffer, 0 on failure.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+typedef int (*Eet_Key_Password_Callback) (char *buffer, int size, int rwflag, void *data);
+
+/**
+ * Create an Eet_Key needed for signing an eet file.
+ *
+ * The certificate should provide the public that match the private key.
+ * No verification is done to ensure that.
+ *
+ * @param certificate_file The file where to find the certificate.
+ * @param private_key_file The file that contains the private key.
+ * @param cb Function to callback if password is required to unlock
+ *        private key.
+ * @return A key handle to use, or @c NULL on failure.
+ *
+ * @see eet_identity_close()
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI Eet_Key *
+eet_identity_open(const char                *certificate_file,
+                  const char                *private_key_file,
+                  Eet_Key_Password_Callback  cb);
+
+/**
+ * Close and release all ressource used by an Eet_Key.  An
+ * reference counter prevent it from being freed until all file
+ * using it are also closed.
+ *
+ * @param key the key handle to close and free resources.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI void
+eet_identity_close(Eet_Key *key);
+
+/**
+ * Set a key to sign a file
+ *
+ * @param ef the file to set the identity.
+ * @param key the key handle to set as identity.
+ * @return #EET_ERROR_BAD_OBJECT if @p ef is invalid or
+ *         #EET_ERROR_NONE on success.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI Eet_Error
+eet_identity_set(Eet_File *ef,
+                 Eet_Key  *key);
+
+/**
+ * Display both private and public key of an Eet_Key.
+ *
+ * @param key the handle to print.
+ * @param out where to print.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI void
+eet_identity_print(Eet_Key *key,
+                   FILE    *out);
+
+/**
+ * Get the x509 der certificate associated with an Eet_File. Will return NULL
+ * if the file is not signed.
+ *
+ * @param ef The file handle to query.
+ * @param der_length The length of returned data, may be @c NULL.
+ * @return the x509 certificate or @c NULL on error.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI const void *
+eet_identity_x509(Eet_File *ef,
+                  int      *der_length);
+
+/**
+ * Get the raw signature associated with an Eet_File. Will return NULL
+ * if the file is not signed.
+ *
+ * @param ef The file handle to query.
+ * @param signature_length The length of returned data, may be @c NULL.
+ * @return the raw signature or @c NULL on error.
+ *
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI const void *
+eet_identity_signature(Eet_File *ef,
+                       int      *signature_length);
+
+/**
+ * Get the SHA1 associated with a file. Could be the one used to
+ * sign the data or if the data where not signed, it will be the
+ * SHA1 of the file.
+ *
+ * @param ef The file handle to query.
+ * @param sha1_length The length of returned data, may be @c NULL.
+ * @return the associated SHA1 or @c NULL on error.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI const void *
+eet_identity_sha1(Eet_File *ef,
+                  int      *sha1_length);
+
+/**
+ * Display the x509 der certificate to out.
+ *
+ * @param certificate the x509 certificate to print
+ * @param der_length The length the certificate.
+ * @param out where to print.
+ *
+ * @since 1.2.0
+ * @ingroup Eet_Cipher_Group
+ */
+EAPI void
+eet_identity_certificate_print(const unsigned char *certificate,
+                               int                  der_length,
+                               FILE                *out);
+
+/**
+ * @defgroup Eet_Data_Group Eet Data Serialization
+ *
+ * Convenience functions to serialize and parse complex data
+ * structures to binary blobs.
+ *
+ * While Eet core just handles binary blobs, it is often required
+ * to save some structured data of different types, such as
+ * strings, integers, lists, hashes and so on.
+ *
+ * Eet can serialize and then parse data types given some
+ * construction instructions. These are defined in two levels:
+ *
+ * - #Eet_Data_Descriptor_Class to tell generic memory handling,
+ *   such as the size of the type, how to allocate memory, strings,
+ *   lists, hashes and so on.
+ *
+ * - #Eet_Data_Descriptor to tell inside such type, the members and
+ *   their offsets inside the memory blob, their types and
+ *   names. These members can be simple types or other
+ *   #Eet_Data_Descriptor, allowing hierarchical types to be
+ *   defined.
+ *
+ * Given that C provides no introspection, this process can be
+ * quite cumbersome, so we provide lots of macros and convenience
+ * functions to aid creating the types.
+ *
+ * Example:
+ *
+ * @code
+ * #include <Eet.h>
+ * #include <Evas.h>
+ *
+ * typedef struct _blah2
+ * {
+ *    char *string;
+ * } Blah2;
+ *
+ * typedef struct _blah3
+ * {
+ *    char *string;
+ * } Blah3;
+ *
+ * typedef struct _blah
+ * {
+ *    char character;
+ *    short sixteen;
+ *    int integer;
+ *    long long lots;
+ *    float floating;
+ *    double floating_lots;
+ *    char *string;
+ *    Blah2 *blah2;
+ *    Eina_List *blah3;
+ * } Blah;
+ *
+ * int
+ * main(int argc, char **argv)
+ * {
+ *    Blah blah;
+ *    Blah2 blah2;
+ *    Blah3 blah3;
+ *    Eet_Data_Descriptor *edd, *edd2, *edd3;
+ *    Eet_Data_Descriptor_Class eddc, eddc2, eddc3;
+ *    void *data;
+ *    int size;
+ *    FILE *f;
+ *    Blah *blah_in;
+ *
+ *    eet_init();
+ *
+ *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc3, Blah3);
+ *    edd3 = eet_data_descriptor_stream_new(&eddc3);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd3, Blah3, "string3", string, EET_T_STRING);
+ *
+ *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc2, Blah2);
+ *    edd2 = eet_data_descriptor_stream_new(&eddc2);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd2, Blah2, "string2", string, EET_T_STRING);
+ *
+ *    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Blah);
+ *    edd = eet_data_descriptor_stream_new(&eddc);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "character", character, EET_T_CHAR);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "sixteen", sixteen, EET_T_SHORT);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "integer", integer, EET_T_INT);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "lots", lots, EET_T_LONG_LONG);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating", floating, EET_T_FLOAT);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating_lots", floating_lots, EET_T_DOUBLE);
+ *    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "string", string, EET_T_STRING);
+ *    EET_DATA_DESCRIPTOR_ADD_SUB(edd, Blah, "blah2", blah2, edd2);
+ *    EET_DATA_DESCRIPTOR_ADD_LIST(edd, Blah, "blah3", blah3, edd3);
+ *
+ *    blah3.string = "PANTS";
+ *
+ *    blah2.string = "subtype string here!";
+ *
+ *    blah.character = '7';
+ *    blah.sixteen = 0x7777;
+ *    blah.integer = 0xc0def00d;
+ *    blah.lots = 0xdeadbeef31337777;
+ *    blah.floating = 3.141592654;
+ *    blah.floating_lots = 0.777777777777777;
+ *    blah.string = "bite me like a turnip";
+ *    blah.blah2 = &blah2;
+ *    blah.blah3 = eina_list_append(NULL, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *    blah.blah3 = eina_list_append(blah.blah3, &blah3);
+ *
+ *    data = eet_data_descriptor_encode(edd, &blah, &size);
+ *    printf("-----DECODING\n");
+ *    blah_in = eet_data_descriptor_decode(edd, data, size);
+ *
+ *    printf("-----DECODED!\n");
+ *    printf("%c\n", blah_in->character);
+ *    printf("%x\n", (int)blah_in->sixteen);
+ *    printf("%x\n", blah_in->integer);
+ *    printf("%lx\n", blah_in->lots);
+ *    printf("%f\n", (double)blah_in->floating);
+ *    printf("%f\n", (double)blah_in->floating_lots);
+ *    printf("%s\n", blah_in->string);
+ *    printf("%p\n", blah_in->blah2);
+ *    printf("  %s\n", blah_in->blah2->string);
+ *      {
+ *         Eina_List *l;
+ *         Blah3 *blah3_in;
+ *
+ *         EINA_LIST_FOREACH(blah_in->blah3, l, blah3_in)
+ *           {
+ *              printf("%p\n", blah3_in);
+ *              printf("  %s\n", blah3_in->string);
+ *           }
+ *      }
+ *    eet_data_descriptor_free(edd);
+ *    eet_data_descriptor_free(edd2);
+ *    eet_data_descriptor_free(edd3);
+ *
+ *    eet_shutdown();
+ *
+ *   return 0;
+ * }
+ * @endcode
+ *
+ * @{
+ */
+#define EET_T_UNKNOW         0 /**< Unknown data encoding type */
+#define EET_T_CHAR           1 /**< Data type: char */
+#define EET_T_SHORT          2 /**< Data type: short */
+#define EET_T_INT            3 /**< Data type: int */
+#define EET_T_LONG_LONG      4 /**< Data type: long long */
+#define EET_T_FLOAT          5 /**< Data type: float */
+#define EET_T_DOUBLE         6 /**< Data type: double */
+#define EET_T_UCHAR          7 /**< Data type: unsigned char */
+#define EET_T_USHORT         8 /**< Data type: unsigned short */
+#define EET_T_UINT           9 /**< Data type: unsigned int */
+#define EET_T_ULONG_LONG     10 /**< Data type: unsigned long long */
+#define EET_T_STRING         11 /**< Data type: char * */
+#define EET_T_INLINED_STRING 12 /**< Data type: char * (but compressed inside the resulting eet) */
+#define EET_T_NULL           13 /**< Data type: (void *) (only use it if you know why) */
+#define EET_T_F32P32         14 /**< Data type: fixed point 32.32 */
+#define EET_T_F16P16         15 /**< Data type: fixed point 16.16 */
+#define EET_T_F8P24          16 /**< Data type: fixed point 8.24 */
+#define EET_T_LAST           18 /**< Last data type */
+
+#define EET_G_UNKNOWN        100 /**< Unknown group data encoding type */
+#define EET_G_ARRAY          101 /**< Fixed size array group type */
+#define EET_G_VAR_ARRAY      102 /**< Variable size array group type */
+#define EET_G_LIST           103 /**< Linked list group type */
+#define EET_G_HASH           104 /**< Hash table group type */
+#define EET_G_UNION          105 /**< Union group type */
+#define EET_G_VARIANT        106 /**< Selectable subtype group */
+#define EET_G_LAST           107 /**< Last group type */
+
+#define EET_I_LIMIT          128 /**< Other type exist but are reserved for internal purpose. */
+
+/**
+ * @typedef Eet_Data_Descriptor
+ *
+ * Opaque handle that have information on a type members.
+ *
+ * The members are added by means of
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB(),
+ * EET_DATA_DESCRIPTOR_ADD_LIST(), EET_DATA_DESCRIPTOR_ADD_HASH()
+ * or eet_data_descriptor_element_add().
+ *
+ * @see eet_data_descriptor_stream_new()
+ * @see eet_data_descriptor_file_new()
+ * @see eet_data_descriptor_free()
+ */
+typedef struct _Eet_Data_Descriptor         Eet_Data_Descriptor;
+
+/**
+ * @def EET_DATA_DESCRIPTOR_CLASS_VERSION
+ * The version of #Eet_Data_Descriptor_Class at the time of the
+ * distribution of the sources. One should define this to its
+ * version member so it is compatible with abi changes, or at least
+ * will not crash with them.
+ */
+#define EET_DATA_DESCRIPTOR_CLASS_VERSION 4
+
+/**
+ * @typedef Eet_Data_Descriptor_Class
+ *
+ * Instructs Eet about memory management for different needs under
+ * serialization and parse process.
+ */
+typedef struct _Eet_Data_Descriptor_Class   Eet_Data_Descriptor_Class;
+
+/**
+ * @struct _Eet_Data_Descriptor_Class
+ *
+ * Instructs Eet about memory management for different needs under
+ * serialization and parse process.
+ *
+ * If using Eina data types, it is advised to use the helpers
+ * EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET() and
+ * EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET().
+ */
+struct _Eet_Data_Descriptor_Class
+{
+   int         version;  /**< ABI version as #EET_DATA_DESCRIPTOR_CLASS_VERSION */
+   const char *name;  /**< Name of data type to be serialized */
+   int         size;  /**< Size in bytes of data type to be serialized */
+   struct
+   {
+      void       *(*mem_alloc)(size_t size);  /**< how to allocate memory (usually malloc()) */
+      void        (*mem_free)(void *mem);   /**< how to free memory (usually free()) */
+      char       *(*str_alloc)(const char *str);   /**< how to allocate a string */
+      void        (*str_free)(const char *str);   /**< how to free a string */
+      void       *(*list_next)(void *l);   /**< how to iterate to the next element of a list. Receives and should return the list node. */
+      void       *(*list_append)(void *l, void *d);    /**< how to append data @p d to list which head node is @p l */
+      void       *(*list_data)(void *l);   /**< retrieves the data from node @p l */
+      void       *(*list_free)(void *l);   /**< free all the nodes from the list which head node is @p l */
+      void        (*hash_foreach)(void *h, int (*func)(void *h, const char *k, void *dt, void *fdt), void *fdt); /**< iterates over all elements in the hash @p h in no specific order */
+      void       *(*hash_add)(void *h, const char *k, void *d);     /**< add a new data @p d as key @p k in hash @p h */
+      void        (*hash_free)(void *h);   /**< free all entries from the hash @p h */
+      char       *(*str_direct_alloc)(const char *str);   /**< how to allocate a string directly from file backed/mmaped region pointed by @p str */
+      void        (*str_direct_free)(const char *str);   /**< how to free a string returned by str_direct_alloc */
+      const char *(*type_get)(const void *data, Eina_Bool *unknow);    /**< convert any kind of data type to a name that define an Eet_Data_Element. */
+      Eina_Bool   (*type_set)(const char *type, void *data, Eina_Bool unknow);    /**< set the type at a particular adress */
+      void       *(*array_alloc)(size_t size); /**< how to allocate memory for array (usually malloc()) */
+      void        (*array_free)(void *mem); /**< how to free memory for array (usually free()) */
+   } func;
+};
+
+/**
+ * @}
+ */
+
+/**
+ * Create a new empty data structure descriptor.
+ * @param name The string name of this data structure (most be a
+ *        global constant and never change).
+ * @param size The size of the struct (in bytes).
+ * @param func_list_next The function to get the next list node.
+ * @param func_list_append The function to append a member to a list.
+ * @param func_list_data The function to get the data from a list node.
+ * @param func_list_free The function to free an entire linked list.
+ * @param func_hash_foreach The function to iterate through all
+ *        hash table entries.
+ * @param func_hash_add The function to add a member to a hash table.
+ * @param func_hash_free The function to free an entire hash table.
+ * @return A new empty data descriptor.
+ *
+ * This function creates a new data descriptore and returns a handle to the
+ * new data descriptor. On creation it will be empty, containing no contents
+ * describing anything other than the shell of the data structure.
+ *
+ * You add structure members to the data descriptor using the macros
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
+ * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
+ * adding to the description.
+ *
+ * Once you have described all the members of a struct you want loaded, or
+ * saved eet can load and save those members for you, encode them into
+ * endian-independant serialised data chunks for transmission across a
+ * a network or more.
+ *
+ * The function pointers to the list and hash table functions are only
+ * needed if you use those data types, else you can pass NULL instead.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ *
+ * @deprecated use eet_data_descriptor_stream_new() or
+ *             eet_data_descriptor_file_new()
+ */
+EINA_DEPRECATED EAPI Eet_Data_Descriptor *
+eet_data_descriptor_new(const char *name,
+                        int size,
+                        void *(*func_list_next)(void *l),
+                        void *(*func_list_append)(void *l, void *d),
+                        void *(*func_list_data)(void *l),
+                        void *(*func_list_free)(void *l),
+                        void (*func_hash_foreach)(void *h, int (*func)(void       *h,
+                                                                       const char *k,
+                                                                       void       *dt,
+                                                                       void       *fdt), void *fdt),
+                        void *(*func_hash_add)(void *h, const char *k, void *d),
+                        void (*func_hash_free)(void *h));
+/*
+ * FIXME:
+ *
+ * moving to this api from the old above. this will break things when the
+ * move happens - but be warned
+ */
+EINA_DEPRECATED EAPI Eet_Data_Descriptor *
+eet_data_descriptor2_new(const Eet_Data_Descriptor_Class *eddc);
+EINA_DEPRECATED EAPI Eet_Data_Descriptor *
+eet_data_descriptor3_new(const Eet_Data_Descriptor_Class *eddc);
+
+/**
+ * This function creates a new data descriptore and returns a handle to the
+ * new data descriptor. On creation it will be empty, containing no contents
+ * describing anything other than the shell of the data structure.
+ * @param eddc The data descriptor to free.
+ *
+ * You add structure members to the data descriptor using the macros
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
+ * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
+ * adding to the description.
+ *
+ * Once you have described all the members of a struct you want loaded, or
+ * saved eet can load and save those members for you, encode them into
+ * endian-independant serialised data chunks for transmission across a
+ * a network or more.
+ *
+ * This function specially ignore str_direct_alloc and str_direct_free. It
+ * is usefull when the eet_data you are reading don't have a dictionnary
+ * like network stream or ipc. It also mean that all string will be allocated
+ * and duplicated in memory.
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+EAPI Eet_Data_Descriptor *
+eet_data_descriptor_stream_new(const Eet_Data_Descriptor_Class *eddc);
+
+/**
+ * This function creates a new data descriptore and returns a handle to the
+ * new data descriptor. On creation it will be empty, containing no contents
+ * describing anything other than the shell of the data structure.
+ * @param eddc The data descriptor to free.
+ *
+ * You add structure members to the data descriptor using the macros
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), EET_DATA_DESCRIPTOR_ADD_SUB() and
+ * EET_DATA_DESCRIPTOR_ADD_LIST(), depending on what type of member you are
+ * adding to the description.
+ *
+ * Once you have described all the members of a struct you want loaded, or
+ * saved eet can load and save those members for you, encode them into
+ * endian-independant serialised data chunks for transmission across a
+ * a network or more.
+ *
+ * This function use str_direct_alloc and str_direct_free. It is
+ * usefull when the eet_data you are reading come from a file and
+ * have a dictionnary. This will reduce memory use, improve the
+ * possibility for the OS to page this string out. But be carrefull
+ * all EET_T_STRING are pointer to a mmapped area and it will point
+ * to nowhere if you close the file. So as long as you use this
+ * strings, you need to have the Eet_File open.
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+EAPI Eet_Data_Descriptor *
+eet_data_descriptor_file_new(const Eet_Data_Descriptor_Class *eddc);
+
+/**
+ * This function is an helper that set all the parameter of an
+ * Eet_Data_Descriptor_Class correctly when you use Eina data type
+ * with a stream.
+ * @param eddc The Eet_Data_Descriptor_Class you want to set.
+ * @param name The name of the structure described by this class.
+ * @param size The size of the structure described by this class.
+ * @return EINA_TRUE if the structure was correctly set (The only
+ *         reason that could make it fail is if you did give wrong
+ *         parameter).
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+EAPI Eina_Bool
+eet_eina_stream_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc,
+                                          unsigned int              eddc_size,
+                                          const char                *name,
+                                          int                        size);
+
+/**
+ * This macro is an helper that set all the parameter of an
+ * Eet_Data_Descriptor_Class correctly when you use Eina data type
+ * with stream.
+ * @param Clas The Eet_Data_Descriptor_Class you want to set.
+ * @param Type The type of the structure described by this class.
+ * @return EINA_TRUE if the structure was correctly set (The only
+ *         reason that could make it fail is if you did give wrong
+ *         parameter).
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+#define EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(clas, type)\
+   (eet_eina_stream_data_descriptor_class_set(clas, sizeof (*(clas)), # type, sizeof(type)))
+
+/**
+ * This function is an helper that set all the parameter of an
+ * Eet_Data_Descriptor_Class correctly when you use Eina data type
+ * with a file.
+ * @param eddc The Eet_Data_Descriptor_Class you want to set.
+ * @param name The name of the structure described by this class.
+ * @param size The size of the structure described by this class.
+ * @return EINA_TRUE if the structure was correctly set (The only
+ *         reason that could make it fail is if you did give wrong
+ *         parameter).
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+EAPI Eina_Bool
+eet_eina_file_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc,
+                                        unsigned int               eddc_size,
+                                        const char                *name,
+                                        int                        size);
+
+/**
+ * This macro is an helper that set all the parameter of an
+ * Eet_Data_Descriptor_Class correctly when you use Eina data type
+ * with file.
+ * @param Clas The Eet_Data_Descriptor_Class you want to set.
+ * @param Type The type of the structure described by this class.
+ * @return EINA_TRUE if the structure was correctly set (The only
+ *         reason that could make it fail is if you did give wrong
+ *         parameter).
+ *
+ * @since 1.2.3
+ * @ingroup Eet_Data_Group
+ */
+#define EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(clas, type)\
+  (eet_eina_file_data_descriptor_class_set(clas, sizeof (*(clas)), # type, sizeof(type)))
+
+/**
+ * This function frees a data descriptor when it is not needed anymore.
+ * @param edd The data descriptor to free.
+ *
+ * This function takes a data descriptor handle as a parameter and frees all
+ * data allocated for the data descriptor and the handle itself. After this
+ * call the descriptor is no longer valid.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void
+eet_data_descriptor_free(Eet_Data_Descriptor *edd);
+
+/**
+ * This function is an internal used by macros.
+ *
+ * This function is used by macros EET_DATA_DESCRIPTOR_ADD_BASIC(),
+ * EET_DATA_DESCRIPTOR_ADD_SUB() and EET_DATA_DESCRIPTOR_ADD_LIST(). It is
+ * complex to use by hand and should be left to be used by the macros, and
+ * thus is not documented.
+ *
+ * @param edd The data descriptor handle to add element (member).
+ * @param name The name of element to be serialized.
+ * @param type The type of element to be serialized, like
+ *        #EET_T_INT. If #EET_T_UNKNOW, then it is considered to be a
+ *        group, list or hash.
+ * @param group_type If element type is #EET_T_UNKNOW, then the @p
+ *        group_type will speficy if it is a list (#EET_G_LIST),
+ *        array (#EET_G_ARRAY) and so on. If #EET_G_UNKNOWN, then
+ *        the member is a subtype (pointer to another type defined by
+ *        another #Eet_Data_Descriptor).
+ * @param offset byte offset inside the source memory to be serialized.
+ * @param count number of elements (if #EET_G_ARRAY or #EET_G_VAR_ARRAY).
+ * @param counter_name variable that defines the name of number of elements.
+ * @param subtype If contains a subtype, then its data descriptor.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void
+eet_data_descriptor_element_add(Eet_Data_Descriptor *edd,
+                                const char          *name,
+                                int                  type,
+                                int                  group_type,
+                                int                  offset,
+                                /* int                  count_offset, */
+                                int                  count,
+                                const char          *counter_name,
+                                Eet_Data_Descriptor *subtype);
+
+/**
+ * Read a data structure from an eet file and decodes it.
+ * @param ef The eet file handle to read from.
+ * @param edd The data descriptor handle to use when decoding.
+ * @param name The key the data is stored under in the eet file.
+ * @return A pointer to the decoded data structure.
+ *
+ * This function decodes a data structure stored in an eet file, returning
+ * a pointer to it if it decoded successfully, or NULL on failure. This
+ * can save a programmer dozens of hours of work in writing configuration
+ * file parsing and writing code, as eet does all that work for the program
+ * and presents a program-friendly data structure, just as the programmer
+ * likes. Eet can handle members being added or deleted from the data in
+ * storage and safely zero-fills unfilled members if they were not found
+ * in the data. It checks sizes and headers whenever it reads data, allowing
+ * the programmer to not worry about corrupt data.
+ *
+ * Once a data structure has been described by the programmer with the
+ * fields they wish to save or load, storing or retrieving a data structure
+ * from an eet file, or from a chunk of memory is as simple as a single
+ * function call.
+ *
+ * @see eet_data_read_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void *
+eet_data_read(Eet_File            *ef,
+              Eet_Data_Descriptor *edd,
+              const char          *name);
+
+/**
+ * Write a data structure from memory and store in an eet file.
+ * @param ef The eet file handle to write to.
+ * @param edd The data descriptor to use when encoding.
+ * @param name The key to store the data under in the eet file.
+ * @param data A pointer to the data structure to ssave and encode.
+ * @param compress Compression flags for storage.
+ * @return bytes written on successful write, 0 on failure.
+ *
+ * This function is the reverse of eet_data_read(), saving a data structure
+ * to an eet file.
+ *
+ * @see eet_data_write_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI int
+eet_data_write(Eet_File            *ef,
+               Eet_Data_Descriptor *edd,
+               const char          *name,
+               const void          *data,
+               int                  compress);
+
+/**
+ * Dump an eet encoded data structure into ascii text
+ * @param data_in The pointer to the data to decode into a struct.
+ * @param size_in The size of the data pointed to in bytes.
+ * @param dumpfunc The function to call passed a string when new
+ *        data is converted to text
+ * @param dumpdata The data to pass to the @p dumpfunc callback.
+ * @return 1 on success, 0 on failure
+ *
+ * This function will take a chunk of data encoded by
+ * eet_data_descriptor_encode() and convert it into human readable
+ * ascii text.  It does this by calling the @p dumpfunc callback
+ * for all new text that is generated. This callback should append
+ * to any existing text buffer and will be passed the pointer @p
+ * dumpdata as a parameter as well as a string with new text to be
+ * appended.
+ *
+ * Example:
+ *
+ * @code
+ * void output(void *data, const char *string)
+ * {
+ *   printf("%s", string);
+ * }
+ *
+ * void dump(const char *file)
+ * {
+ *   FILE *f;
+ *   int len;
+ *   void *data;
+ *
+ *   f = fopen(file, "r");
+ *   fseek(f, 0, SEEK_END);
+ *   len = ftell(f);
+ *   rewind(f);
+ *   data = malloc(len);
+ *   fread(data, len, 1, f);
+ *   fclose(f);
+ *   eet_data_text_dump(data, len, output, NULL);
+ * }
+ * @endcode
+ *
+ * @see eet_data_text_dump_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI int
+eet_data_text_dump(const void  *data_in,
+                   int          size_in,
+                   void       (*dumpfunc)(void *data, const char *str),
+                   void        *dumpdata);
+
+/**
+ * Take an ascii encoding from eet_data_text_dump() and re-encode in binary.
+ * @param text The pointer to the string data to parse and encode.
+ * @param textlen The size of the string in bytes (not including 0
+ *        byte terminator).
+ * @param size_ret This gets filled in with the encoded data blob
+ *        size in bytes.
+ * @return The encoded data on success, NULL on failure.
+ *
+ * This function will parse the string pointed to by @p text and return
+ * an encoded data lump the same way eet_data_descriptor_encode() takes an
+ * in-memory data struct and encodes into a binary blob. @p text is a normal
+ * C string.
+ *
+ * @see eet_data_text_undump_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void *
+eet_data_text_undump(const char *text,
+                     int         textlen,
+                     int        *size_ret);
+
+/**
+ * Dump an eet encoded data structure from an eet file into ascii text
+ * @param ef A valid eet file handle.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param dumpfunc The function to call passed a string when new
+ *        data is converted to text
+ * @param dumpdata The data to pass to the @p dumpfunc callback.
+ * @return 1 on success, 0 on failure
+ *
+ * This function will take an open and valid eet file from
+ * eet_open() request the data encoded by
+ * eet_data_descriptor_encode() corresponding to the key @p name
+ * and convert it into human readable ascii text. It does this by
+ * calling the @p dumpfunc callback for all new text that is
+ * generated. This callback should append to any existing text
+ * buffer and will be passed the pointer @p dumpdata as a parameter
+ * as well as a string with new text to be appended.
+ *
+ * @see eet_data_dump_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI int
+eet_data_dump(Eet_File    *ef,
+              const char  *name,
+              void       (*dumpfunc)(void *data, const char *str),
+              void        *dumpdata);
+
+/**
+ * Take an ascii encoding from eet_data_dump() and re-encode in binary.
+ * @param ef A valid eet file handle.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param text The pointer to the string data to parse and encode.
+ * @param textlen The size of the string in bytes (not including 0
+ *        byte terminator).
+ * @param compress Compression flags (1 == compress, 0 = don't compress).
+ * @return 1 on success, 0 on failure
+ *
+ * This function will parse the string pointed to by @p text,
+ * encode it the same way eet_data_descriptor_encode() takes an
+ * in-memory data struct and encodes into a binary blob.
+ *
+ * The data (optionally compressed) will be in ram, pending a flush to
+ * disk (it will stay in ram till the eet file handle is closed though).
+ *
+ * @see eet_data_undump_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI int
+eet_data_undump(Eet_File   *ef,
+                const char *name,
+                const char *text,
+                int         textlen,
+                int         compress);
+
+/**
+ * Decode a data structure from an arbitary location in memory.
+ * @param edd The data  descriptor to use when decoding.
+ * @param data_in The pointer to the data to decode into a struct.
+ * @param size_in The size of the data pointed to in bytes.
+ * @return NULL on failure, or a valid decoded struct pointer on success.
+ *
+ * This function will decode a data structure that has been encoded using
+ * eet_data_descriptor_encode(), and return a data structure with all its
+ * elements filled out, if successful, or NULL on failure.
+ *
+ * The data to be decoded is stored at the memory pointed to by @p data_in,
+ * and is described by the descriptor pointed to by @p edd. The data size is
+ * passed in as the value to @p size_in, ande must be greater than 0 to
+ * succeed.
+ *
+ * This function is useful for decoding data structures delivered to the
+ * application by means other than an eet file, such as an IPC or socket
+ * connection, raw files, shared memory etc.
+ *
+ * Please see eet_data_read() for more information.
+ *
+ * @see eet_data_descriptor_decode_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void *
+eet_data_descriptor_decode(Eet_Data_Descriptor *edd,
+                           const void          *data_in,
+                           int                  size_in);
+
+/**
+ * Encode a dsata struct to memory and return that encoded data.
+ * @param edd The data  descriptor to use when encoding.
+ * @param data_in The pointer to the struct to encode into data.
+ * @param size_ret pointer to the an int to be filled with the decoded size.
+ * @return NULL on failure, or a valid encoded data chunk on success.
+ *
+ * This function takes a data structutre in memory and encodes it into a
+ * serialised chunk of data that can be decoded again by
+ * eet_data_descriptor_decode(). This is useful for being able to transmit
+ * data structures across sockets, pipes, IPC or shared file mechanisms,
+ * without having to worry about memory space, machine type, endianess etc.
+ *
+ * The parameter @p edd must point to a valid data descriptor, and
+ * @p data_in must point to the right data structure to encode. If not, the
+ * encoding may fail.
+ *
+ * On success a non NULL valid pointer is returned and what @p size_ret
+ * points to is set to the size of this decoded data, in bytes. When the
+ * encoded data is no longer needed, call free() on it. On failure NULL is
+ * returned and what @p size_ret points to is set to 0.
+ *
+ * Please see eet_data_write() for more information.
+ *
+ * @see eet_data_descriptor_encode_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
+EAPI void *
+eet_data_descriptor_encode(Eet_Data_Descriptor *edd,
+                           const void          *data_in,
+                           int                 *size_ret);
+
+/**
+ * Add a basic data element to a data descriptor.
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param type The type of the member to encode.
+ *
+ * This macro is a convenience macro provided to add a member to
+ * the data descriptor @p edd. The type of the structure is
+ * provided as the @p struct_type parameter (for example: struct
+ * my_struct). The @p name parameter defines a string that will be
+ * used to uniquely name that member of the struct (it is suggested
+ * to use the struct member itself).  The @p member parameter is
+ * the actual struct member itself (for eet_dictionary_string_check
+ * example: values), and @p type is the basic data type of the
+ * member which must be one of: EET_T_CHAR, EET_T_SHORT, EET_T_INT,
+ * EET_T_LONG_LONG, EET_T_FLOAT, EET_T_DOUBLE, EET_T_UCHAR,
+ * EET_T_USHORT, EET_T_UINT, EET_T_ULONG_LONG or EET_T_STRING.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_BASIC(edd, struct_type, name, member, type) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, type, EET_G_UNKNOWN, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       0, /* 0,  */NULL, NULL); \
-     }
-
-   /**
   * Add a sub-element type to a data descriptor
   * @param edd The data descriptor to add the type to.
   * @param struct_type The type of the struct.
   * @param name The string name to use to encode/decode this member
   *        (must be a constant global and never change).
   * @param member The struct member itself to be encoded.
   * @param subtype The type of sub-type struct to add.
   *
   * This macro lets you easily add a sub-type (a struct that's pointed to
   * by this one). All the parameters are the same as for
   * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the exception.
   * This must be the data descriptor of the struct that is pointed to by
   * this element.
   *
   * @since 1.0.0
   * @ingroup Eet_Data_Group
   */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, type, EET_G_UNKNOWN, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      0, /* 0,  */ NULL, NULL); \
+   } while(0)
+
+/**
+ * Add a sub-element type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param subtype The type of sub-type struct to add.
+ *
+ * This macro lets you easily add a sub-type (a struct that's pointed to
+ * by this one). All the parameters are the same as for
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the exception.
+ * This must be the data descriptor of the struct that is pointed to by
+ * this element.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_SUB(edd, struct_type, name, member, subtype) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_UNKNOWN, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       0, /* 0,  */NULL, subtype); \
-     }
-
-   /**
   * Add a linked list type to a data descriptor
   * @param edd The data descriptor to add the type to.
   * @param struct_type The type of the struct.
   * @param name The string name to use to encode/decode this member
   *        (must be a constant global and never change).
   * @param member The struct member itself to be encoded.
   * @param subtype The type of linked list member to add.
   *
   * This macro lets you easily add a linked list of other data types. All the
   * parameters are the same as for EET_DATA_DESCRIPTOR_ADD_BASIC(), with the
   * @p subtype being the exception. This must be the data descriptor of the
   * element that is in each member of the linked list to be stored.
   *
   * @since 1.0.0
   * @ingroup Eet_Data_Group
   */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_UNKNOWN, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      0, /* 0,  */ NULL, subtype); \
+   } while (0)
+
+/**
+ * Add a linked list type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param subtype The type of linked list member to add.
+ *
+ * This macro lets you easily add a linked list of other data types. All the
+ * parameters are the same as for EET_DATA_DESCRIPTOR_ADD_BASIC(), with the
+ * @p subtype being the exception. This must be the data descriptor of the
+ * element that is in each member of the linked list to be stored.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_LIST(edd, struct_type, name, member, subtype) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_LIST, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       0, /* 0,  */NULL, subtype); \
-     }
-
-   /**
   * Add a hash type to a data descriptor
   * @param edd The data descriptor to add the type to.
   * @param struct_type The type of the struct.
   * @param name The string name to use to encode/decode this member
   *        (must be a constant global and never change).
   * @param member The struct member itself to be encoded.
   * @param subtype The type of hash member to add.
   *
   * This macro lets you easily add a hash of other data types. All the
   * parameters are the same as for EET_DATA_DESCRIPTOR_ADD_BASIC(), with the
   * @p subtype being the exception. This must be the data descriptor of the
   * element that is in each member of the hash to be stored.
   *
   * @since 1.0.0
   * @ingroup Eet_Data_Group
   */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_LIST, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      0, /* 0,  */ NULL, subtype); \
+   } while (0)
+
+/**
+ * Add a hash type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param subtype The type of hash member to add.
+ *
+ * This macro lets you easily add a hash of other data types. All the
+ * parameters are the same as for EET_DATA_DESCRIPTOR_ADD_BASIC(), with the
+ * @p subtype being the exception. This must be the data descriptor of the
+ * element that is in each member of the hash to be stored.
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_HASH(edd, struct_type, name, member, subtype) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_HASH, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       0, /* 0,  */NULL, subtype); \
-     }
-
-   /**
-    * Add a fixed size array type to a data descriptor
-    * @param edd The data descriptor to add the type to.
-    * @param struct_type The type of the struct.
-    * @param name The string name to use to encode/decode this member
-    *        (must be a constant global and never change).
-    * @param member The struct member itself to be encoded.
-    * @param subtype The type of hash member to add.
-    *
-    * This macro lets you easily add a fixed size array of other data
-    * types. All the parameters are the same as for
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the
-    * exception. This must be the data descriptor of the element that
-    * is in each member of the hash to be stored.
-    *
-    * @since 1.0.2
-    * @ingroup Eet_Data_Group
-    */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_HASH, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      0, /* 0,  */ NULL, subtype); \
+   } while (0)
+
+/**
+ * Add a hash of string to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ *
+ * This macro lets you easily add a hash of string. All the
+ * parameters are the same as for EET_DATA_DESCRIPTOR_ADD_BASIC().
+ *
+ * @since 1.3.4
+ * @ingroup Eet_Data_Group
+ */
+#define EET_DATA_DESCRIPTOR_ADD_HASH_STRING(edd, struct_type, name, member) \
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_STRING, EET_G_HASH, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      0, /* 0,  */ NULL, NULL); \
+   } while (0)
+
+/**
+ * Add a fixed size array type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param subtype The type of hash member to add.
+ *
+ * This macro lets you easily add a fixed size array of other data
+ * types. All the parameters are the same as for
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the
+ * exception. This must be the data descriptor of the element that
+ * is in each member of the hash to be stored.
+ *
+ * @since 1.0.2
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_ARRAY(edd, struct_type, name, member, subtype) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_ARRAY, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       /* 0,  */sizeof(___ett.member)/sizeof(___ett.member[0]), NULL, subtype); \
-     }
-
-   /**
-    * Add a variable size array type to a data descriptor
-    * @param edd The data descriptor to add the type to.
-    * @param struct_type The type of the struct.
-    * @param name The string name to use to encode/decode this member
-    *        (must be a constant global and never change).
-    * @param member The struct member itself to be encoded.
-    * @param subtype The type of hash member to add.
-    *
-    * This macro lets you easily add a fixed size array of other data
-    * types. All the parameters are the same as for
-    * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the
-    * exception. This must be the data descriptor of the element that
-    * is in each member of the hash to be stored.
-    *
-    * @since 1.0.2
-    * @ingroup Eet_Data_Group
-    */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_ARRAY, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      /* 0,  */ sizeof(___ett.member) / \
+                                      sizeof(___ett.member[0]), NULL, subtype); \
+   } while (0)
+
+/**
+ * Add a variable size array type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param subtype The type of hash member to add.
+ *
+ * This macro lets you easily add a fixed size array of other data
+ * types. All the parameters are the same as for
+ * EET_DATA_DESCRIPTOR_ADD_BASIC(), with the @p subtype being the
+ * exception. This must be the data descriptor of the element that
+ * is in each member of the hash to be stored.
+ *
+ * @since 1.0.2
+ * @ingroup Eet_Data_Group
+ */
 #define EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd, struct_type, name, member, subtype) \
-     { \
-       struct_type ___ett; \
-       \
-       eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_VAR_ARRAY, \
-                                       (char *)(&(___ett.member)) - (char *)(&(___ett)), \
-                                       (char *)(&(___ett.member ## _count)) - (char *)(&(___ett)), /* 0,  */NULL, subtype); \
-     }
-
-   /**
-    * Add an union type to a data descriptor
-    * @param edd The data descriptor to add the type to.
-    * @param struct_type The type of the struct.
-    * @param name The string name to use to encode/decode this member
-    *        (must be a constant global and never change).
-    * @param member The struct member itself to be encoded.
-    * @param type_member The member that give hints on what is in the union.
-    * @param unified_type Describe all possible type the union could handle.
-    *
-    * This macro lets you easily add an union with a member that specify what is inside.
-    * The @p unified_type is an Eet_Data_Descriptor, but only the entry that match the name
-    * returned by type_get will be used for each serialized data. The type_get and type_set
-    * callback of unified_type should be defined.
-    *
-    * @since 1.2.4
-    * @ingroup Eet_Data_Group
-    * @see Eet_Data_Descriptor_Class
-    */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, \
+                                      name, \
+                                      EET_T_UNKNOW, \
+                                      EET_G_VAR_ARRAY, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      (char *)(& (___ett.member ## _count)) - \
+                                      (char *)(& (___ett)), \
+                                      /* 0,  */ NULL, \
+                                      subtype); \
+   } while (0)
+
+/**
+ * Add an union type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param type_member The member that give hints on what is in the union.
+ * @param unified_type Describe all possible type the union could handle.
+ *
+ * This macro lets you easily add an union with a member that specify what is inside.
+ * The @p unified_type is an Eet_Data_Descriptor, but only the entry that match the name
+ * returned by type_get will be used for each serialized data. The type_get and type_set
+ * callback of unified_type should be defined.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Data_Group
+ * @see Eet_Data_Descriptor_Class
+ */
 #define EET_DATA_DESCRIPTOR_ADD_UNION(edd, struct_type, name, member, type_member, unified_type) \
-     { \
-        struct_type ___ett;                    \
-       \
-        eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_UNION, \
-                                        (char *) (&(___ett.member)) - (char *)(&(___ett)), \
-                                        (char *) (&(___ett.type_member)) - (char *)(&(___ett)), \
-                                       NULL, unified_type); \
-     }
-
-   /**
-    * Add a automatically selectable type to a data descriptor
-    * @param edd The data descriptor to add the type to.
-    * @param struct_type The type of the struct.
-    * @param name The string name to use to encode/decode this member
-    *        (must be a constant global and never change).
-    * @param member The struct member itself to be encoded.
-    * @param type_member The member that give hints on what is in the union.
-    * @param unified_type Describe all possible type the union could handle.
-    *
-    * This macro lets you easily define what the content of @p member points to depending of
-    * the content of @p type_member. The type_get and type_set callback of unified_type should
-    * be defined. If the the type is not know at the time of restoring it, eet will still call
-    * type_set of @p unified_type but the pointer will be set to a serialized binary representation
-    * of what eet know. This make it possible, to save this pointer again by just returning the string
-    * given previously and telling it by setting unknow to EINA_TRUE.
-    *
-    * @since 1.2.4
-    * @ingroup Eet_Data_Group
-    * @see Eet_Data_Descriptor_Class
-    */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_UNION, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      (char *)(& (___ett.type_member)) - \
+                                      (char *)(& (___ett)), \
+                                      NULL, unified_type); \
+   } while (0)
+   
+/**
+ * Add a automatically selectable type to a data descriptor
+ * @param edd The data descriptor to add the type to.
+ * @param struct_type The type of the struct.
+ * @param name The string name to use to encode/decode this member
+ *        (must be a constant global and never change).
+ * @param member The struct member itself to be encoded.
+ * @param type_member The member that give hints on what is in the union.
+ * @param unified_type Describe all possible type the union could handle.
+ *
+ * This macro lets you easily define what the content of @p member points to depending of
+ * the content of @p type_member. The type_get and type_set callback of unified_type should
+ * be defined. If the the type is not know at the time of restoring it, eet will still call
+ * type_set of @p unified_type but the pointer will be set to a serialized binary representation
+ * of what eet know. This make it possible, to save this pointer again by just returning the string
+ * given previously and telling it by setting unknow to EINA_TRUE.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Data_Group
+ * @see Eet_Data_Descriptor_Class
+ */
 #define EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, struct_type, name, member, type_member, unified_type) \
-     { \
-        struct_type ___ett;                    \
-       \
-        eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_VARIANT, \
-                                        (char *) (&(___ett.member)) - (char *)(&(___ett)), \
-                                        (char *) (&(___ett.type_member)) - (char *)(&(___ett)), \
-                                       NULL, unified_type); \
-     }
-
-   /**
-    * Add a mapping to a data descriptor that will be used by union, variant or inherited type
-    * @param unified_type The data descriptor to add the mapping to.
-    * @param name The string name to get/set type.
-    * @param subtype The matching data descriptor.
-    *
-    * @since 1.2.4
-    * @ingroup Eet_Data_Group
-    * @see Eet_Data_Descriptor_Class
-    */
+   do { \
+      struct_type ___ett; \
+      eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_VARIANT, \
+                                      (char *)(& (___ett.member)) - \
+                                      (char *)(& (___ett)), \
+                                      (char *)(& (___ett.type_member)) - \
+                                      (char *)(& (___ett)), \
+                                      NULL, unified_type); \
+   } while (0)
+   
+/**
+ * Add a mapping to a data descriptor that will be used by union, variant or inherited type
+ * @param unified_type The data descriptor to add the mapping to.
+ * @param name The string name to get/set type.
+ * @param subtype The matching data descriptor.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Data_Group
+ * @see Eet_Data_Descriptor_Class
+ */
 #define EET_DATA_DESCRIPTOR_ADD_MAPPING(unified_type, name, subtype) \
-  eet_data_descriptor_element_add(unified_type, name, EET_T_UNKNOW, EET_G_UNKNOWN, 0, 0, NULL, subtype);
-
-   /**
-    * @defgroup Eet_Data_Cipher_Group Eet Data Serialization using A Ciphers
-    *
-    * Most of the @ref Eet_Data_Group have alternative versions that
-    * accounts for ciphers to protect their content.
-    *
-    * @see @ref Eet_Cipher_Group
-    *
-    * @ingroup Eet_Data_Group
-    */
-
-   /**
-    * Read a data structure from an eet file and decodes it using a cipher.
-    * @param ef The eet file handle to read from.
-    * @param edd The data descriptor handle to use when decoding.
-    * @param name The key the data is stored under in the eet file.
-    * @param cipher_key The key to use as cipher.
-    * @return A pointer to the decoded data structure.
-    *
-    * This function decodes a data structure stored in an eet file, returning
-    * a pointer to it if it decoded successfully, or NULL on failure. This
-    * can save a programmer dozens of hours of work in writing configuration
-    * file parsing and writing code, as eet does all that work for the program
-    * and presents a program-friendly data structure, just as the programmer
-    * likes. Eet can handle members being added or deleted from the data in
-    * storage and safely zero-fills unfilled members if they were not found
-    * in the data. It checks sizes and headers whenever it reads data, allowing
-    * the programmer to not worry about corrupt data.
-    *
-    * Once a data structure has been described by the programmer with the
-    * fields they wish to save or load, storing or retrieving a data structure
-    * from an eet file, or from a chunk of memory is as simple as a single
-    * function call.
-    *
-    * @see eet_data_read()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI void *eet_data_read_cipher(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const char *cipher_key);
-
-   /**
-    * Write a data structure from memory and store in an eet file
-    * using a cipher.
-    * @param ef The eet file handle to write to.
-    * @param edd The data descriptor to use when encoding.
-    * @param name The key to store the data under in the eet file.
-    * @param cipher_key The key to use as cipher.
-    * @param data A pointer to the data structure to ssave and encode.
-    * @param compress Compression flags for storage.
-    * @return bytes written on successful write, 0 on failure.
-    *
-    * This function is the reverse of eet_data_read(), saving a data structure
-    * to an eet file.
-    *
-    * @see eet_data_write_cipher()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI int eet_data_write_cipher(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const char *cipher_key, const void *data, int compress);
-
-   /**
-    * Dump an eet encoded data structure into ascii text using a cipher.
-    * @param data_in The pointer to the data to decode into a struct.
-    * @param cipher_key The key to use as cipher.
-    * @param size_in The size of the data pointed to in bytes.
-    * @param dumpfunc The function to call passed a string when new
-    *        data is converted to text
-    * @param dumpdata The data to pass to the @p dumpfunc callback.
-    * @return 1 on success, 0 on failure
-    *
-    * This function will take a chunk of data encoded by
-    * eet_data_descriptor_encode() and convert it into human readable
-    * ascii text.  It does this by calling the @p dumpfunc callback
-    * for all new text that is generated. This callback should append
-    * to any existing text buffer and will be passed the pointer @p
-    * dumpdata as a parameter as well as a string with new text to be
-    * appended.
-    *
-    * Example:
-    *
-    * @code
-    * void output(void *data, const char *string)
-    * {
-    *   printf("%s", string);
-    * }
-    *
-    * void dump(const char *file)
-    * {
-    *   FILE *f;
-    *   int len;
-    *   void *data;
-    *
-    *   f = fopen(file, "r");
-    *   fseek(f, 0, SEEK_END);
-    *   len = ftell(f);
-    *   rewind(f);
-    *   data = malloc(len);
-    *   fread(data, len, 1, f);
-    *   fclose(f);
-    *   eet_data_text_dump_cipher(data, cipher_key, len, output, NULL);
-    * }
-    * @endcode
-    *
-    * @see eet_data_text_dump()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI int eet_data_text_dump_cipher(const void *data_in, const char *cipher_key, int size_in, void (*dumpfunc) (void *data, const char *str), void *dumpdata);
-
-   /**
-    * Take an ascii encoding from eet_data_text_dump() and re-encode
-    * in binary using a cipher.
-    * @param text The pointer to the string data to parse and encode.
-    * @param cipher_key The key to use as cipher.
-    * @param textlen The size of the string in bytes (not including 0
-    *        byte terminator).
-    * @param size_ret This gets filled in with the encoded data blob
-    *        size in bytes.
-    * @return The encoded data on success, NULL on failure.
-    *
-    * This function will parse the string pointed to by @p text and return
-    * an encoded data lump the same way eet_data_descriptor_encode() takes an
-    * in-memory data struct and encodes into a binary blob. @p text is a normal
-    * C string.
-    *
-    * @see eet_data_text_undump()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI void *eet_data_text_undump_cipher(const char *text, const char *cipher_key, int textlen, int *size_ret);
-
-   /**
-    * Dump an eet encoded data structure from an eet file into ascii
-    * text using a cipher.
-    * @param ef A valid eet file handle.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param dumpfunc The function to call passed a string when new
-    *        data is converted to text
-    * @param dumpdata The data to pass to the @p dumpfunc callback.
-    * @return 1 on success, 0 on failure
-    *
-    * This function will take an open and valid eet file from
-    * eet_open() request the data encoded by
-    * eet_data_descriptor_encode() corresponding to the key @p name
-    * and convert it into human readable ascii text. It does this by
-    * calling the @p dumpfunc callback for all new text that is
-    * generated. This callback should append to any existing text
-    * buffer and will be passed the pointer @p dumpdata as a parameter
-    * as well as a string with new text to be appended.
-    *
-    * @see eet_data_dump()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI int eet_data_dump_cipher(Eet_File *ef, const char *name, const char *cipher_key, void (*dumpfunc) (void *data, const char *str), void *dumpdata);
-
-   /**
-    * Take an ascii encoding from eet_data_dump() and re-encode in
-    * binary using a cipher.
-    * @param ef A valid eet file handle.
-    * @param name Name of the entry. eg: "/base/file_i_want".
-    * @param cipher_key The key to use as cipher.
-    * @param text The pointer to the string data to parse and encode.
-    * @param textlen The size of the string in bytes (not including 0
-    *        byte terminator).
-    * @param compress Compression flags (1 == compress, 0 = don't compress).
-    * @return 1 on success, 0 on failure
-    *
-    * This function will parse the string pointed to by @p text,
-    * encode it the same way eet_data_descriptor_encode() takes an
-    * in-memory data struct and encodes into a binary blob.
-    *
-    * The data (optionally compressed) will be in ram, pending a flush to
-    * disk (it will stay in ram till the eet file handle is closed though).
-    *
-    * @see eet_data_undump()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI int eet_data_undump_cipher(Eet_File *ef, const char *name, const char *cipher_key, const char *text, int textlen, int compress);
-
-   /**
-    * Decode a data structure from an arbitary location in memory
-    * using a cipher.
-    * @param edd The data  descriptor to use when decoding.
-    * @param data_in The pointer to the data to decode into a struct.
-    * @param cipher_key The key to use as cipher.
-    * @param size_in The size of the data pointed to in bytes.
-    * @return NULL on failure, or a valid decoded struct pointer on success.
-    *
-    * This function will decode a data structure that has been encoded using
-    * eet_data_descriptor_encode(), and return a data structure with all its
-    * elements filled out, if successful, or NULL on failure.
-    *
-    * The data to be decoded is stored at the memory pointed to by @p data_in,
-    * and is described by the descriptor pointed to by @p edd. The data size is
-    * passed in as the value to @p size_in, ande must be greater than 0 to
-    * succeed.
-    *
-    * This function is useful for decoding data structures delivered to the
-    * application by means other than an eet file, such as an IPC or socket
-    * connection, raw files, shared memory etc.
-    *
-    * Please see eet_data_read() for more information.
-    *
-    * @see eet_data_descriptor_decode()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI void *eet_data_descriptor_decode_cipher(Eet_Data_Descriptor *edd, const void *data_in, const char *cipher_key, int size_in);
-
-   /**
-    * Encode a data struct to memory and return that encoded data
-    * using a cipher.
-    * @param edd The data  descriptor to use when encoding.
-    * @param data_in The pointer to the struct to encode into data.
-    * @param cipher_key The key to use as cipher.
-    * @param size_ret pointer to the an int to be filled with the decoded size.
-    * @return NULL on failure, or a valid encoded data chunk on success.
-    *
-    * This function takes a data structutre in memory and encodes it into a
-    * serialised chunk of data that can be decoded again by
-    * eet_data_descriptor_decode(). This is useful for being able to transmit
-    * data structures across sockets, pipes, IPC or shared file mechanisms,
-    * without having to worry about memory space, machine type, endianess etc.
-    *
-    * The parameter @p edd must point to a valid data descriptor, and
-    * @p data_in must point to the right data structure to encode. If not, the
-    * encoding may fail.
-    *
-    * On success a non NULL valid pointer is returned and what @p size_ret
-    * points to is set to the size of this decoded data, in bytes. When the
-    * encoded data is no longer needed, call free() on it. On failure NULL is
-    * returned and what @p size_ret points to is set to 0.
-    *
-    * Please see eet_data_write() for more information.
-    *
-    * @see eet_data_descriptor_encode()
-    *
-    * @since 1.0.0
-    * @ingroup Eet_Data_Cipher_Group
-    */
-   EAPI void *eet_data_descriptor_encode_cipher(Eet_Data_Descriptor *edd, const void *data_in, const char *cipher_key, int *size_ret);
-
-  /**
-   * @defgroup Eet_Node_Group Low-level Serialization Structures.
-   *
-   * Functions that create, destroy and manipulate serialization nodes
-   * used by @ref Eet_Data_Group.
-   *
-   * @{
-   */
-
-  /**
-   * @typedef Eet_Node
-   * Opaque handle to manage serialization node.
-   */
-   typedef struct _Eet_Node                  Eet_Node;
-
-  /**
-   * @typedef Eet_Node_Data
-   * Contains an union that can fit any kind of node.
-   */
-   typedef struct _Eet_Node_Data             Eet_Node_Data;
-
-  /**
-   * @struct _Eet_Node_Data
-   * Contains an union that can fit any kind of node.
-   */
-   struct _Eet_Node_Data
-   {
-      union {
-        char c;
-        short s;
-        int i;
-        long long l;
-        float f;
-        double d;
-        unsigned char uc;
-        unsigned short us;
-        unsigned int ui;
-        unsigned long long ul;
-        const char *str;
-      } value;
-   };
-
-  /**
-   * @}
-   */
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_char_new(const char *name, char c);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_short_new(const char *name, short s);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_int_new(const char *name, int i);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_long_long_new(const char *name, long long l);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_float_new(const char *name, float f);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_double_new(const char *name, double d);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_unsigned_char_new(const char *name, unsigned char uc);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_unsigned_short_new(const char *name, unsigned short us);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_unsigned_int_new(const char *name, unsigned int ui);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_unsigned_long_long_new(const char *name, unsigned long long l);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_string_new(const char *name, const char *str);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_inlined_string_new(const char *name, const char *str);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_null_new(const char *name);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_list_new(const char *name, Eina_List *nodes);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_array_new(const char *name, int count, Eina_List *nodes);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_var_array_new(const char *name, Eina_List *nodes);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_hash_new(const char *name, const char *key, Eet_Node *node);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_struct_new(const char *name, Eina_List *nodes);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_node_struct_child_new(const char *parent, Eet_Node *child);
-
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void eet_node_list_append(Eet_Node *parent, const char *name, Eet_Node *child);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void eet_node_struct_append(Eet_Node *parent, const char *name, Eet_Node *child);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void eet_node_hash_add(Eet_Node *parent, const char *name, const char *key, Eet_Node *child);
-
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const char *str), void *dumpdata);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void eet_node_del(Eet_Node *n);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI void *eet_data_node_encode_cipher(Eet_Node *node, const char *cipher_key, int *size_ret);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_data_node_decode_cipher(const void *data_in, const char *cipher_key, int size_in);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI Eet_Node *eet_data_node_read_cipher(Eet_File *ef, const char *name, const char *cipher_key);
-
-  /**
-   * TODO FIX ME
-   * @ingroup Eet_Node_Group
-   */
-   EAPI int eet_data_node_write_cipher(Eet_File *ef, const char *name, const char *cipher_key, Eet_Node *node, int compress);
-
-  /* EXPERIMENTAL: THIS API MAY CHANGE IN THE FUTURE, USE IT ONLY IF YOU KNOW WHAT YOU ARE DOING. */
-
-  /**
-   * @typedef Eet_Node_Walk
-   * Describes how to walk trees of #Eet_Node.
-   */
-   typedef struct _Eet_Node_Walk             Eet_Node_Walk;
-
-  /**
-   * @struct _Eet_Node_Walk
-   * Describes how to walk trees of #Eet_Node.
-   */
-   struct _Eet_Node_Walk
-   {
-      void *(*struct_alloc)(const char *type, void *user_data);
-      void (*struct_add)(void *parent, const char *name, void *child, void *user_data);
-      void *(*array)(Eina_Bool variable, const char *name, int count, void *user_data);
-      void (*insert)(void *array, int index, void *child, void *user_data);
-      void *(*list)(const char *name, void *user_data);
-      void (*append)(void *list, void *child, void *user_data);
-      void *(*hash)(void *parent, const char *name, const char *key, void *value, void *user_data);
-      void *(*simple)(int type, Eet_Node_Data *data, void *user_data);
-   };
-
-   EAPI void *eet_node_walk(void *parent, const char *name, Eet_Node *root, Eet_Node_Walk *cb, void *user_data);
-
-  /*******/
-
-  /**
-   * @defgroup Eet_Connection_Group Helper function to use eet over a network link
-   *
-   * Function that reconstruct and prepare packet of @ref Eet_Data_Group to be send.
-   *
-   */
-
-  /**
-   * @typedef Eet_Connection
-   * Opaque handle to track paquet for a specific connection.
-   *
-   * @ingroup Eet_Connection_Group
-   */
-   typedef struct _Eet_Connection Eet_Connection;
-
-  /**
-   * @typedef Eet_Read_Cb
-   * Called back when an @ref Eet_Data_Group has been received completly and could be used.
-   *
-   * @ingroup Eet_Connection_Group
-   */
-   typedef Eina_Bool Eet_Read_Cb(const void *eet_data, size_t size, void *user_data);
-
-  /**
-   * @typedef Eet_Write_Cb
-   * Called back when a packet containing @ref Eet_Data_Group data is ready to be send.
-   *
-   * @ingroup Eet_Connection_Group
-   */
-   typedef Eina_Bool Eet_Write_Cb(const void *data, size_t size, void *user_data);
-
-  /**
-   * Instanciate a new connection to track.
-   * @oaram eet_read_cb Function to call when one Eet_Data packet has been fully assemble.
-   * @param eet_write_cb Function to call when one Eet_Data packet is ready to be send over the wire.
-   * @param user_data Pointer provided to both functions to be used as a context handler.
-   * @return NULL on failure, or a valid Eet_Connection handler.
-   *
-   * For every connection to track you will need a separate Eet_Connection provider.
-   *
-   * @since 1.2.4
-   * @ingroup Eet_Connection_Group
-   */
-   Eet_Connection *eet_connection_new(Eet_Read_Cb *eet_read_cb, Eet_Write_Cb *eet_write_cb, const void *user_data);
-
-  /**
-   * Process a raw packet received over the link
-   * @oaram conn Connection handler to track.
-   * @param data Raw data packet.
-   * @param size The size of that packet.
-   * @return 0 on complete success, any other value indicate where in the stream it got wrong (It could be before that packet).
-   *
-   * Every time you receive a packet related to your connection, you should pass
-   * it to that function so that it could process and assemble packet has you
-   * receive it. It will automatically call Eet_Read_Cb when one is fully received.
-   *
-   * @since 1.2.4
-   * @ingroup Eet_Connection_Group
-   */
-   int eet_connection_received(Eet_Connection *conn, const void *data, size_t size);
-
-  /**
-   * Convert a complex structure and prepare it to be send.
-   * @oaram conn Connection handler to track.
-   * @param edd The data descriptor to use when encoding.
-   * @param data_in The pointer to the struct to encode into data.
-   * @param cipher_key The key to use as cipher.
-   * @return EINA_TRUE if the data where correctly send, EINA_FALSE if they don't.
-   *
-   * This function serialize data_in with edd, assemble the packet and call
-   * Eet_Write_Cb when ready. The data passed Eet_Write_Cb are temporary allocated
-   * and will vanish just after the return of the callback.
-   *
-   * @see eet_data_descriptor_encode_cipher
-   *
-   * @since 1.2.4
-   * @ingroup Eet_Connection_Group
-   */
-   Eina_Bool eet_connection_send(Eet_Connection *conn, Eet_Data_Descriptor *edd, const void *data_in, const char *cipher_key);
-
-  /**
-   * Convert a Eet_Node tree and prepare it to be send.
-   * @oaram conn Connection handler to track.
-   * @param node The data tree to use when encoding.
-   * @param cipher_key The key to use as cipher.
-   * @return EINA_TRUE if the data where correctly send, EINA_FALSE if they don't.
-   *
-   * This function serialize node, assemble the packet and call
-   * Eet_Write_Cb when ready. The data passed Eet_Write_Cb are temporary allocated
-   * and will vanish just after the return of the callback.
-   *
-   * @see eet_data_node_encode_cipher
-   *
-   * @since 1.2.4
-   * @ingroup Eet_Connection_Group
-   */
-   Eina_Bool eet_connection_node_send(Eet_Connection *conn, Eet_Node *node, const char *cipher_key);
-
-  /**
-   * Close a connection and lost its track.
-   * @oaram conn Connection handler to close.
-   * @param on_going Signal if a partial packet wasn't completed.
-   * @return the user_data passed to both callback.
-   *
-   * @since 1.2.4
-   * @ingroup Eet_Connection_Group
-   */
-   void *eet_connection_close(Eet_Connection *conn, Eina_Bool *on_going);
+   eet_data_descriptor_element_add(unified_type, \
+                                   name, \
+                                   EET_T_UNKNOW, \
+                                   EET_G_UNKNOWN, \
+                                   0, \
+                                   0, \
+                                   NULL, \
+                                   subtype)
+
+/**
+ * @defgroup Eet_Data_Cipher_Group Eet Data Serialization using A Ciphers
+ *
+ * Most of the @ref Eet_Data_Group have alternative versions that
+ * accounts for ciphers to protect their content.
+ *
+ * @see @ref Eet_Cipher_Group
+ *
+ * @ingroup Eet_Data_Group
+ */
+
+/**
+ * Read a data structure from an eet file and decodes it using a cipher.
+ * @param ef The eet file handle to read from.
+ * @param edd The data descriptor handle to use when decoding.
+ * @param name The key the data is stored under in the eet file.
+ * @param cipher_key The key to use as cipher.
+ * @return A pointer to the decoded data structure.
+ *
+ * This function decodes a data structure stored in an eet file, returning
+ * a pointer to it if it decoded successfully, or NULL on failure. This
+ * can save a programmer dozens of hours of work in writing configuration
+ * file parsing and writing code, as eet does all that work for the program
+ * and presents a program-friendly data structure, just as the programmer
+ * likes. Eet can handle members being added or deleted from the data in
+ * storage and safely zero-fills unfilled members if they were not found
+ * in the data. It checks sizes and headers whenever it reads data, allowing
+ * the programmer to not worry about corrupt data.
+ *
+ * Once a data structure has been described by the programmer with the
+ * fields they wish to save or load, storing or retrieving a data structure
+ * from an eet file, or from a chunk of memory is as simple as a single
+ * function call.
+ *
+ * @see eet_data_read()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI void *
+eet_data_read_cipher(Eet_File            *ef,
+                     Eet_Data_Descriptor *edd,
+                     const char          *name,
+                     const char          *cipher_key);
+
+/**
+ * Write a data structure from memory and store in an eet file
+ * using a cipher.
+ * @param ef The eet file handle to write to.
+ * @param edd The data descriptor to use when encoding.
+ * @param name The key to store the data under in the eet file.
+ * @param cipher_key The key to use as cipher.
+ * @param data A pointer to the data structure to ssave and encode.
+ * @param compress Compression flags for storage.
+ * @return bytes written on successful write, 0 on failure.
+ *
+ * This function is the reverse of eet_data_read(), saving a data structure
+ * to an eet file.
+ *
+ * @see eet_data_write_cipher()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI int
+eet_data_write_cipher(Eet_File            *ef,
+                      Eet_Data_Descriptor *edd,
+                      const char          *name,
+                      const char          *cipher_key,
+                      const void          *data,
+                      int                  compress);
+
+/**
+ * Dump an eet encoded data structure into ascii text using a cipher.
+ * @param data_in The pointer to the data to decode into a struct.
+ * @param cipher_key The key to use as cipher.
+ * @param size_in The size of the data pointed to in bytes.
+ * @param dumpfunc The function to call passed a string when new
+ *        data is converted to text
+ * @param dumpdata The data to pass to the @p dumpfunc callback.
+ * @return 1 on success, 0 on failure
+ *
+ * This function will take a chunk of data encoded by
+ * eet_data_descriptor_encode() and convert it into human readable
+ * ascii text.  It does this by calling the @p dumpfunc callback
+ * for all new text that is generated. This callback should append
+ * to any existing text buffer and will be passed the pointer @p
+ * dumpdata as a parameter as well as a string with new text to be
+ * appended.
+ *
+ * Example:
+ *
+ * @code
+ * void output(void *data, const char *string)
+ * {
+ *   printf("%s", string);
+ * }
+ *
+ * void dump(const char *file)
+ * {
+ *   FILE *f;
+ *   int len;
+ *   void *data;
+ *
+ *   f = fopen(file, "r");
+ *   fseek(f, 0, SEEK_END);
+ *   len = ftell(f);
+ *   rewind(f);
+ *   data = malloc(len);
+ *   fread(data, len, 1, f);
+ *   fclose(f);
+ *   eet_data_text_dump_cipher(data, cipher_key, len, output, NULL);
+ * }
+ * @endcode
+ *
+ * @see eet_data_text_dump()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI int
+eet_data_text_dump_cipher(const void *data_in,
+                          const char *cipher_key,
+                          int size_in,
+                          void (*dumpfunc)(void *data, const char *str),
+                          void *dumpdata);
+
+/**
+ * Take an ascii encoding from eet_data_text_dump() and re-encode
+ * in binary using a cipher.
+ * @param text The pointer to the string data to parse and encode.
+ * @param cipher_key The key to use as cipher.
+ * @param textlen The size of the string in bytes (not including 0
+ *        byte terminator).
+ * @param size_ret This gets filled in with the encoded data blob
+ *        size in bytes.
+ * @return The encoded data on success, NULL on failure.
+ *
+ * This function will parse the string pointed to by @p text and return
+ * an encoded data lump the same way eet_data_descriptor_encode() takes an
+ * in-memory data struct and encodes into a binary blob. @p text is a normal
+ * C string.
+ *
+ * @see eet_data_text_undump()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI void *
+eet_data_text_undump_cipher(const char *text,
+                            const char *cipher_key,
+                            int         textlen,
+                            int        *size_ret);
+
+/**
+ * Dump an eet encoded data structure from an eet file into ascii
+ * text using a cipher.
+ * @param ef A valid eet file handle.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param dumpfunc The function to call passed a string when new
+ *        data is converted to text
+ * @param dumpdata The data to pass to the @p dumpfunc callback.
+ * @return 1 on success, 0 on failure
+ *
+ * This function will take an open and valid eet file from
+ * eet_open() request the data encoded by
+ * eet_data_descriptor_encode() corresponding to the key @p name
+ * and convert it into human readable ascii text. It does this by
+ * calling the @p dumpfunc callback for all new text that is
+ * generated. This callback should append to any existing text
+ * buffer and will be passed the pointer @p dumpdata as a parameter
+ * as well as a string with new text to be appended.
+ *
+ * @see eet_data_dump()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI int
+eet_data_dump_cipher(Eet_File    *ef,
+                     const char  *name,
+                     const char  *cipher_key,
+                     void       (*dumpfunc)(void *data, const char *str),
+                     void        *dumpdata);
+
+/**
+ * Take an ascii encoding from eet_data_dump() and re-encode in
+ * binary using a cipher.
+ * @param ef A valid eet file handle.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @param cipher_key The key to use as cipher.
+ * @param text The pointer to the string data to parse and encode.
+ * @param textlen The size of the string in bytes (not including 0
+ *        byte terminator).
+ * @param compress Compression flags (1 == compress, 0 = don't compress).
+ * @return 1 on success, 0 on failure
+ *
+ * This function will parse the string pointed to by @p text,
+ * encode it the same way eet_data_descriptor_encode() takes an
+ * in-memory data struct and encodes into a binary blob.
+ *
+ * The data (optionally compressed) will be in ram, pending a flush to
+ * disk (it will stay in ram till the eet file handle is closed though).
+ *
+ * @see eet_data_undump()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI int
+eet_data_undump_cipher(Eet_File   *ef,
+                       const char *name,
+                       const char *cipher_key,
+                       const char *text,
+                       int         textlen,
+                       int         compress);
+
+/**
+ * Decode a data structure from an arbitary location in memory
+ * using a cipher.
+ * @param edd The data  descriptor to use when decoding.
+ * @param data_in The pointer to the data to decode into a struct.
+ * @param cipher_key The key to use as cipher.
+ * @param size_in The size of the data pointed to in bytes.
+ * @return NULL on failure, or a valid decoded struct pointer on success.
+ *
+ * This function will decode a data structure that has been encoded using
+ * eet_data_descriptor_encode(), and return a data structure with all its
+ * elements filled out, if successful, or NULL on failure.
+ *
+ * The data to be decoded is stored at the memory pointed to by @p data_in,
+ * and is described by the descriptor pointed to by @p edd. The data size is
+ * passed in as the value to @p size_in, ande must be greater than 0 to
+ * succeed.
+ *
+ * This function is useful for decoding data structures delivered to the
+ * application by means other than an eet file, such as an IPC or socket
+ * connection, raw files, shared memory etc.
+ *
+ * Please see eet_data_read() for more information.
+ *
+ * @see eet_data_descriptor_decode()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI void *
+eet_data_descriptor_decode_cipher(Eet_Data_Descriptor *edd,
+                                  const void          *data_in,
+                                  const char          *cipher_key,
+                                  int                  size_in);
+
+/**
+ * Encode a data struct to memory and return that encoded data
+ * using a cipher.
+ * @param edd The data  descriptor to use when encoding.
+ * @param data_in The pointer to the struct to encode into data.
+ * @param cipher_key The key to use as cipher.
+ * @param size_ret pointer to the an int to be filled with the decoded size.
+ * @return NULL on failure, or a valid encoded data chunk on success.
+ *
+ * This function takes a data structutre in memory and encodes it into a
+ * serialised chunk of data that can be decoded again by
+ * eet_data_descriptor_decode(). This is useful for being able to transmit
+ * data structures across sockets, pipes, IPC or shared file mechanisms,
+ * without having to worry about memory space, machine type, endianess etc.
+ *
+ * The parameter @p edd must point to a valid data descriptor, and
+ * @p data_in must point to the right data structure to encode. If not, the
+ * encoding may fail.
+ *
+ * On success a non NULL valid pointer is returned and what @p size_ret
+ * points to is set to the size of this decoded data, in bytes. When the
+ * encoded data is no longer needed, call free() on it. On failure NULL is
+ * returned and what @p size_ret points to is set to 0.
+ *
+ * Please see eet_data_write() for more information.
+ *
+ * @see eet_data_descriptor_encode()
+ *
+ * @since 1.0.0
+ * @ingroup Eet_Data_Cipher_Group
+ */
+EAPI void *
+eet_data_descriptor_encode_cipher(Eet_Data_Descriptor *edd,
+                                  const void          *data_in,
+                                  const char          *cipher_key,
+                                  int                 *size_ret);
+
+/**
+ * @defgroup Eet_Node_Group Low-level Serialization Structures.
+ *
+ * Functions that create, destroy and manipulate serialization nodes
+ * used by @ref Eet_Data_Group.
+ *
+ * @{
+ */
+
+/**
+ * @typedef Eet_Node
+ * Opaque handle to manage serialization node.
+ */
+typedef struct _Eet_Node        Eet_Node;
+
+/**
+ * @typedef Eet_Node_Data
+ * Contains an union that can fit any kind of node.
+ */
+typedef struct _Eet_Node_Data   Eet_Node_Data;
+
+/**
+ * @struct _Eet_Node_Data
+ * Contains an union that can fit any kind of node.
+ */
+struct _Eet_Node_Data
+{
+   union {
+      char                c;
+      short               s;
+      int                 i;
+      long long           l;
+      float               f;
+      double              d;
+      unsigned char       uc;
+      unsigned short      us;
+      unsigned int        ui;
+      unsigned long long  ul;
+      const char         *str;
+   } value;
+};
+
+/**
+ * @}
+ */
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+ eet_node_char_new(const char *name,
+                   char        c);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_short_new(const char *name,
+                   short       s);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_int_new(const char *name,
+                 int         i);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_long_long_new(const char *name,
+                       long long   l);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_float_new(const char *name,
+                   float       f);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_double_new(const char *name,
+                    double      d);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_unsigned_char_new(const char    *name,
+                           unsigned char  uc);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_unsigned_short_new(const char     *name,
+                            unsigned short  us);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_unsigned_int_new(const char   *name,
+                          unsigned int  ui);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_unsigned_long_long_new(const char         *name,
+                                unsigned long long  l);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_string_new(const char *name,
+                    const char *str);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_inlined_string_new(const char *name,
+                            const char *str);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_null_new(const char *name);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_list_new(const char *name,
+                  Eina_List  *nodes);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_array_new(const char *name,
+                   int         count,
+                   Eina_List  *nodes);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_var_array_new(const char *name,
+                       Eina_List  *nodes);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_hash_new(const char *name,
+                  const char *key,
+                  Eet_Node   *node);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_struct_new(const char *name,
+                    Eina_List  *nodes);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_node_struct_child_new(const char *parent,
+                          Eet_Node   *child);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void
+eet_node_list_append(Eet_Node   *parent,
+                     const char *name,
+                     Eet_Node   *child);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void
+eet_node_struct_append(Eet_Node   *parent,
+                       const char *name,
+                       Eet_Node   *child);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void
+eet_node_hash_add(Eet_Node   *parent,
+                  const char *name,
+                  const char *key,
+                  Eet_Node   *child);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void
+eet_node_dump(Eet_Node  *n,
+              int        dumplevel,
+              void     (*dumpfunc)(void *data, const char *str),
+              void      *dumpdata);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void
+eet_node_del(Eet_Node *n);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI void *
+eet_data_node_encode_cipher(Eet_Node   *node,
+                            const char *cipher_key,
+                            int        *size_ret);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_data_node_decode_cipher(const void *data_in,
+                            const char *cipher_key,
+                            int         size_in);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI Eet_Node *
+eet_data_node_read_cipher(Eet_File   *ef,
+                          const char *name,
+                          const char *cipher_key);
+
+/**
+ * TODO FIX ME
+ * @ingroup Eet_Node_Group
+ */
+EAPI int
+eet_data_node_write_cipher(Eet_File   *ef,
+                           const char *name,
+                           const char *cipher_key,
+                           Eet_Node   *node,
+                           int         compress);
+
+/* EXPERIMENTAL: THIS API MAY CHANGE IN THE FUTURE, USE IT ONLY IF YOU KNOW WHAT YOU ARE DOING. */
+
+/**
+ * @typedef Eet_Node_Walk
+ * Describes how to walk trees of #Eet_Node.
+ */
+typedef struct _Eet_Node_Walk   Eet_Node_Walk;
+
+/**
+ * @struct _Eet_Node_Walk
+ * Describes how to walk trees of #Eet_Node.
+ */
+struct _Eet_Node_Walk
+{
+   void *(*struct_alloc) (const char *type, void *user_data);
+   void  (*struct_add) (void *parent, const char *name, void *child, void *user_data);
+   void *(*array) (Eina_Bool variable, const char *name, int count, void *user_data);
+   void  (*insert) (void *array, int index, void *child, void *user_data);
+   void *(*list) (const char *name, void *user_data);
+   void  (*append) (void *list, void *child, void *user_data);
+   void *(*hash) (void *parent, const char *name, const char *key, void *value, void *user_data);
+   void *(*simple) (int type, Eet_Node_Data *data, void *user_data);
+};
+
+EAPI void *
+eet_node_walk(void          *parent,
+              const char    *name,
+              Eet_Node      *root,
+              Eet_Node_Walk *cb,
+              void          *user_data);
+
+/*******/
+
+/**
+ * @defgroup Eet_Connection_Group Helper function to use eet over a network link
+ *
+ * Function that reconstruct and prepare packet of @ref Eet_Data_Group to be send.
+ *
+ */
+
+/**
+ * @typedef Eet_Connection
+ * Opaque handle to track paquet for a specific connection.
+ *
+ * @ingroup Eet_Connection_Group
+ */
+typedef struct _Eet_Connection   Eet_Connection;
+
+/**
+ * @typedef Eet_Read_Cb
+ * Called back when an @ref Eet_Data_Group has been received completly and could be used.
+ *
+ * @ingroup Eet_Connection_Group
+ */
+typedef Eina_Bool Eet_Read_Cb (const void *eet_data, size_t size, void *user_data);
+
+/**
+ * @typedef Eet_Write_Cb
+ * Called back when a packet containing @ref Eet_Data_Group data is ready to be send.
+ *
+ * @ingroup Eet_Connection_Group
+ */
+typedef Eina_Bool Eet_Write_Cb (const void *data, size_t size, void *user_data);
+
+/**
+ * Instanciate a new connection to track.
+ * @oaram eet_read_cb Function to call when one Eet_Data packet has been fully assemble.
+ * @param eet_write_cb Function to call when one Eet_Data packet is ready to be send over the wire.
+ * @param user_data Pointer provided to both functions to be used as a context handler.
+ * @return NULL on failure, or a valid Eet_Connection handler.
+ *
+ * For every connection to track you will need a separate Eet_Connection provider.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Connection_Group
+ */
+EAPI Eet_Connection *
+eet_connection_new(Eet_Read_Cb  *eet_read_cb,
+                   Eet_Write_Cb *eet_write_cb,
+                   const void   *user_data);
+
+/**
+ * Process a raw packet received over the link
+ * @oaram conn Connection handler to track.
+ * @param data Raw data packet.
+ * @param size The size of that packet.
+ * @return 0 on complete success, any other value indicate where in the stream it got wrong (It could be before that packet).
+ *
+ * Every time you receive a packet related to your connection, you should pass
+ * it to that function so that it could process and assemble packet has you
+ * receive it. It will automatically call Eet_Read_Cb when one is fully received.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Connection_Group
+ */
+EAPI int
+eet_connection_received(Eet_Connection *conn,
+                        const void     *data,
+                        size_t          size);
+
+/**
+ * Convert a complex structure and prepare it to be send.
+ * @oaram conn Connection handler to track.
+ * @param edd The data descriptor to use when encoding.
+ * @param data_in The pointer to the struct to encode into data.
+ * @param cipher_key The key to use as cipher.
+ * @return EINA_TRUE if the data where correctly send, EINA_FALSE if they don't.
+ *
+ * This function serialize data_in with edd, assemble the packet and call
+ * Eet_Write_Cb when ready. The data passed Eet_Write_Cb are temporary allocated
+ * and will vanish just after the return of the callback.
+ *
+ * @see eet_data_descriptor_encode_cipher
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Connection_Group
+ */
+EAPI Eina_Bool
+eet_connection_send(Eet_Connection      *conn,
+                    Eet_Data_Descriptor *edd,
+                    const void          *data_in,
+                    const char          *cipher_key);
+
+/**
+ * Convert a Eet_Node tree and prepare it to be send.
+ * @oaram conn Connection handler to track.
+ * @param node The data tree to use when encoding.
+ * @param cipher_key The key to use as cipher.
+ * @return EINA_TRUE if the data where correctly send, EINA_FALSE if they don't.
+ *
+ * This function serialize node, assemble the packet and call
+ * Eet_Write_Cb when ready. The data passed Eet_Write_Cb are temporary allocated
+ * and will vanish just after the return of the callback.
+ *
+ * @see eet_data_node_encode_cipher
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Connection_Group
+ */
+EAPI Eina_Bool
+eet_connection_node_send(Eet_Connection *conn,
+                         Eet_Node       *node,
+                         const char     *cipher_key);
+
+/**
+ * Close a connection and lost its track.
+ * @oaram conn Connection handler to close.
+ * @param on_going Signal if a partial packet wasn't completed.
+ * @return the user_data passed to both callback.
+ *
+ * @since 1.2.4
+ * @ingroup Eet_Connection_Group
+ */
+EAPI void *
+eet_connection_close(Eet_Connection *conn,
+                     Eina_Bool      *on_going);
 
 /***************************************************************************/
 
 #ifdef __cplusplus
 }
-#endif
+#endif /* ifdef __cplusplus */
 
-#endif
+#endif /* ifndef _EET_H */
index be7c0eb..378d965 100644 (file)
@@ -1,66 +1,62 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifndef _EET_PRIVATE_H
 #define _EET_PRIVATE_H
 
 #include <Eina.h>
 
-typedef enum _Eet_Convert_Type Eet_Convert_Type;
+typedef enum _Eet_Convert_Type   Eet_Convert_Type;
 
 enum _Eet_Convert_Type
 {
-  EET_D_NOT_CONVERTED = 0,
-  EET_D_FLOAT = 1 << 1,
-  EET_D_DOUBLE = 1 << 2,
-  EET_D_FIXED_POINT = 1 << 4
+   EET_D_NOT_CONVERTED = 0,
+   EET_D_FLOAT         = 1 << 1,
+   EET_D_DOUBLE        = 1 << 2,
+   EET_D_FIXED_POINT   = 1 << 4
 };
 
-typedef struct _Eet_String              Eet_String;
+typedef struct _Eet_String   Eet_String;
 
 struct _Eet_String
 {
-  const char            *mmap;
-  char                  *str;
+   const char      *mmap;
+   char            *str;
 
-  int                    hash;
-  int                    len;
+   int              hash;
+   int              len;
 
-  int                    next;
-  int                    prev;
+   int              next;
+   int              prev;
 
-  float                f;
-  double               d;
-  Eina_F32p32           fp;
+   float            f;
+   double           d;
+   Eina_F32p32      fp;
 
-  Eet_Convert_Type      type;
+   Eet_Convert_Type type;
 };
 struct _Eet_Dictionary
 {
-  Eet_String   *all;
+   Eet_String *all;
 
-  int           size;
-  int           offset;
+   int         size;
+   int         offset;
 
-  int           hash[256];
+   int         hash[256];
 
-  int           count;
-  int           total;
+   int         count;
+   int         total;
 
-  const char   *start;
-  const char   *end;
+   const char *start;
+   const char *end;
 };
 
 struct _Eet_Node
 {
-   int         type;
-   int         count;
-   const char *name;
-   const char *key;
-   Eet_Node   *values;
-   Eet_Node   *next;
-   Eet_Node   *parent;
+   int           type;
+   int           count;
+   const char   *name;
+   const char   *key;
+   Eet_Node     *values;
+   Eet_Node     *next;
+   Eet_Node     *parent;
    Eet_Node_Data data;
 };
 
@@ -76,67 +72,93 @@ extern int _eet_log_dom_global;
  */
 #ifdef EET_DEFAULT_LOG_COLOR
 # undef EET_DEFAULT_LOG_COLOR
-#endif
+#endif /* ifdef EET_DEFAULT_LOG_COLOR */
 #define EET_DEFAULT_LOG_COLOR EINA_COLOR_CYAN
 #ifdef ERR
 # undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_eet_log_dom_global, __VA_ARGS__)
+#endif /* ifdef ERR */
+#define ERR(...)  EINA_LOG_DOM_ERR(_eet_log_dom_global, __VA_ARGS__)
 #ifdef DBG
 # undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_eet_log_dom_global, __VA_ARGS__)
+#endif /* ifdef DBG */
+#define DBG(...)  EINA_LOG_DOM_DBG(_eet_log_dom_global, __VA_ARGS__)
 #ifdef INF
 # undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_eet_log_dom_global, __VA_ARGS__)
+#endif /* ifdef INF */
+#define INF(...)  EINA_LOG_DOM_INFO(_eet_log_dom_global, __VA_ARGS__)
 #ifdef WRN
 # undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_eet_log_dom_global, __VA_ARGS__)
+#endif /* ifdef WRN */
+#define WRN(...)  EINA_LOG_DOM_WARN(_eet_log_dom_global, __VA_ARGS__)
 #ifdef CRIT
 # undef CRIT
-#endif
+#endif /* ifdef CRIT */
 #define CRIT(...) EINA_LOG_DOM_CRIT(_eet_log_dom_global, __VA_ARGS__)
 
-Eet_Dictionary  *eet_dictionary_add(void);
-void             eet_dictionary_free(Eet_Dictionary *ed);
-int              eet_dictionary_string_add(Eet_Dictionary *ed, const char *string);
-int              eet_dictionary_string_get_size(const Eet_Dictionary *ed, int index);
-const char      *eet_dictionary_string_get_char(const Eet_Dictionary *ed, int index);
-Eina_Bool        eet_dictionary_string_get_float(const Eet_Dictionary *ed, int index, float *result);
-Eina_Bool        eet_dictionary_string_get_double(const Eet_Dictionary *ed, int index, double *result);
-Eina_Bool        eet_dictionary_string_get_fp(const Eet_Dictionary *ed, int index, Eina_F32p32 *result);
-int              eet_dictionary_string_get_hash(const Eet_Dictionary *ed, int index);
-
-int   _eet_hash_gen(const char *key, int hash_size);
-
-const void* eet_identity_check(const void *data_base, unsigned int data_length,
-                              void **sha1, int *sha1_length,
-                              const void *signature_base, unsigned int signature_length,
-                              const void **raw_signature_base, unsigned int *raw_signature_length,
-                              int *x509_length);
-void *eet_identity_compute_sha1(const void *data_base, unsigned int data_length,
-                               int *sha1_length);
-Eet_Error eet_cipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length);
-Eet_Error eet_decipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length);
-Eet_Error eet_identity_sign(FILE *fp, Eet_Key *key);
-void eet_identity_unref(Eet_Key *key);
-void eet_identity_ref(Eet_Key *key);
-
-void eet_node_shutdown(void);
-int eet_node_init(void);
-Eet_Node *eet_node_new(void);
-void eet_node_free(Eet_Node *node);
+Eet_Dictionary *    eet_dictionary_add(void);
+void                eet_dictionary_free(Eet_Dictionary *ed);
+int                 eet_dictionary_string_add(Eet_Dictionary *ed,
+                                              const char     *string);
+int                 eet_dictionary_string_get_size(const Eet_Dictionary *ed,
+                                                   int                   index);
+const char *        eet_dictionary_string_get_char(const Eet_Dictionary *ed,
+                                                   int                   index);
+Eina_Bool           eet_dictionary_string_get_float(const Eet_Dictionary *ed,
+                                                    int                   index,
+                                                    float                *result);
+Eina_Bool           eet_dictionary_string_get_double(const Eet_Dictionary *ed,
+                                                     int                   index,
+                                                     double               *result);
+Eina_Bool           eet_dictionary_string_get_fp(const Eet_Dictionary *ed,
+                                                 int                   index,
+                                                 Eina_F32p32          *result);
+int                 eet_dictionary_string_get_hash(const Eet_Dictionary *ed,
+                                                   int                   index);
+
+int                 _eet_hash_gen(const char *key, int hash_size);
+
+const void *        eet_identity_check(const void   *data_base,
+                                       unsigned int  data_length,
+                                       void        **sha1,
+                                       int          *sha1_length,
+                                       const void   *signature_base,
+                                       unsigned int  signature_length,
+                                       const void  **raw_signature_base,
+                                       unsigned int *raw_signature_length,
+                                       int          *x509_length);
+void *         eet_identity_compute_sha1(const void  *data_base,
+                                         unsigned int data_length,
+                                         int         *sha1_length);
+Eet_Error      eet_cipher(const void   *data,
+                          unsigned int  size,
+                          const char   *key,
+                          unsigned int  length,
+                          void        **result,
+                          unsigned int *result_length);
+Eet_Error      eet_decipher(const void   *data,
+                            unsigned int  size,
+                            const char   *key,
+                            unsigned int  length,
+                            void        **result,
+                            unsigned int *result_length);
+Eet_Error      eet_identity_sign(FILE    *fp,
+                                 Eet_Key *key);
+void           eet_identity_unref(Eet_Key *key);
+void           eet_identity_ref(Eet_Key *key);
+
+void           eet_node_shutdown(void);
+int            eet_node_init(void);
+Eet_Node *     eet_node_new(void);
+void           eet_node_free(Eet_Node *node);
 
 #ifndef PATH_MAX
 # define PATH_MAX 4096
-#endif
+#endif /* ifndef PATH_MAX */
 
 #ifdef DNDEBUG
-# define EET_ASSERT(Test, Do) if (Test == 0) Do;
-#else
-# define EET_ASSERT(Test, Do) if (Test == 0) abort();
-#endif
+# define EET_ASSERT(Test, Do) if (Test == 0) {Do; }
+#else /* ifdef DNDEBUG */
+# define EET_ASSERT(Test, Do) if (Test == 0) {abort(); }
+#endif /* ifdef DNDEBUG */
 
-#endif
+#endif /* ifndef _EET_PRIVATE_H */
index 388b73d..9f8bcab 100644 (file)
@@ -16,7 +16,8 @@ AM_CPPFLAGS = \
 @OPENSSL_CFLAGS@ \
 @GNUTLS_CFLAGS@
 
-include_HEADERS = Eet.h
+includes_HEADERS = Eet.h
+includesdir = $(includedir)/eet-@VMAJ@
 
 lib_LTLIBRARIES = libeet.la
 
index a4e9880..7821759 100644 (file)
@@ -1,6 +1,6 @@
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #ifdef HAVE_ALLOCA_H
 # include <alloca.h>
 #elif defined _MSC_VER
 # include <malloc.h>
 # define alloca _alloca
-#else
+#else /* ifdef HAVE_ALLOCA_H */
 # include <stddef.h>
 # ifdef  __cplusplus
 extern "C"
-# endif
-void *alloca (size_t);
-#endif
+# endif /* ifdef  __cplusplus */
+void *    alloca (size_t);
+#endif /* ifdef HAVE_ALLOCA_H */
 
 #include <stdio.h>
 #include <string.h>
@@ -27,17 +27,17 @@ void *alloca (size_t);
 
 #ifndef _MSC_VER
 # include <unistd.h>
-#endif
+#endif /* ifndef _MSC_VER */
 
 #ifdef HAVE_NETINET_IN_H
 # include <netinet/in.h>
-#endif
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef HAVE_SIGNATURE
 # ifdef HAVE_GNUTLS
 #  include <gnutls/gnutls.h>
 #  include <gnutls/x509.h>
-# else
+# else /* ifdef HAVE_GNUTLS */
 #  include <openssl/rsa.h>
 #  include <openssl/objects.h>
 #  include <openssl/err.h>
@@ -47,23 +47,23 @@ void *alloca (size_t);
 #  include <openssl/evp.h>
 #  include <openssl/x509.h>
 #  include <openssl/pem.h>
-# endif
-#endif
+# endif /* ifdef HAVE_GNUTLS */
+#endif /* ifdef HAVE_SIGNATURE */
 
 #ifdef HAVE_OPENSSL
-#  include <openssl/sha.h>
-#endif
+# include <openssl/sha.h>
+#endif /* ifdef HAVE_OPENSSL */
 
 #ifdef HAVE_CIPHER
 # ifdef HAVE_GNUTLS
 #  include <gnutls/x509.h>
 #  include <gcrypt.h>
-# else
+# else /* ifdef HAVE_GNUTLS */
 #  include <openssl/evp.h>
 #  include <openssl/hmac.h>
 #  include <openssl/rand.h>
-# endif
-#endif
+# endif /* ifdef HAVE_GNUTLS */
+#endif /* ifdef HAVE_CIPHER */
 
 #include "Eet.h"
 #include "Eet_private.h"
@@ -71,327 +71,418 @@ void *alloca (size_t);
 #define EET_MAGIC_SIGN 0x1ee74271
 
 #ifdef HAVE_GNUTLS
-# define MAX_KEY_LEN 32
-# define MAX_IV_LEN 16
-#else
-# define MAX_KEY_LEN EVP_MAX_KEY_LENGTH
-# define MAX_IV_LEN EVP_MAX_IV_LENGTH
-#endif
+# define MAX_KEY_LEN   32
+# define MAX_IV_LEN    16
+#else /* ifdef HAVE_GNUTLS */
+# define MAX_KEY_LEN   EVP_MAX_KEY_LENGTH
+# define MAX_IV_LEN    EVP_MAX_IV_LENGTH
+#endif /* ifdef HAVE_GNUTLS */
 
 #ifdef HAVE_CIPHER
 # ifdef HAVE_GNUTLS
-static Eet_Error eet_hmac_sha1(const void *key, size_t key_len, const void *data, size_t data_len, unsigned char *res);
-# endif
-static Eet_Error eet_pbkdf2_sha1(const char *key, int key_len, const unsigned char *salt, unsigned int salt_len, int iter, unsigned char *res, int res_len);
-#endif
+static Eet_Error      eet_hmac_sha1(const void    *key,
+                                    size_t         key_len,
+                                    const void    *data,
+                                    size_t         data_len,
+                                    unsigned char *res);
+# endif /* ifdef HAVE_GNUTLS */
+static Eet_Error      eet_pbkdf2_sha1(const char          *key,
+                                      int                  key_len,
+                                      const unsigned char *salt,
+                                      unsigned int         salt_len,
+                                      int                  iter,
+                                      unsigned char       *res,
+                                      int                  res_len);
+#endif /* ifdef HAVE_CIPHER */
 
 struct _Eet_Key
 {
-   int          references;
+   int                   references;
 #ifdef HAVE_SIGNATURE
 # ifdef HAVE_GNUTLS
-   gnutls_x509_crt_t           certificate;
-   gnutls_x509_privkey_t       private_key;
-# else
-   X509               *certificate;
-   EVP_PKEY    *private_key;
-# endif
-#endif
+   gnutls_x509_crt_t     certificate;
+   gnutls_x509_privkey_t private_key;
+# else /* ifdef HAVE_GNUTLS */
+   X509                 *certificate;
+   EVP_PKEY             *private_key;
+# endif /* ifdef HAVE_GNUTLS */
+#endif /* ifdef HAVE_SIGNATURE */
 };
 
-EAPI Eet_Key*
-eet_identity_open(const char *certificate_file, const char *private_key_file, Eet_Key_Password_Callback cb)
+EAPI Eet_Key *
+eet_identity_open(const char               *certificate_file,
+                  const char               *private_key_file,
+                  Eet_Key_Password_Callback cb)
 {
 #ifdef HAVE_SIGNATURE
-  /* Signature declarations */
-  Eet_Key *key = NULL;
-  FILE *fp = NULL;
+   /* Signature declarations */
+   Eet_Key *key = NULL;
+   FILE *fp = NULL;
 # ifdef HAVE_GNUTLS
-  /* Gnutls private declarations */
-  int fd = -1;
-  struct stat st;
-  void *data = NULL;
-  gnutls_datum_t load_file = { NULL, 0 };
-  char pass[1024];
-
-  /* Init */
-  if (!(key = malloc(sizeof(Eet_Key)))) goto on_error;
-  key->references = 1;
-
-  if (gnutls_x509_crt_init(&(key->certificate))) goto on_error;
-  if (gnutls_x509_privkey_init(&(key->private_key))) goto on_error;
-
-  /* Mmap certificate_file */
-  if (!(fp = fopen(certificate_file, "r"))) goto on_error;
-  if ((fd = fileno(fp)) == -1) goto on_error;
-  if (fstat(fd, &st)) goto on_error;
-  if ((data = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) goto on_error;
-
-  /* Import the certificate in Eet_Key structure */
-  load_file.data = data;
-  load_file.size = st.st_size;
-  if (gnutls_x509_crt_import(key->certificate, &load_file, GNUTLS_X509_FMT_PEM) < 0)
-    goto on_error;
-  if (munmap(data, st.st_size)) goto on_error;
-
-  /* Reset values */
-  fclose(fp);
-  fp = NULL;
-  data = NULL;
-  load_file.data = NULL;
-  load_file.size = 0;
-
-  /* Mmap private_key_file */
-  if (!(fp = fopen(private_key_file, "r"))) goto on_error;
-  if ((fd = fileno(fp)) == -1) goto on_error;
-  if (fstat(fd, &st)) goto on_error;
-  if ((data = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) goto on_error;
-
-  /* Import the private key in Eet_Key structure */
-  load_file.data = data;
-  load_file.size = st.st_size;
-  /* Try to directly import the PEM encoded private key */
-  if (gnutls_x509_privkey_import(key->private_key, &load_file, GNUTLS_X509_FMT_PEM) < 0)
-    {
-      /* Else ask for the private key pass */
-      if (cb && cb(pass, 1024, 0, NULL))
-       {
-         /* If pass then try to decode the pkcs 8 private key */
-         if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, pass, 0))
-           goto on_error;
-       }
-      else
-       {
-         /* Else try to import the pkcs 8 private key without pass */
-         if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file, GNUTLS_X509_FMT_PEM, NULL, 1))
-           goto on_error;
-       }
-    }
-  if (munmap(data, st.st_size)) goto on_error;
-  fclose(fp);
-
-  return key;
-
- on_error:
-  if (fp) fclose(fp);
-  if (key)
-    {
-      if (key->certificate) gnutls_x509_crt_deinit(key->certificate);
-      if (key->private_key) gnutls_x509_privkey_deinit(key->private_key);
-      free(key);
-    }
-  if (data) munmap(data, st.st_size);
-# else
-  /* Openssl private declarations */
-  EVP_PKEY *pkey = NULL;
-  X509 *cert = NULL;
-
-  /* Load the X509 certificate in memory. */
-  fp = fopen(certificate_file, "r");
-  if (!fp) return NULL;
-  cert = PEM_read_X509(fp, NULL, NULL, NULL);
-  fclose(fp);
-  if (!cert) goto on_error;
-
-  /* Check the presence of the public key. Just in case. */
-  pkey = X509_get_pubkey(cert);
-  if (!pkey) goto on_error;
-
-  /* Load the private key in memory. */
-  fp = fopen(private_key_file, "r");
-  if (!fp) goto on_error;
-  pkey = PEM_read_PrivateKey(fp, NULL, cb, NULL);
-  fclose(fp);
-  if (!pkey) goto on_error;
-
-  /* Load the certificate and the private key in Eet_Key structure */
-  key = malloc(sizeof(Eet_Key));
-  if (!key) goto on_error;
-  key->references = 1;
-  key->certificate = cert;
-  key->private_key = pkey;
-
-  return key;
-
- on_error:
-  if (cert) X509_free(cert);
-  if (pkey) EVP_PKEY_free(pkey);
-# endif
-#endif
-  return NULL;
-}
+   /* Gnutls private declarations */
+   int fd = -1;
+   struct stat st;
+   void *data = NULL;
+   gnutls_datum_t load_file = { NULL, 0 };
+   char pass[1024];
+
+   /* Init */
+   if (!(key = malloc(sizeof(Eet_Key))))
+      goto on_error;
+
+   key->references = 1;
+
+   if (gnutls_x509_crt_init(&(key->certificate)))
+      goto on_error;
+
+   if (gnutls_x509_privkey_init(&(key->private_key)))
+      goto on_error;
+
+   /* Mmap certificate_file */
+   if (!(fp = fopen(certificate_file, "r")))
+      goto on_error;
+
+   if ((fd = fileno(fp)) == -1)
+      goto on_error;
+
+   if (fstat(fd, &st))
+      goto on_error;
+
+   if ((data =
+           mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
+      goto on_error;
+
+   /* Import the certificate in Eet_Key structure */
+   load_file.data = data;
+   load_file.size = st.st_size;
+   if (gnutls_x509_crt_import(key->certificate, &load_file,
+                              GNUTLS_X509_FMT_PEM) < 0)
+      goto on_error;
+
+   if (munmap(data, st.st_size))
+      goto on_error;
+
+   /* Reset values */
+   fclose(fp);
+   fp = NULL;
+   data = NULL;
+   load_file.data = NULL;
+   load_file.size = 0;
+
+   /* Mmap private_key_file */
+   if (!(fp = fopen(private_key_file, "r")))
+      goto on_error;
+
+   if ((fd = fileno(fp)) == -1)
+      goto on_error;
+
+   if (fstat(fd, &st))
+      goto on_error;
+
+   if ((data =
+           mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
+      goto on_error;
+
+   /* Import the private key in Eet_Key structure */
+   load_file.data = data;
+   load_file.size = st.st_size;
+   /* Try to directly import the PEM encoded private key */
+   if (gnutls_x509_privkey_import(key->private_key, &load_file,
+                                  GNUTLS_X509_FMT_PEM) < 0)
+     {
+        /* Else ask for the private key pass */
+        if (cb && cb(pass, 1024, 0, NULL))
+          {
+             /* If pass then try to decode the pkcs 8 private key */
+             if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file,
+                                                  GNUTLS_X509_FMT_PEM, pass, 0))
+                goto on_error;
+          }
+        else
+        /* Else try to import the pkcs 8 private key without pass */
+        if (gnutls_x509_privkey_import_pkcs8(key->private_key, &load_file,
+                                             GNUTLS_X509_FMT_PEM, NULL, 1))
+           goto on_error;
+     }
+
+   if (munmap(data, st.st_size))
+      goto on_error;
+
+   fclose(fp);
+
+   return key;
+
+on_error:
+   if (fp)
+      fclose(fp);
+
+   if (key)
+     {
+        if (key->certificate)
+           gnutls_x509_crt_deinit(key->certificate);
+
+        if (key->private_key)
+           gnutls_x509_privkey_deinit(key->private_key);
+
+        free(key);
+     }
+
+   if (data)
+      munmap(data, st.st_size);
+
+# else /* ifdef HAVE_GNUTLS */
+   /* Openssl private declarations */
+   EVP_PKEY *pkey = NULL;
+   X509 *cert = NULL;
+
+   /* Load the X509 certificate in memory. */
+   fp = fopen(certificate_file, "r");
+   if (!fp)
+      return NULL;
+
+   cert = PEM_read_X509(fp, NULL, NULL, NULL);
+   fclose(fp);
+   if (!cert)
+      goto on_error;
+
+   /* Check the presence of the public key. Just in case. */
+   pkey = X509_get_pubkey(cert);
+   if (!pkey)
+      goto on_error;
+
+   /* Load the private key in memory. */
+   fp = fopen(private_key_file, "r");
+   if (!fp)
+      goto on_error;
+
+   pkey = PEM_read_PrivateKey(fp, NULL, cb, NULL);
+   fclose(fp);
+   if (!pkey)
+      goto on_error;
+
+   /* Load the certificate and the private key in Eet_Key structure */
+   key = malloc(sizeof(Eet_Key));
+   if (!key)
+      goto on_error;
+
+   key->references = 1;
+   key->certificate = cert;
+   key->private_key = pkey;
+
+   return key;
+
+on_error:
+   if (cert)
+      X509_free(cert);
+
+   if (pkey)
+      EVP_PKEY_free(pkey);
+
+# endif /* ifdef HAVE_GNUTLS */
+#endif /* ifdef HAVE_SIGNATURE */
+   return NULL;
+} /* eet_identity_open */
 
 EAPI void
 eet_identity_close(Eet_Key *key)
 {
 #ifdef HAVE_SIGNATURE
-  if (!key || (key->references > 0)) return ;
+   if (!key || (key->references > 0))
+      return;
+
 # ifdef HAVE_GNUTLS
-  gnutls_x509_crt_deinit(key->certificate);
-  gnutls_x509_privkey_deinit(key->private_key);
-# else
-  X509_free(key->certificate);
-  EVP_PKEY_free(key->private_key);
-# endif
-  free(key);
-#endif
-}
+   gnutls_x509_crt_deinit(key->certificate);
+   gnutls_x509_privkey_deinit(key->private_key);
+# else /* ifdef HAVE_GNUTLS */
+   X509_free(key->certificate);
+   EVP_PKEY_free(key->private_key);
+# endif /* ifdef HAVE_GNUTLS */
+   free(key);
+#endif /* ifdef HAVE_SIGNATURE */
+} /* eet_identity_close */
 
 EAPI void
-eet_identity_print(Eet_Key *key, FILE *out)
+eet_identity_print(Eet_Key *key,
+                   FILE    *out)
 {
 #ifdef HAVE_SIGNATURE
 # ifdef HAVE_GNUTLS
-  const char   *names[6] = {
-    "Modulus",
-    "Public exponent",
-    "Private exponent",
-    "First prime",
-    "Second prime",
-    "Coefficient"
-  };
-  int err = 0;
-  gnutls_datum_t data = { NULL, 0 };
-  gnutls_datum_t rsa_raw[6];
-  size_t size = 128;
-  char *res = NULL;
-  char buf[33];
-  unsigned int i, j;
-
-  if (!key) return ;
-
-  if (key->private_key)
-    {
-      if (gnutls_x509_privkey_export_rsa_raw(key->private_key,
-                                            rsa_raw + 0,  /* Modulus */
-                                            rsa_raw + 1,  /* Public exponent */
-                                            rsa_raw + 2,  /* Private exponent */
-                                            rsa_raw + 3,  /* First prime */
-                                            rsa_raw + 4,  /* Second prime */
-                                            rsa_raw + 5)) /* Coefficient */
-       goto on_error;
-      if (!(res = malloc(size))) goto on_error;
-
-      fprintf(out, "Private Key:\n");
-      buf[32] = '\0';
-
-      for (i = 0; i < 6; i++)
-       {
-         while ((err = gnutls_hex_encode(rsa_raw + i, res, &size)) == GNUTLS_E_SHORT_MEMORY_BUFFER)
-           {
-             size += 128;
-             if (!(res = realloc(res, size))) goto on_error;
-           }
-         if (err) goto on_error;
-
-         fprintf(out, "\t%s:\n", names[i]);
-         for (j = 0; strlen(res) > j; j += 32)
-           {
-             snprintf(buf, 32, "%s", res + j);
-             fprintf(out, "\t\t%s\n", buf);
-           }
-       }
+   const char *names[6] = {
+      "Modulus",
+      "Public exponent",
+      "Private exponent",
+      "First prime",
+      "Second prime",
+      "Coefficient"
+   };
+   int err = 0;
+   gnutls_datum_t data = { NULL, 0 };
+   gnutls_datum_t rsa_raw[6];
+   size_t size = 128;
+   char *res = NULL;
+   char buf[33];
+   unsigned int i, j;
+
+   if (!key)
+      return;
+
+   if (key->private_key)
+     {
+        if (gnutls_x509_privkey_export_rsa_raw(key->private_key,
+                                               rsa_raw + 0, /* Modulus */
+                                               rsa_raw + 1, /* Public exponent */
+                                               rsa_raw + 2, /* Private exponent */
+                                               rsa_raw + 3, /* First prime */
+                                               rsa_raw + 4, /* Second prime */
+                                               rsa_raw + 5)) /* Coefficient */
+           goto on_error;
+
+        if (!(res = malloc(size)))
+           goto on_error;
+
+        fprintf(out, "Private Key:\n");
+        buf[32] = '\0';
+
+        for (i = 0; i < 6; i++)
+          {
+             while ((err = gnutls_hex_encode(rsa_raw + i, res, &size)) ==
+                    GNUTLS_E_SHORT_MEMORY_BUFFER)
+               {
+                  size += 128;
+                  if (!(res = realloc(res, size)))
+                     goto on_error;
+               }
+             if (err)
+                goto on_error;
+
+             fprintf(out, "\t%s:\n", names[i]);
+             for (j = 0; strlen(res) > j; j += 32)
+               {
+                  snprintf(buf, 32, "%s", res + j);
+                  fprintf(out, "\t\t%s\n", buf);
+               }
+          }
+        free(res);
+        res = NULL;
+     }
+
+   if (key->certificate)
+     {
+        fprintf(out, "Public certificate:\n");
+        if (gnutls_x509_crt_print(key->certificate, GNUTLS_X509_CRT_FULL,
+                                  &data))
+           goto on_error;
+
+        fprintf(out, "%s\n", data.data);
+        gnutls_free(data.data);
+        data.data = NULL;
+     }
+
+on_error:
+   if (res)
       free(res);
-      res = NULL;
-    }
-
-  if (key->certificate)
-    {
-      fprintf(out, "Public certificate:\n");
-      if (gnutls_x509_crt_print(key->certificate, GNUTLS_X509_CRT_FULL, &data)) goto on_error;
-      fprintf(out, "%s\n", data.data);
+
+   if (data.data)
       gnutls_free(data.data);
-      data.data = NULL;
-    }
 
- on_error:
-  if (res) free(res);
-  if (data.data) gnutls_free(data.data);
-  return ;
-# else
-  RSA *rsa;
-  DSA *dsa;
-  DH *dh;
-
-  if (!key) return ;
-
-  rsa = EVP_PKEY_get1_RSA(key->private_key);
-  if (rsa)
-    {
-      fprintf(out, "Private key (RSA):\n");
-      RSA_print_fp(out, rsa, 0);
-    }
-
-  dsa = EVP_PKEY_get1_DSA(key->private_key);
-  if (dsa)
-    {
-      fprintf(out, "Private key (DSA):\n");
-      DSA_print_fp(out, dsa, 0);
-    }
-
-  dh = EVP_PKEY_get1_DH(key->private_key);
-  if (dh)
-    {
-      fprintf(out, "Private key (DH):\n");
-      DHparams_print_fp(out, dh);
-    }
-
-  fprintf(out, "Public certificate:\n");
-  X509_print_fp(out, key->certificate);
-# endif
-#else
-  ERR("You need to compile signature support in EET.");
-#endif
-}
+   return;
+# else /* ifdef HAVE_GNUTLS */
+   RSA *rsa;
+   DSA *dsa;
+   DH *dh;
+
+   if (!key)
+      return;
+
+   rsa = EVP_PKEY_get1_RSA(key->private_key);
+   if (rsa)
+     {
+        fprintf(out, "Private key (RSA):\n");
+        RSA_print_fp(out, rsa, 0);
+     }
+
+   dsa = EVP_PKEY_get1_DSA(key->private_key);
+   if (dsa)
+     {
+        fprintf(out, "Private key (DSA):\n");
+        DSA_print_fp(out, dsa, 0);
+     }
+
+   dh = EVP_PKEY_get1_DH(key->private_key);
+   if (dh)
+     {
+        fprintf(out, "Private key (DH):\n");
+        DHparams_print_fp(out, dh);
+     }
+
+   fprintf(out, "Public certificate:\n");
+   X509_print_fp(out, key->certificate);
+# endif /* ifdef HAVE_GNUTLS */
+#else /* ifdef HAVE_SIGNATURE */
+   ERR("You need to compile signature support in EET.");
+#endif /* ifdef HAVE_SIGNATURE */
+} /* eet_identity_print */
 
 void
 eet_identity_ref(Eet_Key *key)
 {
-   if (key == NULL) return ;
+   if (key == NULL)
+      return;
+
    key->references++;
-}
+} /* eet_identity_ref */
 
 void
 eet_identity_unref(Eet_Key *key)
 {
-   if (key == NULL) return ;
+   if (key == NULL)
+      return;
+
    key->references--;
    eet_identity_close(key);
-}
+} /* eet_identity_unref */
 
 void *
-eet_identity_compute_sha1(const void *data_base, unsigned int data_length,
-                         int *sha1_length)
+eet_identity_compute_sha1(const void  *data_base,
+                          unsigned int data_length,
+                          int         *sha1_length)
 {
    void *result;
 
 #ifdef HAVE_SIGNATURE
-#  ifdef HAVE_GNUTLS
+# ifdef HAVE_GNUTLS
    result = malloc(gcry_md_get_algo_dlen(GCRY_MD_SHA1));
-   if (!result) return NULL;
+   if (!result)
+      return NULL;
 
    gcry_md_hash_buffer(GCRY_MD_SHA1, result, data_base, data_length);
-   if (sha1_length) *sha1_length = gcry_md_get_algo_dlen(GCRY_MD_SHA1);
-#  else
-#   ifdef HAVE_OPENSSL
+   if (sha1_length)
+      *sha1_length = gcry_md_get_algo_dlen(GCRY_MD_SHA1);
+
+# else /* ifdef HAVE_GNUTLS */
+#  ifdef HAVE_OPENSSL
    result = malloc(SHA_DIGEST_LENGTH);
-   if (!result) return NULL;
+   if (!result)
+      return NULL;
 
    SHA1(data_base, data_length, result);
-   if (sha1_length) *sha1_length = SHA_DIGEST_LENGTH;
-#   else
+   if (sha1_length)
+      *sha1_length = SHA_DIGEST_LENGTH;
+
+#  else /* ifdef HAVE_OPENSSL */
    result = NULL;
-#   endif
-#  endif
-#else
+#  endif /* ifdef HAVE_OPENSSL */
+# endif /* ifdef HAVE_GNUTLS */
+#else /* ifdef HAVE_SIGNATURE */
    result = NULL;
-#endif
+#endif /* ifdef HAVE_SIGNATURE */
 
    return result;
-}
+} /* eet_identity_compute_sha1 */
 
 Eet_Error
-eet_identity_sign(FILE *fp, Eet_Key *key)
+eet_identity_sign(FILE    *fp,
+                  Eet_Key *key)
 {
 #ifdef HAVE_SIGNATURE
    Eet_Error err = EET_ERROR_NONE;
@@ -405,132 +496,166 @@ eet_identity_sign(FILE *fp, Eet_Key *key)
    gnutls_datum_t datum = { NULL, 0 };
    size_t sign_len = 0;
    size_t cert_len = 0;
-# else
+# else /* ifdef HAVE_GNUTLS */
    EVP_MD_CTX md_ctx;
    unsigned int sign_len = 0;
    int cert_len = 0;
-# endif
+# endif /* ifdef HAVE_GNUTLS */
 
    /* A few check and flush pending write. */
    if (!fp || !key || !key->certificate || !key->private_key)
-     return EET_ERROR_BAD_OBJECT;
+      return EET_ERROR_BAD_OBJECT;
 
    /* Get the file size. */
    fd = fileno(fp);
-   if (fd < 0) return EET_ERROR_BAD_OBJECT;
-   if (fstat(fd, &st_buf) < 0) return EET_ERROR_MMAP_FAILED;
+   if (fd < 0)
+      return EET_ERROR_BAD_OBJECT;
+
+   if (fstat(fd, &st_buf) < 0)
+      return EET_ERROR_MMAP_FAILED;
 
    /* Map the file in memory. */
    data = mmap(NULL, st_buf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-   if (data == MAP_FAILED) return EET_ERROR_MMAP_FAILED;
+   if (data == MAP_FAILED)
+      return EET_ERROR_MMAP_FAILED;
 
 # ifdef HAVE_GNUTLS
    datum.data = data;
    datum.size = st_buf.st_size;
 
    /* Get the signature length */
-   if (gnutls_x509_privkey_sign_data(key->private_key, GNUTLS_DIG_SHA1, 0, &datum, sign, &sign_len) &&
+   if (gnutls_x509_privkey_sign_data(key->private_key, GNUTLS_DIG_SHA1, 0,
+                                     &datum, sign, &sign_len) &&
        !sign_len)
      {
-       err = EET_ERROR_SIGNATURE_FAILED;
-       goto on_error;
+        err = EET_ERROR_SIGNATURE_FAILED;
+        goto on_error;
      }
 
    /* Get the signature */
    sign = malloc(sign_len);
-   if (!sign || gnutls_x509_privkey_sign_data(key->private_key, GNUTLS_DIG_SHA1, 0, &datum, sign, &sign_len))
+   if (!sign ||
+       gnutls_x509_privkey_sign_data(key->private_key, GNUTLS_DIG_SHA1, 0,
+                                     &datum,
+                                     sign, &sign_len))
      {
-       if (!sign) err = EET_ERROR_OUT_OF_MEMORY;
-       else err = EET_ERROR_SIGNATURE_FAILED;
-       goto on_error;
+        if (!sign)
+           err = EET_ERROR_OUT_OF_MEMORY;
+        else
+           err = EET_ERROR_SIGNATURE_FAILED;
+
+        goto on_error;
      }
 
    /* Get the certificate length */
-   if (gnutls_x509_crt_export(key->certificate, GNUTLS_X509_FMT_DER, cert, &cert_len) &&
+   if (gnutls_x509_crt_export(key->certificate, GNUTLS_X509_FMT_DER, cert,
+                              &cert_len) &&
        !cert_len)
      {
-       err = EET_ERROR_SIGNATURE_FAILED;
-       goto on_error;
+        err = EET_ERROR_SIGNATURE_FAILED;
+        goto on_error;
      }
 
    /* Get the certificate */
    cert = malloc(cert_len);
-   if (!cert || gnutls_x509_crt_export(key->certificate, GNUTLS_X509_FMT_DER, cert, &cert_len))
+   if (!cert ||
+       gnutls_x509_crt_export(key->certificate, GNUTLS_X509_FMT_DER, cert,
+                              &cert_len))
      {
-       if (!cert) err = EET_ERROR_OUT_OF_MEMORY;
-       else err = EET_ERROR_SIGNATURE_FAILED;
-       goto on_error;
+        if (!cert)
+           err = EET_ERROR_OUT_OF_MEMORY;
+        else
+           err = EET_ERROR_SIGNATURE_FAILED;
+
+        goto on_error;
      }
-# else
+
+# else /* ifdef HAVE_GNUTLS */
    sign_len = EVP_PKEY_size(key->private_key);
    sign = malloc(sign_len);
    if (sign == NULL)
      {
-       err = EET_ERROR_OUT_OF_MEMORY;
-       goto on_error;
+        err = EET_ERROR_OUT_OF_MEMORY;
+        goto on_error;
      }
 
    /* Do the signature. */
    EVP_SignInit(&md_ctx, EVP_sha1());
    EVP_SignUpdate(&md_ctx, data, st_buf.st_size);
-   err = EVP_SignFinal(&md_ctx, sign, (unsigned int *)&sign_len, key->private_key);
+   err = EVP_SignFinal(&md_ctx,
+                       sign,
+                       (unsigned int *)&sign_len,
+                       key->private_key);
    if (err != 1)
      {
-       ERR_print_errors_fp(stdout);
-       err = EET_ERROR_SIGNATURE_FAILED;
-       goto on_error;
+        ERR_print_errors_fp(stdout);
+        err = EET_ERROR_SIGNATURE_FAILED;
+        goto on_error;
      }
 
    /* Give me the der (binary form for X509). */
    cert_len = i2d_X509(key->certificate, &cert);
    if (cert_len < 0)
      {
-       ERR_print_errors_fp(stdout);
-       err = EET_ERROR_X509_ENCODING_FAILED;
-       goto on_error;
+        ERR_print_errors_fp(stdout);
+        err = EET_ERROR_X509_ENCODING_FAILED;
+        goto on_error;
      }
-# endif
+
+# endif /* ifdef HAVE_GNUTLS */
    /* Append the signature at the end of the file. */
-   head[0] = (int) htonl ((unsigned int) EET_MAGIC_SIGN);
-   head[1] = (int) htonl ((unsigned int) sign_len);
-   head[2] = (int) htonl ((unsigned int) cert_len);
+   head[0] = (int)htonl ((unsigned int)EET_MAGIC_SIGN);
+   head[1] = (int)htonl ((unsigned int)sign_len);
+   head[2] = (int)htonl ((unsigned int)cert_len);
 
    if (fwrite(head, sizeof(head), 1, fp) != 1)
      {
-       err = EET_ERROR_WRITE_ERROR;
-       goto on_error;
+        err = EET_ERROR_WRITE_ERROR;
+        goto on_error;
      }
+
    if (fwrite(sign, sign_len, 1, fp) != 1)
      {
-       err = EET_ERROR_WRITE_ERROR;
-       goto on_error;
+        err = EET_ERROR_WRITE_ERROR;
+        goto on_error;
      }
+
    if (fwrite(cert, cert_len, 1, fp) != 1)
      {
-       err = EET_ERROR_WRITE_ERROR;
-       goto on_error;
+        err = EET_ERROR_WRITE_ERROR;
+        goto on_error;
      }
 
- on_error:
+on_error:
 # ifdef HAVE_GNUTLS
-   if (cert) free(cert);
-# else
-   if (cert) OPENSSL_free(cert);
-# endif
-   if (sign) free(sign);
+   if (cert)
+      free(cert);
+
+# else /* ifdef HAVE_GNUTLS */
+   if (cert)
+      OPENSSL_free(cert);
+
+# endif /* ifdef HAVE_GNUTLS */
+   if (sign)
+      free(sign);
+
    munmap(data, st_buf.st_size);
    return err;
-#else
+#else /* ifdef HAVE_SIGNATURE */
    return EET_ERROR_NOT_IMPLEMENTED;
-#endif
-}
-
-const void*
-eet_identity_check(const void *data_base, unsigned int data_length,
-                  void **sha1, int *sha1_length,
-                  const void *signature_base, unsigned int signature_length,
-                  const void **raw_signature_base, unsigned int *raw_signature_length,
-                  int *x509_length)
+#endif /* ifdef HAVE_SIGNATURE */
+} /* eet_identity_sign */
+
+const void *
+eet_identity_check(const void   *data_base,
+                   unsigned int  data_length,
+                   void        **sha1,
+                   int          *sha1_length,
+                   const void   *signature_base,
+                   unsigned int  signature_length,
+                   const void  **raw_signature_base,
+                   unsigned int *raw_signature_length,
+                   int          *x509_length)
 {
 #ifdef HAVE_SIGNATURE
    const int *header = signature_base;
@@ -541,7 +666,8 @@ eet_identity_check(const void *data_base, unsigned int data_length,
    int magic;
 
    /* At least the header size */
-   if (signature_length < sizeof(int) * 3) return NULL;
+   if (signature_length < sizeof(int) * 3)
+      return NULL;
 
    /* Get the header */
    magic = ntohl(header[0]);
@@ -549,8 +675,11 @@ eet_identity_check(const void *data_base, unsigned int data_length,
    cert_len = ntohl(header[2]);
 
    /* Verify the header */
-   if (magic != EET_MAGIC_SIGN) return NULL;
-   if (sign_len + cert_len + sizeof(int) * 3 > signature_length) return NULL;
+   if (magic != EET_MAGIC_SIGN)
+      return NULL;
+
+   if (sign_len + cert_len + sizeof(int) * 3 > signature_length)
+      return NULL;
 
    /* Update the signature and certificate pointer */
    sign = (unsigned char *)signature_base + sizeof(int) * 3;
@@ -564,7 +693,7 @@ eet_identity_check(const void *data_base, unsigned int data_length,
    unsigned char *hash;
    gcry_md_hd_t md;
    int err;
-#  endif
+#  endif /* if EET_USE_NEW_GNUTLS_API */
 
    /* Create an understanding certificate structure for gnutls */
    datum.data = (void *)cert_der;
@@ -578,19 +707,20 @@ eet_identity_check(const void *data_base, unsigned int data_length,
    /* Verify the signature */
 #  if EET_USE_NEW_GNUTLS_API
    /*
-     I am waiting for my patch being accepted in GnuTLS release.
-     But we now have a way to prevent double computation of SHA1.
+      I am waiting for my patch being accepted in GnuTLS release.
+      But we now have a way to prevent double computation of SHA1.
     */
    err = gcry_md_open (&md, GCRY_MD_SHA1, 0);
-   if (err < 0) return NULL;
+   if (err < 0)
+      return NULL;
 
    gcry_md_write(md, data_base, data_length);
 
    hash = gcry_md_read(md, GCRY_MD_SHA1);
    if (hash == NULL)
      {
-       gcry_md_close(md);
-       return NULL;
+        gcry_md_close(md);
+        return NULL;
      }
 
    datum.size = gcry_md_get_algo_dlen(GCRY_MD_SHA1);
@@ -598,40 +728,41 @@ eet_identity_check(const void *data_base, unsigned int data_length,
 
    if (!gnutls_x509_crt_verify_hash(cert, 0, &datum, &signature))
      {
-       gcry_md_close(md);
-       return NULL;
+        gcry_md_close(md);
+        return NULL;
      }
 
    if (sha1)
      {
-       *sha1 = malloc(datum.size);
-       if (!*sha1)
-         {
-            gcry_md_close(md);
-            return NULL;
-         }
-
-       memcpy(*sha1, hash, datum.size);
-       *sha1_length = datum.size;
+        *sha1 = malloc(datum.size);
+        if (!*sha1)
+          {
+             gcry_md_close(md);
+             return NULL;
+          }
+
+        memcpy(*sha1, hash, datum.size);
+        *sha1_length = datum.size;
      }
 
    gcry_md_close(md);
-#  else
+#  else /* if EET_USE_NEW_GNUTLS_API */
    datum.data = (void *)data_base;
    datum.size = data_length;
 
    if (!gnutls_x509_crt_verify_data(cert, 0, &datum, &signature))
-     return NULL;
+      return NULL;
 
    if (sha1)
      {
-       *sha1 = NULL;
-       *sha1_length = -1;
+        *sha1 = NULL;
+        *sha1_length = -1;
      }
-#  endif
-  gnutls_x509_crt_deinit(cert);
 
-# else
+#  endif /* if EET_USE_NEW_GNUTLS_API */
+   gnutls_x509_crt_deinit(cert);
+
+# else /* ifdef HAVE_GNUTLS */
    const unsigned char *tmp;
    EVP_PKEY *pkey;
    X509 *x509;
@@ -640,16 +771,17 @@ eet_identity_check(const void *data_base, unsigned int data_length,
 
    /* Strange but d2i_X509 seems to put 0 all over the place. */
    tmp = alloca(cert_len);
-   memcpy((char*) tmp, cert_der, cert_len);
+   memcpy((char *)tmp, cert_der, cert_len);
    x509 = d2i_X509(NULL, &tmp, cert_len);
-   if (x509 == NULL) return NULL;
+   if (x509 == NULL)
+      return NULL;
 
    /* Get public key - eay */
-   pkey=X509_get_pubkey(x509);
+   pkey = X509_get_pubkey(x509);
    if (pkey == NULL)
      {
-       X509_free(x509);
-       return NULL;
+        X509_free(x509);
+        return NULL;
      }
 
    /* Verify the signature */
@@ -662,80 +794,102 @@ eet_identity_check(const void *data_base, unsigned int data_length,
 
    if (sha1)
      {
-       *sha1 = NULL;
-       *sha1_length = -1;
+        *sha1 = NULL;
+        *sha1_length = -1;
      }
 
    if (err != 1)
-     return NULL;
-# endif
-   if (x509_length) *x509_length = cert_len;
-   if (raw_signature_base) *raw_signature_base = sign;
-   if (raw_signature_length) *raw_signature_length = sign_len;
+      return NULL;
+
+# endif /* ifdef HAVE_GNUTLS */
+   if (x509_length)
+      *x509_length = cert_len;
+
+   if (raw_signature_base)
+      *raw_signature_base = sign;
+
+   if (raw_signature_length)
+      *raw_signature_length = sign_len;
+
    return cert_der;
-#else
+#else /* ifdef HAVE_SIGNATURE */
    return NULL;
-#endif
-}
+#endif /* ifdef HAVE_SIGNATURE */
+} /* eet_identity_check */
 
 EAPI void
-eet_identity_certificate_print(const unsigned char *certificate, int der_length, FILE *out)
+eet_identity_certificate_print(const unsigned char *certificate,
+                               int                  der_length,
+                               FILE                *out)
 {
 #ifdef HAVE_SIGNATURE
-  if (!certificate || !out || der_length <= 0)
+   if (!certificate || !out || der_length <= 0)
      {
-       ERR("No certificate provided.");
-       return ;
+        ERR("No certificate provided.");
+        return;
      }
+
 # ifdef HAVE_GNUTLS
-  gnutls_datum_t datum;
-  gnutls_x509_crt_t cert;
-
-  /* Create an understanding certificate structure for gnutls */
-  datum.data = (void *)certificate;
-  datum.size = der_length;
-  if (gnutls_x509_crt_init(&cert)) goto on_error;
-  if (gnutls_x509_crt_import(cert, &datum, GNUTLS_X509_FMT_DER)) goto on_error;
-
-  /* Pretty print the certificate */
-  datum.data = NULL;
-  datum.size = 0;
-  if (gnutls_x509_crt_print(cert, GNUTLS_X509_CRT_FULL, &datum)) goto on_error;
-  INF("Public certificate :");
-  INF("%s", datum.data);
-
- on_error:
-  if (datum.data) gnutls_free(datum.data);
-  gnutls_x509_crt_deinit(cert);
-# else
+   gnutls_datum_t datum;
+   gnutls_x509_crt_t cert;
+
+   /* Create an understanding certificate structure for gnutls */
+   datum.data = (void *)certificate;
+   datum.size = der_length;
+   if (gnutls_x509_crt_init(&cert))
+      goto on_error;
+
+   if (gnutls_x509_crt_import(cert, &datum, GNUTLS_X509_FMT_DER))
+      goto on_error;
+
+   /* Pretty print the certificate */
+   datum.data = NULL;
+   datum.size = 0;
+   if (gnutls_x509_crt_print(cert, GNUTLS_X509_CRT_FULL, &datum))
+      goto on_error;
+
+   INF("Public certificate :");
+   INF("%s", datum.data);
+
+on_error:
+   if (datum.data)
+      gnutls_free(datum.data);
+
+   gnutls_x509_crt_deinit(cert);
+# else /* ifdef HAVE_GNUTLS */
    const unsigned char *tmp;
    X509 *x509;
 
    /* Strange but d2i_X509 seems to put 0 all over the place. */
    tmp = alloca(der_length);
-   memcpy((char*) tmp, certificate, der_length);
+   memcpy((char *)tmp, certificate, der_length);
    x509 = d2i_X509(NULL, &tmp, der_length);
    if (x509 == NULL)
      {
-       INF("Not a valid certificate.");
-       return ;
+        INF("Not a valid certificate.");
+        return;
      }
 
    INF("Public certificate :");
    X509_print_fp(out, x509);
 
    X509_free(x509);
-# endif
-#else
+# endif /* ifdef HAVE_GNUTLS */
+#else /* ifdef HAVE_SIGNATURE */
    ERR("You need to compile signature support in EET.");
-#endif
-}
+#endif /* ifdef HAVE_SIGNATURE */
+} /* eet_identity_certificate_print */
 
 Eet_Error
-eet_cipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length)
+eet_cipher(const void   *data,
+           unsigned int  size,
+           const char   *key,
+           unsigned int  length,
+           void        **result,
+           unsigned int *result_length)
 {
 #ifdef HAVE_CIPHER
-  /* Cipher declarations */
+   /* Cipher declarations */
    unsigned int *ret = NULL;
    unsigned char iv[MAX_IV_LEN];
    unsigned char ik[MAX_KEY_LEN];
@@ -748,66 +902,84 @@ eet_cipher(const void *data, unsigned int size, const char *key, unsigned int le
    /* Gcrypt declarations */
    gcry_error_t err = 0;
    gcry_cipher_hd_t cipher;
-# else
+# else /* ifdef HAVE_GNUTLS */
    /* Openssl declarations*/
    EVP_CIPHER_CTX ctx;
    unsigned int *buffer;
    int tmp_len;
-# endif
+# endif /* ifdef HAVE_GNUTLS */
 
 # ifdef HAVE_GNUTLS
    /* Gcrypt salt generation */
    gcry_create_nonce((unsigned char *)&salt, sizeof(salt));
-# else
+# else /* ifdef HAVE_GNUTLS */
    /* Openssl salt generation */
-   if (!RAND_bytes((unsigned char*)&salt, sizeof (unsigned int)))
-     return EET_ERROR_PRNG_NOT_SEEDED;
-#endif
+   if (!RAND_bytes((unsigned char *)&salt, sizeof (unsigned int)))
+      return EET_ERROR_PRNG_NOT_SEEDED;
 
-   eet_pbkdf2_sha1(key, length, (unsigned char *)&salt, sizeof(unsigned int), 2048, key_material, MAX_KEY_LEN + MAX_IV_LEN);
+# endif /* ifdef HAVE_GNUTLS */
 
-   memcpy(iv, key_material, MAX_IV_LEN);
+   eet_pbkdf2_sha1(key,
+                   length,
+                   (unsigned char *)&salt,
+                   sizeof(unsigned int),
+                   2048,
+                   key_material,
+                   MAX_KEY_LEN + MAX_IV_LEN);
+
+   memcpy(iv, key_material,              MAX_IV_LEN);
    memcpy(ik, key_material + MAX_IV_LEN, MAX_KEY_LEN);
 
    memset(key_material, 0, sizeof (key_material));
 
    crypted_length = ((((size + sizeof (unsigned int)) >> 5) + 1) << 5);
    ret = malloc(crypted_length + sizeof(unsigned int));
-   if (!ret) {
-      memset(iv, 0, sizeof (iv));
-      memset(ik, 0, sizeof (ik));
-      memset(&salt, 0, sizeof (salt));
-      return EET_ERROR_OUT_OF_MEMORY;
-   }
+   if (!ret)
+     {
+        memset(iv,    0, sizeof (iv));
+        memset(ik,    0, sizeof (ik));
+        memset(&salt, 0, sizeof (salt));
+        return EET_ERROR_OUT_OF_MEMORY;
+     }
 
    *ret = salt;
    memset(&salt, 0, sizeof (salt));
    tmp = htonl(size);
 
-#ifdef HAVE_GNUTLS
+# ifdef HAVE_GNUTLS
    *(ret + 1) = tmp;
    memcpy(ret + 2, data, size);
 
    /* Gcrypt create the corresponding cipher
       AES with a 256 bit key, Cipher Block Chaining mode */
    err = gcry_cipher_open(&cipher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, 0);
-   if (err) goto on_error;
+   if (err)
+      goto on_error;
+
    opened = 1;
    err = gcry_cipher_setiv(cipher, iv, MAX_IV_LEN);
-   if (err) goto on_error;
+   if (err)
+      goto on_error;
+
    err = gcry_cipher_setkey(cipher, ik, MAX_KEY_LEN);
-   if (err) goto on_error;
+   if (err)
+      goto on_error;
 
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
    /* Gcrypt encrypt */
-   err = gcry_cipher_encrypt(cipher, (unsigned char *)(ret + 1), crypted_length, NULL, 0);
-   if (err) goto on_error;
+   err = gcry_cipher_encrypt(cipher,
+                             (unsigned char *)(ret + 1),
+                             crypted_length,
+                             NULL,
+                             0);
+   if (err)
+      goto on_error;
 
    /* Gcrypt close the cipher */
    gcry_cipher_close(cipher);
-# else
+# else /* ifdef HAVE_GNUTLS */
    buffer = alloca(crypted_length);
    *buffer = tmp;
 
@@ -816,60 +988,82 @@ eet_cipher(const void *data, unsigned int size, const char *key, unsigned int le
    /* Openssl create the corresponding cipher
       AES with a 256 bit key, Cipher Block Chaining mode */
    EVP_CIPHER_CTX_init(&ctx);
-   if (!EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, ik, iv)) goto on_error;
+   if (!EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, ik, iv))
+      goto on_error;
+
    opened = 1;
 
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
    /* Openssl encrypt */
-   if (!EVP_EncryptUpdate(&ctx, (unsigned char*)(ret + 1), &tmp_len, (unsigned char*) buffer, size + sizeof (unsigned int)))
-     goto on_error;
+   if (!EVP_EncryptUpdate(&ctx, (unsigned char *)(ret + 1), &tmp_len,
+                          (unsigned char *)buffer,
+                          size + sizeof(unsigned int)))
+      goto on_error;
 
    /* Openssl close the cipher */
-   if (!EVP_EncryptFinal_ex(&ctx, ((unsigned char*)(ret + 1)) + tmp_len, &tmp_len))
-     goto on_error;
+   if (!EVP_EncryptFinal_ex(&ctx, ((unsigned char *)(ret + 1)) + tmp_len,
+                            &tmp_len))
+      goto on_error;
+
    EVP_CIPHER_CTX_cleanup(&ctx);
-# endif
+# endif /* ifdef HAVE_GNUTLS */
 
    /* Set return values */
-   if (result_length) *result_length = crypted_length + sizeof(unsigned int);
-   if (result) *result = ret;
-   else free(ret);
+   if (result_length)
+      *result_length = crypted_length + sizeof(unsigned int);
+
+   if (result)
+      *result = ret;
+   else
+      free(ret);
 
    return EET_ERROR_NONE;
 
- on_error:
+on_error:
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
 # ifdef HAVE_GNUTLS
    /* Gcrypt error */
-   if (opened) gcry_cipher_close(cipher);
-# else
+   if (opened)
+      gcry_cipher_close(cipher);
+
+# else /* ifdef HAVE_GNUTLS */
    /* Openssl error */
-   if (opened) EVP_CIPHER_CTX_cleanup(&ctx);
-# endif
+   if (opened)
+      EVP_CIPHER_CTX_cleanup(&ctx);
+
+# endif /* ifdef HAVE_GNUTLS */
    /* General error */
-   if (ret) free(ret);
-   if (result) *result = NULL;
-   if (result_length) *result_length = 0;
+   free(ret);
+   if (result)
+      *result = NULL;
+
+   if (result_length)
+      *result_length = 0;
 
    return EET_ERROR_ENCRYPT_FAILED;
-#else
-   /* Cipher not supported */
-   (void) data;
-   (void) size;
-   (void) key;
-   (void) length;
-   (void) result;
-   (void) result_length;
+#else /* ifdef HAVE_CIPHER */
+      /* Cipher not supported */
+   (void)data;
+   (void)size;
+   (void)key;
+   (void)length;
+   (void)result;
+   (void)result_length;
    return EET_ERROR_NOT_IMPLEMENTED;
-#endif
-}
+#endif /* ifdef HAVE_CIPHER */
+} /* eet_cipher */
 
 Eet_Error
-eet_decipher(const void *data, unsigned int size, const char *key, unsigned int length, void **result, unsigned int *result_length)
+eet_decipher(const void   *data,
+             unsigned int  size,
+             const char   *key,
+             unsigned int  length,
+             void        **result,
+             unsigned int *result_length)
 {
 #ifdef HAVE_CIPHER
    const unsigned int *over = data;
@@ -882,26 +1076,31 @@ eet_decipher(const void *data, unsigned int size, const char *key, unsigned int
    int tmp = 0;
 
    /* At least the salt and an AES block */
-   if (size < sizeof(unsigned int) + 16) return EET_ERROR_BAD_OBJECT;
+   if (size < sizeof(unsigned int) + 16)
+      return EET_ERROR_BAD_OBJECT;
 
    /* Get the salt */
    salt = *over;
 
    /* Generate the iv and the key with the salt */
-   eet_pbkdf2_sha1(key, length, (unsigned char *)&salt, sizeof(unsigned int), 2048, key_material, MAX_KEY_LEN + MAX_IV_LEN);
+   eet_pbkdf2_sha1(key, length, (unsigned char *)&salt,
+                   sizeof(unsigned int), 2048, key_material,
+                   MAX_KEY_LEN + MAX_IV_LEN);
 
-   memcpy(iv, key_material, MAX_IV_LEN);
+   memcpy(iv, key_material,              MAX_IV_LEN);
    memcpy(ik, key_material + MAX_IV_LEN, MAX_KEY_LEN);
 
    memset(key_material, 0, sizeof (key_material));
-   memset(&salt, 0, sizeof (salt));
+   memset(&salt,        0, sizeof (salt));
 
    /* Align to AES block size if size is not align */
    tmp_len = size - sizeof (unsigned int);
-   if ((tmp_len & 0x1F) != 0) goto on_error;
+   if ((tmp_len & 0x1F) != 0)
+      goto on_error;
 
    ret = malloc(tmp_len);
-   if (!ret) goto on_error;
+   if (!ret)
+      goto on_error;
 
 # ifdef HAVE_GNUTLS
    gcry_error_t err = 0;
@@ -909,23 +1108,30 @@ eet_decipher(const void *data, unsigned int size, const char *key, unsigned int
 
    /* Gcrypt create the corresponding cipher */
    err = gcry_cipher_open(&cipher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, 0);
-   if (err) return EET_ERROR_DECRYPT_FAILED;
+   if (err)
+      return EET_ERROR_DECRYPT_FAILED;
+
    err = gcry_cipher_setiv(cipher, iv, MAX_IV_LEN);
-   if (err) goto on_error;
+   if (err)
+      goto on_error;
+
    err = gcry_cipher_setkey(cipher, ik, MAX_KEY_LEN);
-   if (err) goto on_error;
+   if (err)
+      goto on_error;
 
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
    /* Gcrypt decrypt */
-   err = gcry_cipher_decrypt(cipher, ret, tmp_len, ((unsigned int *)data) + 1, tmp_len);
-   if (err) goto on_error;
+   err = gcry_cipher_decrypt(cipher, ret, tmp_len,
+                             ((unsigned int *)data) + 1, tmp_len);
+   if (err)
+      goto on_error;
 
    /* Gcrypt close the cipher */
    gcry_cipher_close(cipher);
 
-# else
+# else /* ifdef HAVE_GNUTLS */
    EVP_CIPHER_CTX ctx;
    int opened = 0;
 
@@ -934,165 +1140,185 @@ eet_decipher(const void *data, unsigned int size, const char *key, unsigned int
    opened = 1;
 
    if (!EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, ik, iv))
-     goto on_error;
+      goto on_error;
 
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
    /* Openssl decrypt */
-   if (!EVP_DecryptUpdate(&ctx, (unsigned char *) ret, &tmp,
-                         (unsigned char *) (over + 1), tmp_len))
-     goto on_error;
+   if (!EVP_DecryptUpdate(&ctx, (unsigned char *)ret, &tmp,
+                          (unsigned char *)(over + 1), tmp_len))
+      goto on_error;
 
    /* Openssl close the cipher*/
    EVP_CIPHER_CTX_cleanup(&ctx);
-# endif
+# endif /* ifdef HAVE_GNUTLS */
    /* Get the decrypted data size */
    tmp = *ret;
    tmp = ntohl(tmp);
-   if (tmp > tmp_len) goto on_error;
+   if (tmp > tmp_len)
+      goto on_error;
 
    /* Update the return values */
-   if (result_length) *result_length = tmp;
+   if (result_length)
+      *result_length = tmp;
+
    if (result)
      {
-       *result = NULL;
-       *result = malloc(tmp);
-       if (!*result)
-        goto on_error;
-       memcpy(*result, ret + 1, tmp);
+        *result = NULL;
+        *result = malloc(tmp);
+        if (!*result)
+           goto on_error;
+
+        memcpy(*result, ret + 1, tmp);
      }
+
    free(ret);
 
    return EET_ERROR_NONE;
 
- on_error:
+on_error:
    memset(iv, 0, sizeof (iv));
    memset(ik, 0, sizeof (ik));
 
 # ifdef HAVE_GNUTLS
 # else
-   if (opened) EVP_CIPHER_CTX_cleanup(&ctx);
-# endif
-   if (result) *result = NULL;
-   if (result_length) *result_length = 0;
-   if (ret) free(ret);
+   if (opened)
+      EVP_CIPHER_CTX_cleanup(&ctx);
+
+# endif /* ifdef HAVE_GNUTLS */
+   if (result)
+      *result = NULL;
+
+   if (result_length)
+      *result_length = 0;
+
+   if (ret)
+      free(ret);
 
    return EET_ERROR_DECRYPT_FAILED;
-#else
-   (void) data;
-   (void) size;
-   (void) key;
-   (void) length;
-   (void) result;
-   (void) result_length;
+#else /* ifdef HAVE_CIPHER */
+   (void)data;
+   (void)size;
+   (void)key;
+   (void)length;
+   (void)result;
+   (void)result_length;
    return EET_ERROR_NOT_IMPLEMENTED;
-#endif
-}
+#endif /* ifdef HAVE_CIPHER */
+} /* eet_decipher */
 
 #ifdef HAVE_CIPHER
 # ifdef HAVE_GNUTLS
 static Eet_Error
-eet_hmac_sha1(const void *key, size_t key_len,
-              const void *data, size_t data_len, unsigned char *res)
+eet_hmac_sha1(const void    *key,
+              size_t         key_len,
+              const void    *data,
+              size_t         data_len,
+              unsigned char *res)
 {
-  size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
-  gcry_md_hd_t mdh;
-  unsigned char *hash;
-  gpg_error_t err;
-
-  err = gcry_md_open(&mdh, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC);
-  if (err != GPG_ERR_NO_ERROR)
-    return 1;
-
-  err = gcry_md_setkey(mdh, key, key_len);
-  if (err != GPG_ERR_NO_ERROR)
-    {
-      gcry_md_close(mdh);
+   size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
+   gcry_md_hd_t mdh;
+   unsigned char *hash;
+   gpg_error_t err;
+
+   err = gcry_md_open(&mdh, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC);
+   if (err != GPG_ERR_NO_ERROR)
       return 1;
-    }
 
-  gcry_md_write(mdh, data, data_len);
+   err = gcry_md_setkey(mdh, key, key_len);
+   if (err != GPG_ERR_NO_ERROR)
+     {
+        gcry_md_close(mdh);
+        return 1;
+     }
 
-  hash = gcry_md_read(mdh, GCRY_MD_SHA1);
-  if (hash == NULL)
-    {
-      gcry_md_close(mdh);
-      return 1;
-    }
+   gcry_md_write(mdh, data, data_len);
+
+   hash = gcry_md_read(mdh, GCRY_MD_SHA1);
+   if (hash == NULL)
+     {
+        gcry_md_close(mdh);
+        return 1;
+     }
 
-  memcpy(res, hash, hlen);
+   memcpy(res, hash, hlen);
 
-  gcry_md_close(mdh);
+   gcry_md_close(mdh);
 
-  return 0;
-}
-# endif
+   return 0;
+} /* eet_hmac_sha1 */
+
+# endif /* ifdef HAVE_GNUTLS */
 
 static Eet_Error
 eet_pbkdf2_sha1(const char          *key,
-               int                  key_len,
-               const unsigned char *salt,
-               unsigned int         salt_len,
-               int                  iter,
-               unsigned char       *res,
-               int                  res_len)
+                int                  key_len,
+                const unsigned char *salt,
+                unsigned int         salt_len,
+                int                  iter,
+                unsigned char       *res,
+                int                  res_len)
 {
-  unsigned char         digest[20];
-  unsigned char         tab[4];
-  unsigned char               *p = res;
-  unsigned char        *buf;
-  unsigned long         i;
-  int                   digest_len = 20;
-  int                   len = res_len;
-  int                   tmp_len;
-  int                   j, k;
+   unsigned char digest[20];
+   unsigned char tab[4];
+   unsigned char *p = res;
+   unsigned char *buf;
+   unsigned long i;
+   int digest_len = 20;
+   int len = res_len;
+   int tmp_len;
+   int j, k;
 # ifdef HAVE_GNUTLS
 # else
-  HMAC_CTX              hctx;
-# endif
+   HMAC_CTX hctx;
+# endif /* ifdef HAVE_GNUTLS */
 
-  buf = alloca(salt_len + 4);
-  if (!buf) return 1;
+   buf = alloca(salt_len + 4);
+   if (!buf)
+      return 1;
 
-  for (i = 1; len; len -= tmp_len, p += tmp_len, i++)
-    {
-      if (len > digest_len) tmp_len = digest_len;
-      else tmp_len = len;
+   for (i = 1; len; len -= tmp_len, p += tmp_len, i++)
+     {
+        if (len > digest_len)
+           tmp_len = digest_len;
+        else
+           tmp_len = len;
 
-      tab[0] = (unsigned char)(i & 0xff000000) >> 24;
-      tab[1] = (unsigned char)(i & 0x00ff0000) >> 16;
-      tab[2] = (unsigned char)(i & 0x0000ff00) >> 8;
-      tab[3] = (unsigned char)(i & 0x000000ff) >> 0;
+        tab[0] = (unsigned char)(i & 0xff000000) >> 24;
+        tab[1] = (unsigned char)(i & 0x00ff0000) >> 16;
+        tab[2] = (unsigned char)(i & 0x0000ff00) >> 8;
+        tab[3] = (unsigned char)(i & 0x000000ff) >> 0;
 
 # ifdef HAVE_GNUTLS
-      memcpy(buf, salt, salt_len);
-      memcpy(buf + salt_len, tab, 4);
-      eet_hmac_sha1(key, key_len, buf, salt_len + 4, digest);
-# else
-      HMAC_Init(&hctx, key, key_len, EVP_sha1());
-      HMAC_Update(&hctx, salt, salt_len);
-      HMAC_Update(&hctx, tab, 4);
-      HMAC_Final(&hctx, digest, NULL);
-# endif
-      memcpy(p, digest, tmp_len);
-
-      for (j = 1; j < iter; j++)
-       {
+        memcpy(buf,            salt, salt_len);
+        memcpy(buf + salt_len, tab,  4);
+        eet_hmac_sha1(key, key_len, buf, salt_len + 4, digest);
+# else /* ifdef HAVE_GNUTLS */
+        HMAC_Init(&hctx, key, key_len, EVP_sha1());
+        HMAC_Update(&hctx, salt, salt_len);
+        HMAC_Update(&hctx, tab,  4);
+        HMAC_Final(&hctx, digest, NULL);
+# endif /* ifdef HAVE_GNUTLS */
+        memcpy(p, digest, tmp_len);
+
+        for (j = 1; j < iter; j++)
+          {
 # ifdef HAVE_GNUTLS
-         eet_hmac_sha1(key, key_len, digest, 20, digest);
-# else
-         HMAC(EVP_sha1(), key, key_len, digest, 20, digest, NULL);
-# endif
-         for (k = 0; k < tmp_len; k++)
-           p[k] ^= digest[k];
-       }
-    }
+             eet_hmac_sha1(key, key_len, digest, 20, digest);
+# else /* ifdef HAVE_GNUTLS */
+             HMAC(EVP_sha1(), key, key_len, digest, 20, digest, NULL);
+# endif /* ifdef HAVE_GNUTLS */
+             for (k = 0; k < tmp_len; k++)
+                p[k] ^= digest[k];
+          }
+     }
 
 # ifdef HAVE_GNUTLS
 # else
-  HMAC_cleanup(&hctx);
-# endif
-  return 0;
-}
-#endif
+   HMAC_cleanup(&hctx);
+# endif /* ifdef HAVE_GNUTLS */
+   return 0;
+} /* eet_pbkdf2_sha1 */
+
+#endif /* ifdef HAVE_CIPHER */
index 99d1ff1..026f4f4 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #ifdef HAVE_ALLOCA_H
 # include <alloca.h>
 #elif defined _MSC_VER
 # include <malloc.h>
 # define alloca _alloca
-#else
+#else /* ifdef HAVE_ALLOCA_H */
 # include <stddef.h>
 # ifdef  __cplusplus
 extern "C"
-# endif
-void *alloca (size_t);
-#endif
+# endif /* ifdef  __cplusplus */
+void *    alloca (size_t);
+#endif /* ifdef HAVE_ALLOCA_H */
 
 #include <string.h>
 #include <stdlib.h>
 
 #ifdef HAVE_NETINET_IN_H
 # include <netinet/in.h>
-#endif
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef _WIN32
 # include <winsock2.h>
-#endif
+#endif /* ifdef _WIN32 */
 
 #include <Eina.h>
 
@@ -41,170 +37,180 @@ void *alloca (size_t);
 
 #define MAGIC_EET_DATA_PACKET 0x4270ACE1
 
-typedef struct _Eet_Message Eet_Message;
-struct _Eet_Message {
-   int magic;
-   int size;
-};
-
 struct _Eet_Connection
 {
-   Eet_Read_Cb *eet_read_cb;
+   Eet_Read_Cb  *eet_read_cb;
    Eet_Write_Cb *eet_write_cb;
-   void *user_data;
+   void         *user_data;
 
-   size_t allocated;
-   size_t size;
-   size_t received;
+   size_t        allocated;
+   size_t        size;
+   size_t        received;
 
-   void *buffer;
+   void         *buffer;
 };
 
-Eet_Connection *
-eet_connection_new(Eet_Read_Cb *eet_read_cb,
-                  Eet_Write_Cb *eet_write_cb,
-                  const void *user_data)
+EAPI Eet_Connection *
+eet_connection_new(Eet_Read_Cb  *eet_read_cb,
+                   Eet_Write_Cb *eet_write_cb,
+                   const void   *user_data)
 {
    Eet_Connection *conn;
 
    if (!eet_read_cb || !eet_write_cb)
-     return NULL;
+      return NULL;
 
    conn = calloc(1, sizeof (Eet_Connection));
    if (!conn)
-     return NULL;
+      return NULL;
 
    conn->eet_read_cb = eet_read_cb;
    conn->eet_write_cb = eet_write_cb;
-   conn->user_data = (void*) user_data;
+   conn->user_data = (void *)user_data;
 
    return conn;
-}
+} /* eet_connection_new */
 
-int
-eet_connection_received(Eet_Connection *conn, const void *data, size_t size)
+EAPI int
+eet_connection_received(Eet_Connection *conn,
+                        const void     *data,
+                        size_t          size)
 {
-   if (!conn || !data || !size)
-     return size;
+   if ((!conn) || (!data) || (!size))
+      return size;
 
    do {
-      size_t copy_size;
-
-      if (conn->size == 0)
-       {
-          const Eet_Message *msg;
-          size_t packet_size;
-
-          if (size < sizeof (Eet_Message))
-            break;
-
-          msg = data;
-          /* Check the magic */
-          if (ntohl(msg->magic) != MAGIC_EET_DATA_PACKET)
-            break;
-
-          packet_size = ntohl(msg->size);
-          /* Message should always be under 64K */
-          if (packet_size > 64 * 1024)
-            break;
-
-          data = (void*) (msg + 1);
-          size -= sizeof (msg);
-          if ((size_t) packet_size <= size)
-            {
-               /* Not a partial receive, go the quick way. */
-               if (!conn->eet_read_cb(data, packet_size, conn->user_data))
-                 break;
-
-               data = (void*) ((char *) data + packet_size);
-               size -= packet_size;
-
-               conn->received = 0;
-               continue;
-            }
-
-          conn->size = packet_size;
-          if (conn->allocated < conn->size)
-            {
-               void *tmp;
-
-               tmp = realloc(conn->buffer, conn->size);
-               if (!tmp)
-                 break;
-
-               conn->buffer = tmp;
-               conn->allocated = conn->size;
-            }
-       }
-
-      /* Partial receive */
-      copy_size = (conn->size - conn->received >= size) ? size : conn->size - conn->received;
-      memcpy((char*) conn->buffer + conn->received, data, copy_size);
-
-      conn->received += copy_size;
-      data = (void*)((char *) data + copy_size);
-      size -= copy_size;
-
-      if (conn->received == conn->size)
-       {
-          size_t data_size;
-
-          data_size = conn->size;
-          conn->size = 0;
-          conn->received = 0;
-
-          /* Completed a packet. */
-          if (!conn->eet_read_cb(conn->buffer, data_size, conn->user_data))
-            {
-               /* Something goes wrong. Stop now. */
-               size += data_size;
-               break;
-            }
-       }
-   } while (size > 0);
+        size_t copy_size;
+
+        if (conn->size == 0)
+          {
+             const int *msg;
+             size_t packet_size;
+
+             if (size < sizeof (int) * 2)
+                break;
+
+             msg = data;
+             /* Check the magic */
+             if (ntohl(msg[0]) != MAGIC_EET_DATA_PACKET)
+                break;
+
+             packet_size = ntohl(msg[1]);
+             /* Message should always be under 64K */
+             if (packet_size > 64 * 1024)
+                break;
+
+             data = (void *)(msg + 2);
+             size -= sizeof (int) * 2;
+             if ((size_t)packet_size <= size)
+               {
+                  /* Not a partial receive, go the quick way. */
+                  if (!conn->eet_read_cb(data, packet_size, conn->user_data))
+                     break;
+
+                  data = (void *)((char *)data + packet_size);
+                  size -= packet_size;
+
+                  conn->received = 0;
+                  continue;
+               }
+
+             conn->size = packet_size;
+             if (conn->allocated < conn->size)
+               {
+                  void *tmp;
+
+                  tmp = realloc(conn->buffer, conn->size);
+                  if (!tmp)
+                     break;
+
+                  conn->buffer = tmp;
+                  conn->allocated = conn->size;
+               }
+          }
+
+        /* Partial receive */
+        copy_size =
+           (conn->size - conn->received >=
+            size) ? size : conn->size - conn->received;
+        memcpy((char *)conn->buffer + conn->received, data, copy_size);
+
+        conn->received += copy_size;
+        data = (void *)((char *)data + copy_size);
+        size -= copy_size;
+
+        if (conn->received == conn->size)
+          {
+             size_t data_size;
+
+             data_size = conn->size;
+             conn->size = 0;
+             conn->received = 0;
+
+             /* Completed a packet. */
+             if (!conn->eet_read_cb(conn->buffer, data_size, conn->user_data))
+               {
+                  /* Something goes wrong. Stop now. */
+                  size += data_size;
+                  break;
+               }
+          }
+     } while (size > 0);
 
    return size;
-}
+} /* eet_connection_received */
 
 static Eina_Bool
-_eet_connection_raw_send(Eet_Connection *conn, void *data, int data_size)
+_eet_connection_raw_send(Eet_Connection *conn,
+                         void           *data,
+                         int             data_size)
 {
-   Eet_Message *message;
+   int *message;
 
    /* Message should never be above 64K */
    if (data_size > 64 * 1024)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
-   message = alloca(data_size + sizeof (Eet_Message));
-   message->magic = htonl(MAGIC_EET_DATA_PACKET);
-   message->size = htonl(data_size);
+   message = alloca(data_size + sizeof (int) * 2);
+   message[0] = htonl(MAGIC_EET_DATA_PACKET);
+   message[1] = htonl(data_size);
 
-   memcpy(message + 1, data, data_size);
+   memcpy(message + 2, data, data_size);
 
-   conn->eet_write_cb(message, data_size + sizeof (Eet_Message), conn->user_data);
+   conn->eet_write_cb(message,
+                      data_size + sizeof (int) * 2,
+                      conn->user_data);
    return EINA_TRUE;
-}
+} /* _eet_connection_raw_send */
 
-Eina_Bool
-eet_connection_send(Eet_Connection *conn, Eet_Data_Descriptor *edd, const void *data_in, const char *cipher_key)
+EAPI Eina_Bool
+eet_connection_send(Eet_Connection      *conn,
+                    Eet_Data_Descriptor *edd,
+                    const void          *data_in,
+                    const char          *cipher_key)
 {
    void *flat_data;
    int data_size;
    Eina_Bool ret = EINA_FALSE;
 
-   flat_data = eet_data_descriptor_encode_cipher(edd, data_in, cipher_key, &data_size);
+   flat_data = eet_data_descriptor_encode_cipher(edd,
+                                                 data_in,
+                                                 cipher_key,
+                                                 &data_size);
    if (!flat_data)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
    if (_eet_connection_raw_send(conn, flat_data, data_size))
-     ret = EINA_TRUE;
+      ret = EINA_TRUE;
 
    free(flat_data);
    return ret;
-}
+} /* eet_connection_send */
 
-Eina_Bool
-eet_connection_node_send(Eet_Connection *conn, Eet_Node *node, const char *cipher_key)
+EAPI Eina_Bool
+eet_connection_node_send(Eet_Connection *conn,
+                         Eet_Node       *node,
+                         const char     *cipher_key)
 {
    void *data;
    int data_size;
@@ -212,25 +218,26 @@ eet_connection_node_send(Eet_Connection *conn, Eet_Node *node, const char *ciphe
 
    data = eet_data_node_encode_cipher(node, cipher_key, &data_size);
    if (!data)
-     return EINA_FALSE;
+      return EINA_FALSE;
 
    if (_eet_connection_raw_send(conn, data, data_size))
-     ret = EINA_TRUE;
+      ret = EINA_TRUE;
 
    free(data);
    return ret;
-}
+} /* eet_connection_node_send */
 
-void *
-eet_connection_close(Eet_Connection *conn, Eina_Bool *on_going)
+EAPI void *
+eet_connection_close(Eet_Connection *conn,
+                     Eina_Bool      *on_going)
 {
    void *user_data;
 
    if (!conn)
-     return NULL;
+      return NULL;
 
    if (on_going)
-     *on_going = conn->received == 0 ? EINA_FALSE : EINA_TRUE;
+      *on_going = conn->received == 0 ? EINA_FALSE : EINA_TRUE;
 
    user_data = conn->user_data;
 
@@ -238,4 +245,5 @@ eet_connection_close(Eet_Connection *conn, Eina_Bool *on_going)
    free(conn);
 
    return user_data;
-}
+} /* eet_connection_close */
+
index 9459caa..995d55b 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #include <stdio.h>
 #include <string.h>
 
 #ifdef HAVE_NETINET_IN_H
 # include <netinet/in.h>
-#endif
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef _WIN32
 # include <winsock2.h>
-#endif
+#endif /* ifdef _WIN32 */
 
 #include <Eina.h>
 
@@ -72,9 +68,9 @@ typedef struct _Eet_Data_Chunk              Eet_Data_Chunk;
 typedef struct _Eet_Data_Stream             Eet_Data_Stream;
 typedef struct _Eet_Data_Descriptor_Hash    Eet_Data_Descriptor_Hash;
 typedef struct _Eet_Data_Encode_Hash_Info   Eet_Data_Encode_Hash_Info;
-typedef struct _Eet_Free                   Eet_Free;
-typedef struct _Eet_Free_Context           Eet_Free_Context;
-typedef struct _Eet_Variant_Unknow         Eet_Variant_Unknow;
+typedef struct _Eet_Free                    Eet_Free;
+typedef struct _Eet_Free_Context            Eet_Free_Context;
+typedef struct _Eet_Variant_Unknow          Eet_Variant_Unknow;
 
 /*---*/
 
@@ -86,25 +82,25 @@ struct _Eet_Data_Basic_Type_Codec
 {
    int         size;
    const char *name;
-   int       (*get) (const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-   void     *(*put) (Eet_Dictionary *ed, const void *src, int *size_ret);
+   int         (*get)(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
+   void      * (*put)(Eet_Dictionary *ed, const void *src, int *size_ret);
 };
 
 struct _Eet_Data_Group_Type_Codec
 {
-   int  (*get) (Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, char **p, int *size);
-   void (*put) (Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
+   int  (*get)(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, char **p, int *size);
+   void (*put)(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
 };
 
 struct _Eet_Data_Chunk
 {
-   char          *name;
-   int            len;
-   int            size;
-   int            hash;
-   void          *data;
-   unsigned char  type;
-   unsigned char  group_type;
+   char         *name;
+   int           len;
+   int           size;
+   int           hash;
+   void         *data;
+   unsigned char type;
+   unsigned char group_type;
 };
 
 struct _Eet_Data_Stream
@@ -125,29 +121,34 @@ struct _Eet_Data_Descriptor
    const char           *name;
    const Eet_Dictionary *ed;
    int                   size;
-   struct {
-      void *(*mem_alloc) (size_t size);
-      void  (*mem_free) (void *mem);
-      char *(*str_alloc) (const char *str);
-      char *(*str_direct_alloc) (const char *str);
-      void  (*str_free) (const char *str);
-      void  (*str_direct_free) (const char *str);
-      void *(*list_next) (void *l);
-      void *(*list_append) (void *l, void *d);
-      void *(*list_data) (void *l);
-      void *(*list_free) (void *l);
-      void  (*hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt);
-      void *(*hash_add) (void *h, const char *k, void *d);
-      void  (*hash_free) (void *h);
-      const char *(*type_get) (const void *data, Eina_Bool *unknow);
-      Eina_Bool (*type_set) (const char *type, void *data, Eina_Bool unknow);
+   struct
+   {
+      void      * (*mem_alloc)(size_t size);
+      void        (*mem_free)(void *mem);
+      char      * (*str_alloc)(const char *str);
+      char      * (*str_direct_alloc)(const char *str);
+      void        (*str_free)(const char *str);
+      void        (*str_direct_free)(const char *str);
+      void      * (*list_next)(void *l);
+      void      * (*list_append)(void *l, void *d);
+      void      * (*list_data)(void *l);
+      void      * (*list_free)(void *l);
+      void        (*hash_foreach)(void *h, int (*func)(void *h, const char *k, void *dt, void *fdt), void *fdt);
+      void      * (*hash_add)(void *h, const char *k, void *d);
+      void        (*hash_free)(void *h);
+      const char *(*type_get)(const void *data, Eina_Bool *unknow);
+      Eina_Bool   (*type_set)(const char *type, void *data, Eina_Bool unknow);
+      void      * (*array_alloc)(size_t size);
+      void        (*array_free)(void *mem);
    } func;
-   struct {
-      int                num;
-      Eet_Data_Element  *set;
-      struct {
-        int                             size;
-        Eet_Data_Descriptor_Hash       *buckets;
+   struct
+   {
+      int               num;
+      Eet_Data_Element *set;
+      struct
+      {
+         int                       size;
+         Eet_Data_Descriptor_Hash *buckets;
       } hash;
    } elements;
 
@@ -162,31 +163,32 @@ struct _Eet_Data_Element
    const char          *counter_name;
    const char          *directory_name_ptr;
    Eet_Data_Descriptor *subtype;
-   int                  offset;         /* offset in bytes from the base element */
-   int                  count;          /* number of elements for a fixed array */
-   int                  counter_offset; /* for a variable array we need the offset of the count variable */
-   unsigned char        type;           /* EET_T_XXX */
-   unsigned char        group_type;     /* EET_G_XXX */
+   int                  offset;  /* offset in bytes from the base element */
+   int                  count;  /* number of elements for a fixed array */
+   int                  counter_offset;  /* for a variable array we need the offset of the count variable */
+   unsigned char        type;  /* EET_T_XXX */
+   unsigned char        group_type;  /* EET_G_XXX */
 };
 
 struct _Eet_Data_Encode_Hash_Info
 {
-  Eet_Data_Stream       *ds;
-  Eet_Data_Element      *ede;
-  Eet_Dictionary        *ed;
+   Eet_Data_Stream  *ds;
+   Eet_Data_Element *ede;
+   Eet_Dictionary   *ed;
 };
 
 struct _Eet_Free
 {
-  int     ref;
-  int     len[256];
-  int     num[256];
-  void  **list[256];
+   int    ref;
+   int    len[256];
+   int    num[256];
+   void **list[256];
 };
 
 struct _Eet_Free_Context
 {
    Eet_Free freelist;
+   Eet_Free freelist_array;
    Eet_Free freelist_list;
    Eet_Free freelist_hash;
    Eet_Free freelist_str;
@@ -195,305 +197,522 @@ struct _Eet_Free_Context
 
 struct _Eet_Variant_Unknow
 {
-   EINA_MAGIC;
+        EINA_MAGIC;
 
-   int size;
+   int  size;
    char data[1];
 };
 
 /*---*/
 
-static int   eet_data_get_char(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_char(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_short(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_short(Eet_Dictionary *ed, const void *src, int *size_ret);
-static inline int   eet_data_get_int(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_int(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_long_long(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_long_long(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_float(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_float(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_double(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_double(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_f32p32(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_f32p32(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_f16p16(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_f16p16(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_f8p24(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_f8p24(Eet_Dictionary *ed, const void *src, int *size_ret);
-static inline int   eet_data_get_string(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_string(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_istring(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_istring(Eet_Dictionary *ed, const void *src, int *size_ret);
-static int   eet_data_get_null(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_null(Eet_Dictionary *ed, const void *src, int *size_ret);
-
-static int   eet_data_get_type(const Eet_Dictionary *ed, int type, const void *src, const void *src_end, void *dest);
-static void *eet_data_put_type(Eet_Dictionary *ed, int type, const void *src, int *size_ret);
-
-static Eet_Node *eet_data_node_simple_type(int type, const char *name, void *dd);
-
-static int  eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, char **p, int *size);
-static void eet_data_put_unknown(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static void eet_data_put_array(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static int  eet_data_get_array(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, char **p, int *size);
-static int  eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data_in, char **p, int *size);
-static void eet_data_put_list(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static void eet_data_put_hash(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static int  eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, char **p, int *size);
-static void eet_data_put_union(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static int  eet_data_get_union(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, char **p, int *size);
-static void eet_data_put_variant(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in);
-static int  eet_data_get_variant(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk, int type, int group_type, void *data, char **p, int *size);
-
-static void            eet_data_chunk_get(const Eet_Dictionary *ed, Eet_Data_Chunk *chnk, const void *src, int size);
-static Eet_Data_Chunk *eet_data_chunk_new(void *data, int size, const char *name, int type, int group_type);
-static void            eet_data_chunk_free(Eet_Data_Chunk *chnk);
-
-static Eet_Data_Stream *eet_data_stream_new(void);
-static void             eet_data_stream_write(Eet_Data_Stream *ds, const void *data, int size);
-static void             eet_data_stream_free(Eet_Data_Stream *ds);
-
-static void             eet_data_chunk_put(Eet_Dictionary *ed, Eet_Data_Chunk *chnk, Eet_Data_Stream *ds);
-
-static int       eet_data_descriptor_encode_hash_cb(void *hash, const char *key, void *hdata, void *fdata);
-static void     *_eet_data_descriptor_encode(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, const void *data_in, int *size_ret);
-static void     *_eet_data_descriptor_decode(Eet_Free_Context *context,
-                                            const Eet_Dictionary *ed,
-                                             Eet_Data_Descriptor *edd,
-                                             const void *data_in,
-                                             int size_in);
+static int             eet_data_get_char(const Eet_Dictionary *ed,
+                                         const void           *src,
+                                         const void           *src_end,
+                                         void                 *dest);
+static void *          eet_data_put_char(Eet_Dictionary *ed,
+                                         const void     *src,
+                                         int            *size_ret);
+static int             eet_data_get_short(const Eet_Dictionary *ed,
+                                          const void           *src,
+                                          const void           *src_end,
+                                          void                 *dest);
+static void *          eet_data_put_short(Eet_Dictionary *ed,
+                                          const void     *src,
+                                          int            *size_ret);
+static inline int      eet_data_get_int(const Eet_Dictionary *ed,
+                                        const void           *src,
+                                        const void           *src_end,
+                                        void                 *dest);
+static void *          eet_data_put_int(Eet_Dictionary *ed,
+                                        const void     *src,
+                                        int            *size_ret);
+static int             eet_data_get_long_long(const Eet_Dictionary *ed,
+                                              const void           *src,
+                                              const void           *src_end,
+                                              void                 *dest);
+static void *          eet_data_put_long_long(Eet_Dictionary *ed,
+                                              const void     *src,
+                                              int            *size_ret);
+static int             eet_data_get_float(const Eet_Dictionary *ed,
+                                          const void           *src,
+                                          const void           *src_end,
+                                          void                 *dest);
+static void *          eet_data_put_float(Eet_Dictionary *ed,
+                                          const void     *src,
+                                          int            *size_ret);
+static int             eet_data_get_double(const Eet_Dictionary *ed,
+                                           const void           *src,
+                                           const void           *src_end,
+                                           void                 *dest);
+static void *          eet_data_put_double(Eet_Dictionary *ed,
+                                           const void     *src,
+                                           int            *size_ret);
+static int             eet_data_get_f32p32(const Eet_Dictionary *ed,
+                                           const void           *src,
+                                           const void           *src_end,
+                                           void                 *dest);
+static void *          eet_data_put_f32p32(Eet_Dictionary *ed,
+                                           const void     *src,
+                                           int            *size_ret);
+static int             eet_data_get_f16p16(const Eet_Dictionary *ed,
+                                           const void           *src,
+                                           const void           *src_end,
+                                           void                 *dest);
+static void *          eet_data_put_f16p16(Eet_Dictionary *ed,
+                                           const void     *src,
+                                           int            *size_ret);
+static int             eet_data_get_f8p24(const Eet_Dictionary *ed,
+                                          const void           *src,
+                                          const void           *src_end,
+                                          void                 *dest);
+static void *          eet_data_put_f8p24(Eet_Dictionary *ed,
+                                          const void     *src,
+                                          int            *size_ret);
+static inline int      eet_data_get_string(const Eet_Dictionary *ed,
+                                           const void           *src,
+                                           const void           *src_end,
+                                           void                 *dest);
+static void *          eet_data_put_string(Eet_Dictionary *ed,
+                                           const void     *src,
+                                           int            *size_ret);
+static int             eet_data_get_istring(const Eet_Dictionary *ed,
+                                            const void           *src,
+                                            const void           *src_end,
+                                            void                 *dest);
+static void *          eet_data_put_istring(Eet_Dictionary *ed,
+                                            const void     *src,
+                                            int            *size_ret);
+static int             eet_data_get_null(const Eet_Dictionary *ed,
+                                         const void           *src,
+                                         const void           *src_end,
+                                         void                 *dest);
+static void *          eet_data_put_null(Eet_Dictionary *ed,
+                                         const void     *src,
+                                         int            *size_ret);
+
+static int             eet_data_get_type(const Eet_Dictionary *ed,
+                                         int                   type,
+                                         const void           *src,
+                                         const void           *src_end,
+                                         void                 *dest);
+static void *          eet_data_put_type(Eet_Dictionary *ed,
+                                         int             type,
+                                         const void     *src,
+                                         int            *size_ret);
+
+static Eet_Node *      eet_data_node_simple_type(int         type,
+                                                 const char *name,
+                                                 void       *dd);
+
+static int             eet_data_get_unknown(Eet_Free_Context     *context,
+                                            const Eet_Dictionary *ed,
+                                            Eet_Data_Descriptor  *edd,
+                                            Eet_Data_Element     *ede,
+                                            Eet_Data_Chunk       *echnk,
+                                            int                   type,
+                                            int                   group_type,
+                                            void                 *data_in,
+                                            char                **p,
+                                            int                  *size);
+static void      eet_data_put_unknown(Eet_Dictionary      *ed,
+                                      Eet_Data_Descriptor *edd,
+                                      Eet_Data_Element    *ede,
+                                      Eet_Data_Stream     *ds,
+                                      void                *data_in);
+static void      eet_data_put_array(Eet_Dictionary      *ed,
+                                    Eet_Data_Descriptor *edd,
+                                    Eet_Data_Element    *ede,
+                                    Eet_Data_Stream     *ds,
+                                    void                *data_in);
+static int       eet_data_get_array(Eet_Free_Context     *context,
+                                    const Eet_Dictionary *ed,
+                                    Eet_Data_Descriptor  *edd,
+                                    Eet_Data_Element     *ede,
+                                    Eet_Data_Chunk       *echnk,
+                                    int                   type,
+                                    int                   group_type,
+                                    void                 *data,
+                                    char                **p,
+                                    int                  *size);
+static int      eet_data_get_list(Eet_Free_Context     *context,
+                                  const Eet_Dictionary *ed,
+                                  Eet_Data_Descriptor  *edd,
+                                  Eet_Data_Element     *ede,
+                                  Eet_Data_Chunk       *echnk,
+                                  int                   type,
+                                  int                   group_type,
+                                  void                 *data_in,
+                                  char                **p,
+                                  int                  *size);
+static void      eet_data_put_list(Eet_Dictionary      *ed,
+                                   Eet_Data_Descriptor *edd,
+                                   Eet_Data_Element    *ede,
+                                   Eet_Data_Stream     *ds,
+                                   void                *data_in);
+static void      eet_data_put_hash(Eet_Dictionary      *ed,
+                                   Eet_Data_Descriptor *edd,
+                                   Eet_Data_Element    *ede,
+                                   Eet_Data_Stream     *ds,
+                                   void                *data_in);
+static int       eet_data_get_hash(Eet_Free_Context     *context,
+                                   const Eet_Dictionary *ed,
+                                   Eet_Data_Descriptor  *edd,
+                                   Eet_Data_Element     *ede,
+                                   Eet_Data_Chunk       *echnk,
+                                   int                   type,
+                                   int                   group_type,
+                                   void                 *data,
+                                   char                **p,
+                                   int                  *size);
+static void      eet_data_put_union(Eet_Dictionary      *ed,
+                                    Eet_Data_Descriptor *edd,
+                                    Eet_Data_Element    *ede,
+                                    Eet_Data_Stream     *ds,
+                                    void                *data_in);
+static int       eet_data_get_union(Eet_Free_Context     *context,
+                                    const Eet_Dictionary *ed,
+                                    Eet_Data_Descriptor  *edd,
+                                    Eet_Data_Element     *ede,
+                                    Eet_Data_Chunk       *echnk,
+                                    int                   type,
+                                    int                   group_type,
+                                    void                 *data,
+                                    char                **p,
+                                    int                  *size);
+static void      eet_data_put_variant(Eet_Dictionary      *ed,
+                                      Eet_Data_Descriptor *edd,
+                                      Eet_Data_Element    *ede,
+                                      Eet_Data_Stream     *ds,
+                                      void                *data_in);
+static int       eet_data_get_variant(Eet_Free_Context     *context,
+                                      const Eet_Dictionary *ed,
+                                      Eet_Data_Descriptor  *edd,
+                                      Eet_Data_Element     *ede,
+                                      Eet_Data_Chunk       *echnk,
+                                      int                   type,
+                                      int                   group_type,
+                                      void                 *data,
+                                      char                **p,
+                                      int                  *size);
+
+static void                 eet_data_chunk_get(const Eet_Dictionary *ed,
+                                               Eet_Data_Chunk       *chnk,
+                                               const void           *src,
+                                               int                   size);
+static Eet_Data_Chunk *     eet_data_chunk_new(void       *data,
+                                               int         size,
+                                               const char *name,
+                                               int         type,
+                                               int         group_type);
+static void                 eet_data_chunk_free(Eet_Data_Chunk *chnk);
+
+static Eet_Data_Stream *    eet_data_stream_new(void);
+static void                 eet_data_stream_write(Eet_Data_Stream *ds,
+                                                  const void      *data,
+                                                  int              size);
+static void                 eet_data_stream_free(Eet_Data_Stream *ds);
+
+static void                 eet_data_chunk_put(Eet_Dictionary  *ed,
+                                               Eet_Data_Chunk  *chnk,
+                                               Eet_Data_Stream *ds);
+
+static int                  eet_data_descriptor_encode_hash_cb(void       *hash,
+                                                               const char *key,
+                                                               void       *hdata,
+                                                               void       *fdata);
+static void *               _eet_data_descriptor_encode(Eet_Dictionary      *ed,
+                                                        Eet_Data_Descriptor *edd,
+                                                        const void          *data_in,
+                                                        int                 *size_ret);
+static void *               _eet_data_descriptor_decode(Eet_Free_Context     *context,
+                                                        const Eet_Dictionary *ed,
+                                                        Eet_Data_Descriptor  *edd,
+                                                        const void           *data_in,
+                                                        int                   size_in);
 
 /*---*/
 
 static const Eet_Data_Basic_Type_Codec eet_basic_codec[] =
 {
-     {sizeof(char),      "char",       eet_data_get_char,      eet_data_put_char     },
-     {sizeof(short),     "short",      eet_data_get_short,     eet_data_put_short    },
-     {sizeof(int),       "int",        eet_data_get_int,       eet_data_put_int      },
-     {sizeof(long long), "long_long",  eet_data_get_long_long, eet_data_put_long_long},
-     {sizeof(float),     "float",      eet_data_get_float,     eet_data_put_float    },
-     {sizeof(double),    "double",     eet_data_get_double,    eet_data_put_double   },
-     {sizeof(char),      "uchar",      eet_data_get_char,      eet_data_put_char     },
-     {sizeof(short),     "ushort",     eet_data_get_short,     eet_data_put_short    },
-     {sizeof(int),       "uint",       eet_data_get_int,       eet_data_put_int      },
-     {sizeof(long long), "ulong_long", eet_data_get_long_long, eet_data_put_long_long},
-     {sizeof(char *),    "string",     eet_data_get_string,    eet_data_put_string   },
-     {sizeof(char *),    "inlined",    eet_data_get_istring,   eet_data_put_istring  },
-     {sizeof(void *),    "NULL",       eet_data_get_null,      eet_data_put_null     },
-     {sizeof(Eina_F32p32),"f32p32",    eet_data_get_f32p32,    eet_data_put_f32p32   },
-     {sizeof(Eina_F16p16),"f16p16",    eet_data_get_f16p16,    eet_data_put_f16p16   },
-     {sizeof(Eina_F8p24),"f8p24",      eet_data_get_f8p24,     eet_data_put_f8p24    }
+   {sizeof(char),      "char",       eet_data_get_char,      eet_data_put_char     },
+   {sizeof(short),     "short",      eet_data_get_short,     eet_data_put_short    },
+   {sizeof(int),       "int",        eet_data_get_int,       eet_data_put_int      },
+   {sizeof(long long), "long_long",  eet_data_get_long_long, eet_data_put_long_long},
+   {sizeof(float),     "float",      eet_data_get_float,     eet_data_put_float    },
+   {sizeof(double),    "double",     eet_data_get_double,    eet_data_put_double   },
+   {sizeof(char),      "uchar",      eet_data_get_char,      eet_data_put_char     },
+   {sizeof(short),     "ushort",     eet_data_get_short,     eet_data_put_short    },
+   {sizeof(int),       "uint",       eet_data_get_int,       eet_data_put_int      },
+   {sizeof(long long), "ulong_long", eet_data_get_long_long, eet_data_put_long_long},
+   {sizeof(char *),    "string",     eet_data_get_string,    eet_data_put_string   },
+   {sizeof(char *),    "inlined",    eet_data_get_istring,   eet_data_put_istring  },
+   {sizeof(void *),    "NULL",       eet_data_get_null,      eet_data_put_null     },
+   {sizeof(Eina_F32p32),"f32p32",    eet_data_get_f32p32,    eet_data_put_f32p32   },
+   {sizeof(Eina_F16p16),"f16p16",    eet_data_get_f16p16,    eet_data_put_f16p16   },
+   {sizeof(Eina_F8p24),"f8p24",      eet_data_get_f8p24,     eet_data_put_f8p24    }
 };
 
 static const Eet_Data_Group_Type_Codec eet_group_codec[] =
 {
-     { eet_data_get_unknown,  eet_data_put_unknown },
-     { eet_data_get_array,    eet_data_put_array },
-     { eet_data_get_array,    eet_data_put_array },
-     { eet_data_get_list,     eet_data_put_list },
-     { eet_data_get_hash,     eet_data_put_hash },
-     { eet_data_get_union,    eet_data_put_union },
-     { eet_data_get_variant,  eet_data_put_variant }
+   { eet_data_get_unknown,  eet_data_put_unknown },
+   { eet_data_get_array,    eet_data_put_array },
+   { eet_data_get_array,    eet_data_put_array },
+   { eet_data_get_list,     eet_data_put_list },
+   { eet_data_get_hash,     eet_data_put_hash },
+   { eet_data_get_union,    eet_data_put_union },
+   { eet_data_get_variant,  eet_data_put_variant }
 };
 
 static int _eet_data_words_bigendian = -1;
 
 /*---*/
 
-#define SWAP64(x) (x) = \
-   ((((unsigned long long)(x) & 0x00000000000000ffULL ) << 56) |\
-       (((unsigned long long)(x) & 0x000000000000ff00ULL ) << 40) |\
-       (((unsigned long long)(x) & 0x0000000000ff0000ULL ) << 24) |\
-       (((unsigned long long)(x) & 0x00000000ff000000ULL ) << 8) |\
-       (((unsigned long long)(x) & 0x000000ff00000000ULL ) >> 8) |\
-       (((unsigned long long)(x) & 0x0000ff0000000000ULL ) >> 24) |\
-       (((unsigned long long)(x) & 0x00ff000000000000ULL ) >> 40) |\
-       (((unsigned long long)(x) & 0xff00000000000000ULL ) >> 56))
-#define SWAP32(x) (x) = \
-   ((((int)(x) & 0x000000ff ) << 24) |\
-       (((int)(x) & 0x0000ff00 ) << 8) |\
-       (((int)(x) & 0x00ff0000 ) >> 8) |\
-       (((int)(x) & 0xff000000 ) >> 24))
-#define SWAP16(x) (x) = \
-   ((((short)(x) & 0x00ff ) << 8) |\
-       (((short)(x) & 0xff00 ) >> 8))
+#define SWAP64(x) (x) =\
+   ((((unsigned long long)(x) & 0x00000000000000ffULL) << 56) |\
+    (((unsigned long long)(x) & 0x000000000000ff00ULL) << 40) |\
+    (((unsigned long long)(x) & 0x0000000000ff0000ULL) << 24) |\
+    (((unsigned long long)(x) & 0x00000000ff000000ULL) << 8) |\
+    (((unsigned long long)(x) & 0x000000ff00000000ULL) >> 8) |\
+    (((unsigned long long)(x) & 0x0000ff0000000000ULL) >> 24) |\
+    (((unsigned long long)(x) & 0x00ff000000000000ULL) >> 40) |\
+    (((unsigned long long)(x) & 0xff00000000000000ULL) >> 56))
+#define SWAP32(x) (x) =\
+   ((((int)(x) & 0x000000ff) << 24) |\
+    (((int)(x) & 0x0000ff00) << 8) |\
+    (((int)(x) & 0x00ff0000) >> 8) |\
+    (((int)(x) & 0xff000000) >> 24))
+#define SWAP16(x) (x) =\
+   ((((short)(x) & 0x00ff) << 8) |\
+    (((short)(x) & 0xff00) >> 8))
 
 #ifdef CONV8
 # undef CONV8
-#endif
+#endif /* ifdef CONV8 */
 #ifdef CONV16
 # undef CONV16
-#endif
+#endif /* ifdef CONV16 */
 #ifdef CONV32
 # undef CONV32
-#endif
+#endif /* ifdef CONV32 */
 #ifdef CONV64
 # undef CONV64
-#endif
+#endif /* ifdef CONV64 */
 
 #define CONV8(x)
-#define CONV16(x) {if (_eet_data_words_bigendian) SWAP16(x);}
-#define CONV32(x) {if (_eet_data_words_bigendian) SWAP32(x);}
-#define CONV64(x) {if (_eet_data_words_bigendian) SWAP64(x);}
-
-#define IS_SIMPLE_TYPE(Type)    (Type > EET_T_UNKNOW && Type < EET_T_LAST)
-#define IS_POINTER_TYPE(Type)    (Type >= EET_T_STRING && Type <= EET_T_NULL)
-
-#define POINTER_TYPE_DECODE(Context, Ed, Edd, Ede, Echnk, Type, Data, P, Size, Label) \
-  {                                                    \
-     int ___r;                                         \
-     ___r = eet_data_get_unknown(Context,              \
-                                Ed,                    \
-                                Edd, Ede,              \
-                                Echnk,                 \
-                                Type, EET_G_UNKNOWN,   \
-                                Data, P, Size);        \
-     if (!___r) goto Label;                            \
-  }
-
-#define STRUCT_TYPE_DECODE(Data_Ret, Context, Ed, Ede, Data, Size, Label) \
-  Data_Ret = _eet_data_descriptor_decode(Context,                      \
-                                        Ed,                            \
-                                        Ede,                           \
-                                        Data,                          \
-                                        Size);                         \
-  if (!Data_Ret) goto Label;
-
-#define EET_I_STRING           1 << 4
-#define EET_I_INLINED_STRING   2 << 4
-#define EET_I_NULL             3 << 4
-
-#define EET_MAGIC_VARIANT 0xF1234BC
+#define CONV16(x)             {if (_eet_data_words_bigendian) {SWAP16(x); }}
+#define CONV32(x)             {if (_eet_data_words_bigendian) {SWAP32(x); }}
+#define CONV64(x)             {if (_eet_data_words_bigendian) {SWAP64(x); }}
+
+#define IS_SIMPLE_TYPE(Type)  (Type > EET_T_UNKNOW && Type < EET_T_LAST)
+#define IS_POINTER_TYPE(Type) (Type >= EET_T_STRING && Type <= EET_T_NULL)
+
+#define POINTER_TYPE_DECODE(Context,\
+                            Ed,\
+                            Edd,\
+                            Ede,\
+                            Echnk,\
+                            Type,\
+                            Data,\
+                            P,\
+                            Size,\
+                            Label)\
+   do {\
+        int ___r;\
+        ___r = eet_data_get_unknown(Context,\
+                                    Ed,\
+                                    Edd, Ede,\
+                                    Echnk,\
+                                    Type, EET_G_UNKNOWN,\
+                                    Data, P, Size);\
+        if (!___r) { goto Label; }\
+     } while (0)
+
+#define STRUCT_TYPE_DECODE(Data_Ret, Context, Ed, Ede, Data, Size, Label)\
+   do {\
+        Data_Ret = _eet_data_descriptor_decode(Context,\
+                                               Ed,\
+                                               Ede,\
+                                               Data,\
+                                               Size);\
+        if (!Data_Ret) { goto Label; }\
+     } while (0)
+
+#define EET_I_STRING         1 << 4
+#define EET_I_INLINED_STRING 2 << 4
+#define EET_I_NULL           3 << 4
+
+#define EET_MAGIC_VARIANT    0xF1234BC
 /*---*/
 
 /* CHAR TYPE */
 static int
-eet_data_get_char(const Eet_Dictionary *ed __UNUSED__, const void *src, const void *src_end, void *dst)
+eet_data_get_char(const Eet_Dictionary *ed __UNUSED__,
+                  const void              *src,
+                  const void              *src_end,
+                  void                    *dst)
 {
    char *s, *d;
 
-   if (((char *)src + sizeof(char)) > (char *)src_end) return -1;
+   if (((char *)src + sizeof(char)) > (char *)src_end)
+      return -1;
+
    s = (char *)src;
    d = (char *)dst;
    *d = *s;
    CONV8(*d);
    return sizeof(char);
-}
+} /* eet_data_get_char */
 
 static void *
-eet_data_put_char(Eet_Dictionary *ed __UNUSED__, const void *src, int *size_ret)
+eet_data_put_char(Eet_Dictionary *ed __UNUSED__,
+                  const void        *src,
+                  int               *size_ret)
 {
    char *s, *d;
 
    d = (char *)malloc(sizeof(char));
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
+
    s = (char *)src;
    *d = *s;
    CONV8(*d);
    *size_ret = sizeof(char);
    return d;
-}
+} /* eet_data_put_char */
 
 /* SHORT TYPE */
 static int
-eet_data_get_short(const Eet_Dictionary *ed __UNUSED__, const void *src, const void *src_end, void *dst)
+eet_data_get_short(const Eet_Dictionary *ed __UNUSED__,
+                   const void              *src,
+                   const void              *src_end,
+                   void                    *dst)
 {
    short *d;
 
-   if (((char *)src + sizeof(short)) > (char *)src_end) return -1;
+   if (((char *)src + sizeof(short)) > (char *)src_end)
+      return -1;
+
    memcpy(dst, src, sizeof(short));
    d = (short *)dst;
    CONV16(*d);
    return sizeof(short);
-}
+} /* eet_data_get_short */
 
 static void *
-eet_data_put_short(Eet_Dictionary *ed __UNUSED__, const void *src, int *size_ret)
+eet_data_put_short(Eet_Dictionary *ed __UNUSED__,
+                   const void        *src,
+                   int               *size_ret)
 {
    short *s, *d;
 
    d = (short *)malloc(sizeof(short));
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
+
    s = (short *)src;
    *d = *s;
    CONV16(*d);
    *size_ret = sizeof(short);
    return d;
-}
+} /* eet_data_put_short */
 
 /* INT TYPE */
 static inline int
-eet_data_get_int(const Eet_Dictionary *ed __UNUSED__, const void *src, const void *src_end, void *dst)
+eet_data_get_int(const Eet_Dictionary *ed __UNUSED__,
+                 const void              *src,
+                 const void              *src_end,
+                 void                    *dst)
 {
    int *d;
 
-   if (((char *)src + sizeof(int)) > (char *)src_end) return -1;
+   if (((char *)src + sizeof(int)) > (char *)src_end)
+      return -1;
+
    memcpy(dst, src, sizeof(int));
    d = (int *)dst;
    CONV32(*d);
    return sizeof(int);
-}
+} /* eet_data_get_int */
 
 static void *
-eet_data_put_int(Eet_Dictionary *ed __UNUSED__, const void *src, int *size_ret)
+eet_data_put_int(Eet_Dictionary *ed __UNUSED__,
+                 const void        *src,
+                 int               *size_ret)
 {
    int *s, *d;
 
    d = (int *)malloc(sizeof(int));
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
+
    s = (int *)src;
    *d = *s;
    CONV32(*d);
    *size_ret = sizeof(int);
    return d;
-}
+} /* eet_data_put_int */
 
 /* LONG LONG TYPE */
 static int
-eet_data_get_long_long(const Eet_Dictionary *ed __UNUSED__, const void *src, const void *src_end, void *dst)
+eet_data_get_long_long(const Eet_Dictionary *ed __UNUSED__,
+                       const void              *src,
+                       const void              *src_end,
+                       void                    *dst)
 {
    unsigned long long *d;
 
-   if (((char *)src + sizeof(unsigned long long)) > (char *)src_end) return -1;
+   if (((char *)src + sizeof(unsigned long long)) > (char *)src_end)
+      return -1;
+
    memcpy(dst, src, sizeof(unsigned long long));
    d = (unsigned long long *)dst;
    CONV64(*d);
    return sizeof(unsigned long long);
-}
+} /* eet_data_get_long_long */
 
 static void *
-eet_data_put_long_long(Eet_Dictionary *ed __UNUSED__, const void *src, int *size_ret)
+eet_data_put_long_long(Eet_Dictionary *ed __UNUSED__,
+                       const void        *src,
+                       int               *size_ret)
 {
    unsigned long long *s, *d;
 
    d = (unsigned long long *)malloc(sizeof(unsigned long long));
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
+
    s = (unsigned long long *)src;
    *d = *s;
    CONV64(*d);
    *size_ret = sizeof(unsigned long long);
    return d;
-}
+} /* eet_data_put_long_long */
 
 /* STRING TYPE */
 static inline int
-eet_data_get_string_hash(const Eet_Dictionary *ed, const void *src, const void *src_end)
+eet_data_get_string_hash(const Eet_Dictionary *ed,
+                         const void           *src,
+                         const void           *src_end)
 {
    if (ed)
      {
-        int               idx;
+        int idx;
 
-        if (eet_data_get_int(ed, src, src_end, &idx) < 0) return -1;
+        if (eet_data_get_int(ed, src, src_end, &idx) < 0)
+           return -1;
 
         return eet_dictionary_string_get_hash(ed, idx);
      }
 
    return -1;
-}
+} /* eet_data_get_string_hash */
 
 static inline int
-eet_data_get_string(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_string(const Eet_Dictionary *ed,
+                    const void           *src,
+                    const void           *src_end,
+                    void                 *dst)
 {
    char *s, **d;
 
@@ -501,16 +720,17 @@ eet_data_get_string(const Eet_Dictionary *ed, const void *src, const void *src_e
 
    if (ed)
      {
-        const char       *str;
-        int               idx;
+        const char *str;
+        int idx;
 
-        if (eet_data_get_int(ed, src, src_end, &idx) < 0) return -1;
+        if (eet_data_get_int(ed, src, src_end, &idx) < 0)
+           return -1;
 
         str = eet_dictionary_string_get_char(ed, idx);
         if (str == NULL)
-          return -1;
+           return -1;
 
-        *d = (char *) str;
+        *d = (char *)str;
         return eet_dictionary_string_get_size(ed, idx);
      }
 
@@ -523,69 +743,87 @@ eet_data_get_string(const Eet_Dictionary *ed, const void *src, const void *src_e
 
    *d = s;
    return strlen(s) + 1;
-}
+} /* eet_data_get_string */
 
 static void *
-eet_data_put_string(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_string(Eet_Dictionary *ed,
+                    const void     *src,
+                    int            *size_ret)
 {
    char *s, *d;
    int len;
 
    if (ed)
      {
-        const char      *str;
-        int              idx;
+        const char *str;
+        int idx;
 
-        str = *((const char **) src);
-        if (!str) return NULL;
+        str = *((const char **)src);
+        if (!str)
+           return NULL;
 
         idx = eet_dictionary_string_add(ed, str);
-        if (idx == -1) return NULL;
+        if (idx == -1)
+           return NULL;
 
         return eet_data_put_int(ed, &idx, size_ret);
      }
 
    s = (char *)(*((char **)src));
-   if (!s) return NULL;
+   if (!s)
+      return NULL;
+
    len = strlen(s);
    d = malloc(len + 1);
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
+
    memcpy(d, s, len + 1);
    *size_ret = len + 1;
    return d;
-}
+} /* eet_data_put_string */
 
 /* ALWAYS INLINED STRING TYPE */
 static int
-eet_data_get_istring(const Eet_Dictionary *ed __UNUSED__, const void *src, const void *src_end, void *dst)
+eet_data_get_istring(const Eet_Dictionary *ed __UNUSED__,
+                     const void              *src,
+                     const void              *src_end,
+                     void                    *dst)
 {
    return eet_data_get_string(NULL, src, src_end, dst);
-}
+} /* eet_data_get_istring */
 
 static void *
-eet_data_put_istring(Eet_Dictionary *ed __UNUSED__, const void *src, int *size_ret)
+eet_data_put_istring(Eet_Dictionary *ed __UNUSED__,
+                     const void        *src,
+                     int               *size_ret)
 {
    return eet_data_put_string(NULL, src, size_ret);
-}
+} /* eet_data_put_istring */
 
 /* ALWAYS NULL TYPE */
 static int
-eet_data_get_null(const Eet_Dictionary *ed __UNUSED__, const void *src __UNUSED__, const void *src_end __UNUSED__, void *dst)
+eet_data_get_null(const Eet_Dictionary *ed __UNUSED__,
+                  const void *src          __UNUSED__,
+                  const void *src_end      __UNUSED__,
+                  void                    *dst)
 {
    char **d;
 
-   d = (char**) dst;
+   d = (char **)dst;
 
    *d = NULL;
    return 1;
-}
+} /* eet_data_get_null */
 
 static void *
-eet_data_put_null(Eet_Dictionary *ed __UNUSED__, const void *src __UNUSED__, int *size_ret)
+eet_data_put_null(Eet_Dictionary *ed __UNUSED__,
+                  const void *src    __UNUSED__,
+                  int               *size_ret)
 {
    *size_ret = 0;
    return NULL;
-}
+} /* eet_data_put_null */
 
 /**
  * Fast lookups of simple doubles/floats.
@@ -594,291 +832,359 @@ eet_data_put_null(Eet_Dictionary *ed __UNUSED__, const void *src __UNUSED__, int
  * values, but have a so simple math that is almost as fast.
  */
 static inline int
-_eet_data_float_cache_get(const char *s, int len, float *d)
+_eet_data_float_cache_get(const char *s,
+                          int         len,
+                          float      *d)
 {
    /* fast handle of simple case 0xMp+E*/
    if ((len == 6) && (s[0] == '0') && (s[1] == 'x') && (s[3] == 'p'))
      {
-       int mantisse = (s[2] >= 'a') ? (s[2] - 'a' + 10) : (s[2] - '0');
-       int exponent = (s[5] - '0');
+        int mantisse = (s[2] >= 'a') ? (s[2] - 'a' + 10) : (s[2] - '0');
+        int exponent = (s[5] - '0');
 
-       if (s[4] == '+') *d = (float)(mantisse << exponent);
-       else             *d = (float)mantisse / (float)(1 << exponent);
+        if (s[4] == '+')
+           *d = (float)(mantisse << exponent);
+        else
+           *d = (float)mantisse / (float)(1 << exponent);
 
-       return 1;
+        return 1;
      }
+
    return 0;
-}
+} /* _eet_data_float_cache_get */
 
 static inline int
-_eet_data_double_cache_get(const char *s, int len, double *d)
+_eet_data_double_cache_get(const char *s,
+                           int         len,
+                           double     *d)
 {
    /* fast handle of simple case 0xMp+E*/
    if ((len == 6) && (s[0] == '0') && (s[1] == 'x') && (s[3] == 'p'))
      {
-       int mantisse = (s[2] >= 'a') ? (s[2] - 'a' + 10) : (s[2] - '0');
-       int exponent = (s[5] - '0');
+        int mantisse = (s[2] >= 'a') ? (s[2] - 'a' + 10) : (s[2] - '0');
+        int exponent = (s[5] - '0');
 
-       if (s[4] == '+') *d = (double)(mantisse << exponent);
-       else             *d = (double)mantisse / (double)(1 << exponent);
+        if (s[4] == '+')
+           *d = (double)(mantisse << exponent);
+        else
+           *d = (double)mantisse / (double)(1 << exponent);
 
-       return 1;
+        return 1;
      }
+
    return 0;
-}
+} /* _eet_data_double_cache_get */
 
 /* FLOAT TYPE */
 static int
-eet_data_get_float(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_float(const Eet_Dictionary *ed,
+                   const void           *src,
+                   const void           *src_end,
+                   void                 *dst)
 {
-   float        *d;
-   int           idx;
+   float *d;
+   int idx;
 
-   d = (float *) dst;
+   d = (float *)dst;
    if (!ed)
      {
-        const char   *s, *p;
-        long long     mantisse;
-        long          exponent;
-        int           len;
+        const char *s, *p;
+        long long mantisse;
+        long exponent;
+        int len;
 
         s = (const char *)src;
         p = s;
         len = 0;
-        while ((p < (const char *)src_end) && (*p != 0)) {len++; p++;}
+        while ((p < (const char *)src_end) && (*p != 0)) {len++; p++; }
+
+        if (_eet_data_float_cache_get(s, len, d) != 0)
+           return len + 1;
 
-        if (_eet_data_float_cache_get(s, len, d) != 0) return len + 1;
+        if (eina_convert_atod(s, len, &mantisse, &exponent) == EINA_FALSE)
+           return -1;
 
-       if (eina_convert_atod(s, len, &mantisse, &exponent) == EINA_FALSE) return -1;
         *d = (float)ldexp((double)mantisse, exponent);
 
         return len + 1;
      }
 
-   if (eet_data_get_int(ed, src, src_end, &idx) < 0) return -1;
+   if (eet_data_get_int(ed, src, src_end, &idx) < 0)
+      return -1;
 
    if (!eet_dictionary_string_get_float(ed, idx, d))
-     return -1;
+      return -1;
+
    return 1;
-}
+} /* eet_data_get_float */
 
 static void *
-eet_data_put_float(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_float(Eet_Dictionary *ed,
+                   const void     *src,
+                   int            *size_ret)
 {
-   char  buf[128];
-   int   idx;
+   char buf[128];
+   int idx;
 
    eina_convert_dtoa((double)(*(float *)src), buf);
 
    if (!ed)
      {
-        char    *d;
-        int      len;
+        char *d;
+        int len;
 
         len = strlen(buf);
         d = malloc(len + 1);
-        if (!d) return NULL;
-       memcpy(d, buf, len + 1);
+        if (!d)
+           return NULL;
+
+        memcpy(d, buf, len + 1);
         *size_ret = len + 1;
         return d;
      }
 
    idx = eet_dictionary_string_add(ed, buf);
-   if (idx == -1) return NULL;
+   if (idx == -1)
+      return NULL;
 
    return eet_data_put_int(ed, &idx, size_ret);
-}
+} /* eet_data_put_float */
 
 /* DOUBLE TYPE */
 static int
-eet_data_get_double(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_double(const Eet_Dictionary *ed,
+                    const void           *src,
+                    const void           *src_end,
+                    void                 *dst)
 {
-   double       *d;
-   int           idx;
+   double *d;
+   int idx;
 
-   d = (double *) dst;
+   d = (double *)dst;
 
    if (!ed)
      {
-        const char     *s, *p;
-        long long       mantisse = 0;
-        long            exponent = 0;
-        int             len;
+        const char *s, *p;
+        long long mantisse = 0;
+        long exponent = 0;
+        int len;
 
-        s = (const char *) src;
+        s = (const char *)src;
         p = s;
         len = 0;
-        while ((p < (const char *)src_end) && (*p != 0)) {len++; p++;}
+        while ((p < (const char *)src_end) && (*p != 0)) {len++; p++; }
 
-        if (_eet_data_double_cache_get(s, len, d) != 0) return len + 1;
+        if (_eet_data_double_cache_get(s, len, d) != 0)
+           return len + 1;
 
-       if (eina_convert_atod(s, len, &mantisse, &exponent) == EINA_FALSE) return -1;
-        *d = ldexp((double) mantisse, exponent);
+        if (eina_convert_atod(s, len, &mantisse, &exponent) == EINA_FALSE)
+           return -1;
+
+        *d = ldexp((double)mantisse, exponent);
 
         return len + 1;
      }
 
-   if (eet_data_get_int(ed, src, src_end, &idx) < 0) return -1;
+   if (eet_data_get_int(ed, src, src_end, &idx) < 0)
+      return -1;
 
    if (!eet_dictionary_string_get_double(ed, idx, d))
-     return -1;
+      return -1;
+
    return 1;
-}
+} /* eet_data_get_double */
 
 static void *
-eet_data_put_double(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_double(Eet_Dictionary *ed,
+                    const void     *src,
+                    int            *size_ret)
 {
-   char  buf[128];
-   int   idx;
+   char buf[128];
+   int idx;
 
    eina_convert_dtoa((double)(*(double *)src), buf);
 
    if (!ed)
      {
-        char   *d;
-        int     len;
+        char *d;
+        int len;
 
         len = strlen(buf);
         d = malloc(len + 1);
-        if (!d) return NULL;
-       memcpy(d, buf, len + 1);
+        if (!d)
+           return NULL;
+
+        memcpy(d, buf, len + 1);
         *size_ret = len + 1;
 
         return d;
      }
 
    idx = eet_dictionary_string_add(ed, buf);
-   if (idx == -1) return NULL;
+   if (idx == -1)
+      return NULL;
 
    return eet_data_put_int(ed, &idx, size_ret);
-}
+} /* eet_data_put_double */
 
 static int
-eet_data_get_f32p32(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_f32p32(const Eet_Dictionary *ed,
+                    const void           *src,
+                    const void           *src_end,
+                    void                 *dst)
 {
    Eina_F32p32 *fp;
    int idx;
 
-   fp = (Eina_F32p32*) dst;
+   fp = (Eina_F32p32 *)dst;
 
    if (!ed)
      {
-       const char *s, *p;
-       int len;
+        const char *s, *p;
+        int len;
 
-       s = (const char *) src;
-       p = s;
-       len = 0;
-       while ((p < (const char *)src_end) && (*p != 0)) { len++; p++; }
+        s = (const char *)src;
+        p = s;
+        len = 0;
+        while ((p < (const char *)src_end) && (*p != 0)) { len++; p++; }
 
-       if (!(eina_convert_atofp(s, len, fp)))
-         return -1;
-       return 1;
+        if (!(eina_convert_atofp(s, len, fp)))
+           return -1;
+
+        return 1;
      }
 
-   if (eet_data_get_int(ed, src, src_end, &idx) < 0) return -1;
+   if (eet_data_get_int(ed, src, src_end, &idx) < 0)
+      return -1;
 
    if (!eet_dictionary_string_get_fp(ed, idx, fp))
-     return -1;
+      return -1;
+
    return 1;
-}
+} /* eet_data_get_f32p32 */
 
 static void *
-eet_data_put_f32p32(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_f32p32(Eet_Dictionary *ed,
+                    const void     *src,
+                    int            *size_ret)
 {
-   char  buf[128];
-   int   idx;
+   char buf[128];
+   int idx;
 
    eina_convert_fptoa((Eina_F32p32)(*(Eina_F32p32 *)src), buf);
 
    if (!ed)
      {
-       char *d;
-       int len;
+        char *d;
+        int len;
 
-       len = strlen(buf);
-       d = malloc(len + 1);
-       if (!d) return NULL;
-       memcpy(d, buf, len + 1);
-       *size_ret = len + 1;
+        len = strlen(buf);
+        d = malloc(len + 1);
+        if (!d)
+           return NULL;
+
+        memcpy(d, buf, len + 1);
+        *size_ret = len + 1;
 
-       return d;
+        return d;
      }
 
    idx = eet_dictionary_string_add(ed, buf);
-   if (idx == -1) return NULL;
+   if (idx == -1)
+      return NULL;
 
    return eet_data_put_int(ed, &idx, size_ret);
-}
+} /* eet_data_put_f32p32 */
 
 static int
-eet_data_get_f16p16(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_f16p16(const Eet_Dictionary *ed,
+                    const void           *src,
+                    const void           *src_end,
+                    void                 *dst)
 {
    Eina_F32p32 tmp;
    Eina_F16p16 *fp;
 
-   fp = (Eina_F16p16*) dst;
+   fp = (Eina_F16p16 *)dst;
 
-   if (eet_data_get_f32p32(ed, src, src_end, &tmp) < 0) return -1;
+   if (eet_data_get_f32p32(ed, src, src_end, &tmp) < 0)
+      return -1;
 
    *fp = eina_f32p32_to_f16p16(tmp);
    return 1;
-}
+} /* eet_data_get_f16p16 */
 
 static void *
-eet_data_put_f16p16(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_f16p16(Eet_Dictionary *ed,
+                    const void     *src,
+                    int            *size_ret)
 {
    Eina_F32p32 tmp;
 
    tmp = eina_f16p16_to_f32p32((Eina_F16p16)(*(Eina_F16p16 *)src));
    return eet_data_put_f32p32(ed, &tmp, size_ret);
-}
+} /* eet_data_put_f16p16 */
 
 static int
-eet_data_get_f8p24(const Eet_Dictionary *ed, const void *src, const void *src_end, void *dst)
+eet_data_get_f8p24(const Eet_Dictionary *ed,
+                   const void           *src,
+                   const void           *src_end,
+                   void                 *dst)
 {
    Eina_F32p32 tmp;
    Eina_F8p24 *fp;
 
-   fp = (Eina_F8p24*) dst;
+   fp = (Eina_F8p24 *)dst;
 
-   if (eet_data_get_f32p32(ed, src, src_end, &tmp) < 0) return -1;
+   if (eet_data_get_f32p32(ed, src, src_end, &tmp) < 0)
+      return -1;
 
    *fp = eina_f32p32_to_f8p24(tmp);
    return 1;
-}
+} /* eet_data_get_f8p24 */
 
 static void *
-eet_data_put_f8p24(Eet_Dictionary *ed, const void *src, int *size_ret)
+eet_data_put_f8p24(Eet_Dictionary *ed,
+                   const void     *src,
+                   int            *size_ret)
 {
    Eina_F32p32 tmp;
 
    tmp = eina_f8p24_to_f32p32((Eina_F8p24)(*(Eina_F8p24 *)src));
    return eet_data_put_f32p32(ed, &tmp, size_ret);
-}
+} /* eet_data_put_f8p24 */
 
 static inline int
-eet_data_get_type(const Eet_Dictionary *ed, int type, const void *src, const void *src_end, void *dest)
+eet_data_get_type(const Eet_Dictionary *ed,
+                  int                   type,
+                  const void           *src,
+                  const void           *src_end,
+                  void                 *dest)
 {
    int ret;
 
    ret = eet_basic_codec[type - 1].get(ed, src, src_end, dest);
    return ret;
-}
+} /* eet_data_get_type */
 
 static inline void *
-eet_data_put_type(Eet_Dictionary *ed, int type, const void *src, int *size_ret)
+eet_data_put_type(Eet_Dictionary *ed,
+                  int             type,
+                  const void     *src,
+                  int            *size_ret)
 {
    void *ret;
 
    ret = eet_basic_codec[type - 1].put(ed, src, size_ret);
    return ret;
-}
+} /* eet_data_put_type */
 
 static inline Eina_Bool
-eet_data_type_match(int type1, int type2)
+eet_data_type_match(int type1,
+                    int type2)
 {
-   if (type1 == type2) return EINA_TRUE;
+   if (type1 == type2)
+      return EINA_TRUE;
 
    /* Note: All floating point type are equivalent and could be read
       without problem by any other floating point getter. */
@@ -889,24 +1195,26 @@ eet_data_type_match(int type1, int type2)
       case EET_T_F32P32:
       case EET_T_F16P16:
       case EET_T_F8P24:
-        switch (type2)
-          {
-           case EET_T_FLOAT:
-           case EET_T_DOUBLE:
-           case EET_T_F32P32:
-           case EET_T_F16P16:
-           case EET_T_F8P24:
-              return EINA_TRUE;
-           default:
-              break;
-          }
-        break;
+         switch (type2)
+           {
+            case EET_T_FLOAT:
+            case EET_T_DOUBLE:
+            case EET_T_F32P32:
+            case EET_T_F16P16:
+            case EET_T_F8P24:
+               return EINA_TRUE;
+
+            default:
+               break;
+           } /* switch */
+         break;
+
       default:
-        break;
-     }
+         break;
+     } /* switch */
 
    return EINA_FALSE;
-}
+} /* eet_data_type_match */
 
 /* chunk format...
  *
@@ -922,64 +1230,77 @@ eet_data_type_match(int type1, int type2)
  */
 
 static inline void
-eet_data_chunk_get(const Eet_Dictionary *ed, Eet_Data_Chunk *chnk,
-                  const void *src, int size)
+eet_data_chunk_get(const Eet_Dictionary *ed,
+                   Eet_Data_Chunk       *chnk,
+                   const void           *src,
+                   int                   size)
 {
    const char *s;
    int ret1, ret2;
 
-   if (!src) return;
-   if (size <= 8) return;
-   if (!chnk) return;
+   if (!src)
+      return;
+
+   if (size <= 8)
+      return;
+
+   if (!chnk)
+      return;
 
    s = src;
    if (s[2] == 'K')
      {
-       if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'K'))
-         return;
-
-       chnk->type = (unsigned char)(s[3]);
-       if (chnk->type >= EET_I_LIMIT)
-         {
-            chnk->group_type = ((chnk->type - EET_I_LIMIT) & 0xF) + EET_G_UNKNOWN;
-            switch ((chnk->type - EET_I_LIMIT) & 0xF0)
-              {
-#define EET_UNMATCH_TYPE(Type) \
-                 case EET_I_##Type: chnk->type = EET_T_##Type; break;
-
-                 EET_UNMATCH_TYPE(STRING);
-                 EET_UNMATCH_TYPE(INLINED_STRING);
-                 EET_UNMATCH_TYPE(NULL);
-               default:
-                  return;
-              }
-         }
-       else if (chnk->type > EET_T_LAST)
-         {
-            chnk->group_type = chnk->type;
-            chnk->type = EET_T_UNKNOW;
-         }
-       else
-         chnk->group_type = EET_G_UNKNOWN;
-       if ((chnk->type >= EET_T_LAST) ||
-           (chnk->group_type >= EET_G_LAST))
-         {
-            chnk->type = 0;
-            chnk->group_type = 0;
-         }
-     }
-   else
-     {
-       if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'n') || (s[3] != 'K'))
-         return;
+        if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'K'))
+           return;
+
+        chnk->type = (unsigned char)(s[3]);
+        if (chnk->type >= EET_I_LIMIT)
+          {
+             chnk->group_type =
+                ((chnk->type - EET_I_LIMIT) & 0xF) + EET_G_UNKNOWN;
+             switch ((chnk->type - EET_I_LIMIT) & 0xF0)
+               {
+#define EET_UNMATCH_TYPE(Type)\
+ case EET_I_ ## Type: chnk->type = EET_T_ ## Type; break;
+
+                  EET_UNMATCH_TYPE(STRING);
+                  EET_UNMATCH_TYPE(INLINED_STRING);
+                  EET_UNMATCH_TYPE(NULL);
+
+                default:
+                   return;
+               } /* switch */
+          }
+        else if (chnk->type > EET_T_LAST)
+          {
+             chnk->group_type = chnk->type;
+             chnk->type = EET_T_UNKNOW;
+          }
+        else
+           chnk->group_type = EET_G_UNKNOWN;
+        if ((chnk->type >= EET_T_LAST) ||
+            (chnk->group_type >=
+             EET_G_LAST))
+          {
+             chnk->type = 0;
+             chnk->group_type = 0;
+          }
      }
+   else if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'n') || (s[3] != 'K'))
+      return;
+
    ret1 = eet_data_get_type(ed, EET_T_INT, (s + 4), (s + size), &(chnk->size));
 
-   if (ret1 <= 0) return;
-   if ((chnk->size < 0) || ((chnk->size + 8) > size)) return;
+   if (ret1 <= 0)
+      return;
+
+   if ((chnk->size < 0) || ((chnk->size + 8) > size))
+      return;
+
    ret2 = eet_data_get_type(ed, EET_T_STRING, (s + 8), (s + size), &(chnk->name));
 
-   if (ret2 <= 0) return;
+   if (ret2 <= 0)
+      return;
 
    chnk->len = ret2;
 
@@ -998,23 +1319,30 @@ eet_data_chunk_get(const Eet_Dictionary *ed, Eet_Data_Chunk *chnk,
      }
 
    return;
-}
+} /* eet_data_chunk_get */
 
 static inline Eet_Data_Chunk *
-eet_data_chunk_new(void *data, int size, const char *name, int type, int group_type)
+eet_data_chunk_new(void       *data,
+                   int         size,
+                   const char *name,
+                   int         type,
+                   int         group_type)
 {
    Eet_Data_Chunk *chnk;
 
-   if (!name) return NULL;
+   if (!name)
+      return NULL;
+
    chnk = calloc(1, sizeof(Eet_Data_Chunk));
-   if (!chnk) return NULL;
+   if (!chnk)
+      return NULL;
 
    /* Note: Another security, so older eet library could read file
-    saved with fixed point value. */
+      saved with fixed point value. */
    if (type == EET_T_F32P32
        || type == EET_T_F16P16
        || type == EET_T_F8P24)
-     type = EET_T_DOUBLE;
+      type = EET_T_DOUBLE;
 
    chnk->name = strdup(name);
    chnk->len = strlen(name) + 1;
@@ -1023,14 +1351,16 @@ eet_data_chunk_new(void *data, int size, const char *name, int type, int group_t
    chnk->type = type;
    chnk->group_type = group_type;
    return chnk;
-}
+} /* eet_data_chunk_new */
 
 static inline void
 eet_data_chunk_free(Eet_Data_Chunk *chnk)
 {
-   if (chnk->name) free(chnk->name);
+   if (chnk->name)
+      free(chnk->name);
+
    free(chnk);
-}
+} /* eet_data_chunk_free */
 
 static inline Eet_Data_Stream *
 eet_data_stream_new(void)
@@ -1038,52 +1368,62 @@ eet_data_stream_new(void)
    Eet_Data_Stream *ds;
 
    ds = calloc(1, sizeof(Eet_Data_Stream));
-   if (!ds) return NULL;
+   if (!ds)
+      return NULL;
+
    return ds;
-}
+} /* eet_data_stream_new */
 
 static inline void
 eet_data_stream_free(Eet_Data_Stream *ds)
 {
-   if (ds->data) free(ds->data);
+   if (ds->data)
+      free(ds->data);
+
    free(ds);
-}
+} /* eet_data_stream_free */
 
 static inline void
 eet_data_stream_flush(Eet_Data_Stream *ds)
 {
    free(ds);
-}
+} /* eet_data_stream_flush */
 
 static inline void
-eet_data_stream_write(Eet_Data_Stream *ds, const void *data, int size)
+eet_data_stream_write(Eet_Data_Stream *ds,
+                      const void      *data,
+                      int              size)
 {
    char *p;
 
    if ((ds->pos + size) > ds->size)
      {
-       ds->data = realloc(ds->data, ds->size + size + 512);
-       if (!ds->data)
-         {
-            ds->pos = 0;
-            ds->size = 0;
-            return;
-         }
-       ds->size = ds->size + size + 512;
+        ds->data = realloc(ds->data, ds->size + size + 512);
+        if (!ds->data)
+          {
+             ds->pos = 0;
+             ds->size = 0;
+             return;
+          }
+
+        ds->size = ds->size + size + 512;
      }
+
    p = ds->data;
    memcpy(p + ds->pos, data, size);
    ds->pos += size;
-}
+} /* eet_data_stream_write */
 
 static void
-eet_data_chunk_put(Eet_Dictionary *ed, Eet_Data_Chunk *chnk, Eet_Data_Stream *ds)
+eet_data_chunk_put(Eet_Dictionary  *ed,
+                   Eet_Data_Chunk  *chnk,
+                   Eet_Data_Stream *ds)
 {
-   int  *size;
+   int *size;
    void *string;
-   int   s;
-   int   size_ret = 0;
-   int   string_ret = 0;
+   int s;
+   int size_ret = 0;
+   int string_ret = 0;
    unsigned char buf[4] = "CHK";
 
    /* disable this check - it will allow empty chunks to be written. this is
@@ -1095,33 +1435,35 @@ eet_data_chunk_put(Eet_Dictionary *ed, Eet_Data_Chunk *chnk, Eet_Data_Stream *ds
 /*   eet_data_stream_write(ds, "CHnK", 4);*/
    if (chnk->type != EET_T_UNKNOW)
      {
-       if (chnk->group_type != EET_G_UNKNOWN)
-         {
-            int type = EET_I_LIMIT + chnk->group_type - EET_G_UNKNOWN;
-
-            switch (chnk->type)
-              {
-                 /* Only make sense with pointer type. */
-#define EET_MATCH_TYPE(Type) \
-                 case EET_T_##Type: type += EET_I_##Type; break;
-
-                 EET_MATCH_TYPE(STRING);
-                 EET_MATCH_TYPE(INLINED_STRING);
-                 EET_MATCH_TYPE(NULL);
-               default:
-                  return ;
-              }
-
-            buf[3] = type;
-         }
-       else
-         buf[3] = chnk->type;
+        if (chnk->group_type != EET_G_UNKNOWN)
+          {
+             int type = EET_I_LIMIT + chnk->group_type - EET_G_UNKNOWN;
+
+             switch (chnk->type)
+               {
+                  /* Only make sense with pointer type. */
+#define EET_MATCH_TYPE(Type)\
+ case EET_T_ ## Type: type += EET_I_ ## Type; break;
+
+                  EET_MATCH_TYPE(STRING);
+                  EET_MATCH_TYPE(INLINED_STRING);
+                  EET_MATCH_TYPE(NULL);
+
+                default:
+                   return;
+               } /* switch */
+
+             buf[3] = type;
+          }
+        else
+           buf[3] = chnk->type;
      }
-   else buf[3] = chnk->group_type;
+   else
+      buf[3] = chnk->group_type;
 
    string = eet_data_put_string(ed, &chnk->name, &string_ret);
    if (!string)
-     return ;
+      return;
 
    /* size of chunk payload data + name */
    s = chnk->size + string_ret;
@@ -1129,24 +1471,24 @@ eet_data_chunk_put(Eet_Dictionary *ed, Eet_Data_Chunk *chnk, Eet_Data_Stream *ds
 
    /* FIXME: If something goes wrong the resulting file will be corrupted. */
    if (!size)
-     goto on_error;
+      goto on_error;
 
-   eet_data_stream_write(ds, buf, 4);
+   eet_data_stream_write(ds, buf,    4);
 
    /* write chunk length */
-   eet_data_stream_write(ds, size, size_ret);
+   eet_data_stream_write(ds, size,   size_ret);
 
    /* write chunk name */
    eet_data_stream_write(ds, string, string_ret);
 
    /* write payload */
    if (chnk->data)
-     eet_data_stream_write(ds, chnk->data, chnk->size);
+      eet_data_stream_write(ds, chnk->data, chnk->size);
 
    free(string);
- on_error:
+on_error:
    free(size);
-}
+} /* eet_data_chunk_put */
 
 /*---*/
 
@@ -1156,27 +1498,30 @@ _eet_descriptor_hash_new(Eet_Data_Descriptor *edd)
    int i;
 
    edd->elements.hash.size = 1 << 6;
-   edd->elements.hash.buckets = calloc(1, sizeof(Eet_Data_Descriptor_Hash) * edd->elements.hash.size);
+   edd->elements.hash.buckets = calloc(
+         1,
+         sizeof(Eet_Data_Descriptor_Hash) *
+         edd->elements.hash.size);
    for (i = 0; i < edd->elements.num; i++)
      {
-       Eet_Data_Element *ede;
-       int hash;
-
-       ede = &(edd->elements.set[i]);
-       hash = _eet_hash_gen((char *) ede->name, 6);
-       if (!edd->elements.hash.buckets[hash].element)
-         edd->elements.hash.buckets[hash].element = ede;
-       else
-         {
-            Eet_Data_Descriptor_Hash *bucket;
-
-            bucket = calloc(1, sizeof(Eet_Data_Descriptor_Hash));
-            bucket->element = ede;
-            bucket->next = edd->elements.hash.buckets[hash].next;
-            edd->elements.hash.buckets[hash].next = bucket;
-         }
+        Eet_Data_Element *ede;
+        int hash;
+
+        ede = &(edd->elements.set[i]);
+        hash = _eet_hash_gen((char *)ede->name, 6);
+        if (!edd->elements.hash.buckets[hash].element)
+           edd->elements.hash.buckets[hash].element = ede;
+        else
+          {
+             Eet_Data_Descriptor_Hash *bucket;
+
+             bucket = calloc(1, sizeof(Eet_Data_Descriptor_Hash));
+             bucket->element = ede;
+             bucket->next = edd->elements.hash.buckets[hash].next;
+             edd->elements.hash.buckets[hash].next = bucket;
+          }
      }
-}
+} /* _eet_descriptor_hash_new */
 
 static void
 _eet_descriptor_hash_free(Eet_Data_Descriptor *edd)
@@ -1185,129 +1530,160 @@ _eet_descriptor_hash_free(Eet_Data_Descriptor *edd)
 
    for (i = 0; i < edd->elements.hash.size; i++)
      {
-       Eet_Data_Descriptor_Hash *bucket, *pbucket;
-
-       bucket = edd->elements.hash.buckets[i].next;
-       while (bucket)
-         {
-            pbucket = bucket;
-            bucket = bucket->next;
-            free(pbucket);
-         }
+        Eet_Data_Descriptor_Hash *bucket, *pbucket;
+
+        bucket = edd->elements.hash.buckets[i].next;
+        while (bucket)
+          {
+             pbucket = bucket;
+             bucket = bucket->next;
+             free(pbucket);
+          }
      }
-   if (edd->elements.hash.buckets) free(edd->elements.hash.buckets);
-}
+   if (edd->elements.hash.buckets)
+      free(edd->elements.hash.buckets);
+} /* _eet_descriptor_hash_free */
 
 static Eet_Data_Element *
-_eet_descriptor_hash_find(Eet_Data_Descriptor *edd, char *name, int hash)
+_eet_descriptor_hash_find(Eet_Data_Descriptor *edd,
+                          char                *name,
+                          int                  hash)
 {
    Eet_Data_Descriptor_Hash *bucket;
 
-   if (hash < 0) hash = _eet_hash_gen(name, 6);
-   else hash &= 0x3f;
-   if (!edd->elements.hash.buckets[hash].element) return NULL;
-   /*
-     When we use the dictionnary as a source for chunk name, we will always
-     have the same pointer in name. It's a good idea to just compare pointer
-     instead of running strcmp on both string.
-   */
+   if (hash < 0)
+      hash = _eet_hash_gen(name, 6);
+   else
+      hash &= 0x3f;
+
+   if (!edd->elements.hash.buckets[hash].element)
+      return NULL;  /*
+                       When we use the dictionnary as a source for chunk name, we will always
+                       have the same pointer in name. It's a good idea to just compare pointer
+                       instead of running strcmp on both string.
+                     */
+
    if (edd->elements.hash.buckets[hash].element->directory_name_ptr == name)
-     return edd->elements.hash.buckets[hash].element;
+      return edd->elements.hash.buckets[hash].element;
+
    if (!strcmp(edd->elements.hash.buckets[hash].element->name, name))
      {
-       edd->elements.hash.buckets[hash].element->directory_name_ptr = name;
-       return edd->elements.hash.buckets[hash].element;
+        edd->elements.hash.buckets[hash].element->directory_name_ptr = name;
+        return edd->elements.hash.buckets[hash].element;
      }
+
    bucket = edd->elements.hash.buckets[hash].next;
    while (bucket)
      {
-       if (bucket->element->directory_name_ptr == name) return bucket->element;
-       if (!strcmp(bucket->element->name, name))
-         {
-            bucket->element->directory_name_ptr = name;
-            return bucket->element;
-         }
-       bucket = bucket->next;
+        if (bucket->element->directory_name_ptr == name)
+           return bucket->element;
+
+        if (!strcmp(bucket->element->name, name))
+          {
+             bucket->element->directory_name_ptr = name;
+             return bucket->element;
+          }
+
+        bucket = bucket->next;
      }
    return NULL;
-}
+} /* _eet_descriptor_hash_find */
 
 static void *
 _eet_mem_alloc(size_t size)
 {
    return calloc(1, size);
-}
+} /* _eet_mem_alloc */
 
 static void
 _eet_mem_free(void *mem)
 {
    free(mem);
-}
+} /* _eet_mem_free */
 
 static char *
 _eet_str_alloc(const char *str)
 {
    return strdup(str);
-}
+} /* _eet_str_alloc */
 
 static void
 _eet_str_free(const char *str)
 {
    free((char *)str);
-}
+} /* _eet_str_free */
 
 static Eina_Hash *
-_eet_eina_hash_add_alloc(Eina_Hash *hash, const char *key, void *data)
+_eet_eina_hash_add_alloc(Eina_Hash  *hash,
+                         const char *key,
+                         void       *data)
 {
-   if (!hash) hash = eina_hash_string_small_new(NULL);
-   if (!hash) return NULL;
+   if (!hash)
+      hash = eina_hash_string_small_new(NULL);
+
+   if (!hash)
+      return NULL;
 
    eina_hash_add(hash, key, data);
    return hash;
-}
+} /* _eet_eina_hash_add_alloc */
 
 static Eina_Hash *
-_eet_eina_hash_direct_add_alloc(Eina_Hash *hash, const char *key, void *data)
+_eet_eina_hash_direct_add_alloc(Eina_Hash  *hash,
+                                const char *key,
+                                void       *data)
 {
-   if (!hash) hash = eina_hash_string_small_new(NULL);
-   if (!hash) return NULL;
+   if (!hash)
+      hash = eina_hash_string_small_new(NULL);
+
+   if (!hash)
+      return NULL;
 
    eina_hash_direct_add(hash, key, data);
    return hash;
-}
+} /* _eet_eina_hash_direct_add_alloc */
 
 static char *
 _eet_str_direct_alloc(const char *str)
 {
    return (char *)str;
-}
+} /* _eet_str_direct_alloc */
 
 static void
-_eet_str_direct_free(__UNUSED__ const char *str)
+_eet_str_direct_free(const char *str __UNUSED__)
 {
-}
+} /* _eet_str_direct_free */
 
 static void
-_eet_eina_hash_foreach(void *hash, Eina_Hash_Foreach cb, void *fdata)
+_eet_eina_hash_foreach(void             *hash,
+                       Eina_Hash_Foreach cb,
+                       void             *fdata)
 {
-   if (hash) eina_hash_foreach(hash, cb, fdata);
-}
+   if (hash)
+      eina_hash_foreach(hash, cb, fdata);
+} /* _eet_eina_hash_foreach */
 
 static void
 _eet_eina_hash_free(void *hash)
 {
-   if (hash) eina_hash_free(hash);
-}
+   if (hash)
+      eina_hash_free(hash);
+} /* _eet_eina_hash_free */
 
 /*---*/
 EAPI Eina_Bool
-eet_eina_stream_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc, const char *name, int size)
+eet_eina_stream_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc,
+                                         /* When we change the structure content in the future, we need to handle old structure type too */
+                                         unsigned int               eddc_size,
+                                          const char                *name,
+                                          int                        size)
 {
-   if (!eddc || !name) return EINA_FALSE;
+   if (!eddc || !name || eddc_size != sizeof (Eet_Data_Descriptor_Class))
+      return EINA_FALSE;
 
    eddc->name = name;
    eddc->size = size;
-   eddc->version = 1;
+   eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
 
    eddc->func.mem_alloc = _eet_mem_alloc;
    eddc->func.mem_free = _eet_mem_free;
@@ -1318,36 +1694,47 @@ eet_eina_stream_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc, const
    eddc->func.list_data = (void *(*)(void *))eina_list_data_get;
    eddc->func.list_free = (void *(*)(void *))eina_list_free;
    eddc->func.hash_foreach = (void (*)(void *, int (*)(void *, const char *, void *, void *), void *))_eet_eina_hash_foreach;
-   eddc->func.hash_add = (void* (*)(void *, const char *, void *)) _eet_eina_hash_add_alloc;
+   eddc->func.hash_add = (void * (*)(void *, const char *, void *))_eet_eina_hash_add_alloc;
    eddc->func.hash_free = (void (*)(void *))_eet_eina_hash_free;
 
+   /* This will cause an ABI incompatibility */
+   eddc->func.array_alloc = _eet_mem_alloc;
+   eddc->func.array_free = _eet_mem_free;
+
    return EINA_TRUE;
-}
+} /* eet_eina_stream_data_descriptor_class_set */
 
 EAPI Eina_Bool
-eet_eina_file_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc, const char *name, int size)
+eet_eina_file_data_descriptor_class_set(Eet_Data_Descriptor_Class *eddc,
+                                       /* When we change the structure content in the future, we need to handle old structure type too */
+                                       unsigned int               eddc_size,
+                                        const char                *name,
+                                        int                        size)
 {
-   if (!eet_eina_stream_data_descriptor_class_set(eddc, name, size))
-     return EINA_FALSE;
+   if (!eet_eina_stream_data_descriptor_class_set(eddc, eddc_size, name, size))
+      return EINA_FALSE;
 
-   eddc->version = 2;
+   eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
 
-   eddc->func.hash_add = (void* (*)(void *, const char *, void *)) _eet_eina_hash_direct_add_alloc;
+   eddc->func.hash_add = (void * (*)(void *, const char *, void *))_eet_eina_hash_direct_add_alloc;
    eddc->func.str_direct_alloc = _eet_str_direct_alloc;
    eddc->func.str_direct_free = _eet_str_direct_free;
 
    return EINA_TRUE;
-}
+} /* eet_eina_file_data_descriptor_class_set */
 
 static Eet_Data_Descriptor *
-_eet_data_descriptor_new(const Eet_Data_Descriptor_Class *eddc, int version)
+_eet_data_descriptor_new(const Eet_Data_Descriptor_Class *eddc,
+                         int                              version)
 {
    Eet_Data_Descriptor *edd;
 
-   if (!eddc) return NULL;
+   if (!eddc)
+      return NULL;
 
    edd = calloc(1, sizeof (Eet_Data_Descriptor));
-   if (!edd) return NULL;
+   if (!edd)
+      return NULL;
 
    edd->name = eddc->name;
    edd->ed = NULL;
@@ -1357,13 +1744,17 @@ _eet_data_descriptor_new(const Eet_Data_Descriptor_Class *eddc, int version)
    edd->func.str_alloc = _eet_str_alloc;
    edd->func.str_free = _eet_str_free;
    if (eddc->func.mem_alloc)
-     edd->func.mem_alloc = eddc->func.mem_alloc;
+      edd->func.mem_alloc = eddc->func.mem_alloc;
+
    if (eddc->func.mem_free)
-     edd->func.mem_free = eddc->func.mem_free;
+      edd->func.mem_free = eddc->func.mem_free;
+
    if (eddc->func.str_alloc)
-     edd->func.str_alloc = eddc->func.str_alloc;
+      edd->func.str_alloc = eddc->func.str_alloc;
+
    if (eddc->func.str_free)
-     edd->func.str_free = eddc->func.str_free;
+      edd->func.str_free = eddc->func.str_free;
+
    edd->func.list_next = eddc->func.list_next;
    edd->func.list_append = eddc->func.list_append;
    edd->func.list_data = eddc->func.list_data;
@@ -1374,32 +1765,40 @@ _eet_data_descriptor_new(const Eet_Data_Descriptor_Class *eddc, int version)
 
    if (eddc->version > 1 && version > 1)
      {
-       edd->func.str_direct_alloc = eddc->func.str_direct_alloc;
-       edd->func.str_direct_free = eddc->func.str_direct_free;
+        edd->func.str_direct_alloc = eddc->func.str_direct_alloc;
+        edd->func.str_direct_free = eddc->func.str_direct_free;
      }
+
    if (eddc->version > 2)
      {
-       edd->func.type_get = eddc->func.type_get;
-       edd->func.type_set = eddc->func.type_set;
+        edd->func.type_get = eddc->func.type_get;
+        edd->func.type_set = eddc->func.type_set;
+     }
+
+   if (eddc->version > 3)
+     {
+       edd->func.array_alloc = eddc->func.array_alloc;
+       edd->func.array_free = eddc->func.array_free;
      }
 
    return edd;
-}
+} /* _eet_data_descriptor_new */
 
 EAPI Eet_Data_Descriptor *
 eet_data_descriptor_new(const char *name,
-                       int size,
-                       void *(*func_list_next) (void *l),
-                       void *(*func_list_append) (void *l, void *d),
-                       void *(*func_list_data) (void *l),
-                       void *(*func_list_free) (void *l),
-                       void  (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt),
-                       void *(*func_hash_add) (void *h, const char *k, void *d),
-                       void  (*func_hash_free) (void *h))
+                        int size,
+                        void *(*func_list_next)(void *l),
+                        void *(*func_list_append)(void *l, void *d),
+                        void *(*func_list_data)(void *l),
+                        void *(*func_list_free)(void *l),
+                        void (*func_hash_foreach)(void *h, int (*func)(void *h, const char *k, void *dt, void *fdt), void *fdt),
+                        void *(*func_hash_add)(void *h, const char *k, void *d),
+                        void (*func_hash_free)(void *h))
 {
    Eet_Data_Descriptor_Class eddc;
 
-   if (!name) return NULL;
+   if (!name)
+      return NULL;
 
    memset(&eddc, 0, sizeof (Eet_Data_Descriptor_Class));
 
@@ -1416,88 +1815,95 @@ eet_data_descriptor_new(const char *name,
    eddc.func.hash_free = func_hash_free;
 
    return _eet_data_descriptor_new(&eddc, 0);
-}
+} /* eet_data_descriptor_new */
 
 EAPI Eet_Data_Descriptor *
 eet_data_descriptor2_new(const Eet_Data_Descriptor_Class *eddc)
 {
    return _eet_data_descriptor_new(eddc, 1);
-}
+} /* eet_data_descriptor2_new */
 
 EAPI Eet_Data_Descriptor *
 eet_data_descriptor3_new(const Eet_Data_Descriptor_Class *eddc)
 {
    return _eet_data_descriptor_new(eddc, 2);
-}
+} /* eet_data_descriptor3_new */
 
 EAPI Eet_Data_Descriptor *
 eet_data_descriptor_stream_new(const Eet_Data_Descriptor_Class *eddc)
 {
    return _eet_data_descriptor_new(eddc, 1);
-}
+} /* eet_data_descriptor_stream_new */
 
 EAPI Eet_Data_Descriptor *
 eet_data_descriptor_file_new(const Eet_Data_Descriptor_Class *eddc)
 {
    return _eet_data_descriptor_new(eddc, 2);
-}
+} /* eet_data_descriptor_file_new */
 
 EAPI void
 eet_data_descriptor_free(Eet_Data_Descriptor *edd)
 {
-   if (!edd) return ;
+   if (!edd)
+      return;
+
    _eet_descriptor_hash_free(edd);
-   if (edd->elements.set) free(edd->elements.set);
+   if (edd->elements.set)
+      free(edd->elements.set);
+
    free(edd);
-}
+} /* eet_data_descriptor_free */
 
 EAPI void
 eet_data_descriptor_element_add(Eet_Data_Descriptor *edd,
-                               const char *name,
-                               int type,
-                               int group_type,
-                               int offset,
-                               int count,
-/*                             int counter_offset, */
-                               const char *counter_name /* FIXME: Useless should go on a major release */,
-                               Eet_Data_Descriptor *subtype)
+                                const char          *name,
+                                int                  type,
+                                int                  group_type,
+                                int                  offset,
+                                int                  count,
+/*        int counter_offset, */
+                                const char          *counter_name /* FIXME: Useless should go on a major release */,
+                                Eet_Data_Descriptor *subtype)
 {
    Eet_Data_Element *ede;
    Eet_Data_Element *tmp;
 
    /* UNION, VARIANT type would not work with simple type, we need a way to map the type. */
    if ((group_type == EET_G_UNION
-       || group_type == EET_G_VARIANT)
+        || group_type == EET_G_VARIANT)
        &&
        (type != EET_T_UNKNOW
-       || subtype == NULL
-       || subtype->func.type_get == NULL
-       || subtype->func.type_set == NULL))
-     return ;
+        || subtype == NULL
+        || subtype->func.type_get == NULL
+        || subtype->func.type_set == NULL))
+      return;
 
    /* VARIANT type will only work if the map only contains EET_G_*, but not UNION, VARIANT and ARRAY. */
    if (group_type == EET_G_VARIANT)
      {
-       int i;
+        int i;
 
-       for (i = 0; i < subtype->elements.num; ++i)
-         if (subtype->elements.set[i].type != EET_T_UNKNOW
-             && subtype->elements.set[i].group_type > EET_G_VAR_ARRAY
-             && subtype->elements.set[i].group_type < EET_G_UNION)
-           return ;
+        for (i = 0; i < subtype->elements.num; ++i)
+           if (subtype->elements.set[i].type != EET_T_UNKNOW
+               && subtype->elements.set[i].group_type > EET_G_VAR_ARRAY
+               && subtype->elements.set[i].group_type < EET_G_UNION)
+              return;
 
-       subtype->unified_type = EINA_TRUE;
+        subtype->unified_type = EINA_TRUE;
      }
+
    if (subtype
        && subtype->unified_type
        && (type != EET_T_UNKNOW
-          || group_type < EET_G_UNION))
-     return ;
+           || group_type < EET_G_UNION))
+      return;
 
    /* Sanity check done, let allocate ! */
    edd->elements.num++;
    tmp = realloc(edd->elements.set, edd->elements.num * sizeof(Eet_Data_Element));
-   if (!tmp) return ;
+   if (!tmp)
+      return;
+
    edd->elements.set = tmp;
    ede = &(edd->elements.set[edd->elements.num - 1]);
    ede->name = name;
@@ -1508,21 +1914,29 @@ eet_data_descriptor_element_add(Eet_Data_Descriptor *edd,
     * Instead of handling it in encode/decode/dump/undump, we create an
     * implicit structure with only the simple type.
     */
-   if (group_type > EET_G_UNKNOWN
-       && group_type < EET_G_LAST
-       && ((type > EET_T_UNKNOW && type < EET_T_STRING)
-          || (type > EET_T_NULL && type < EET_T_LAST))
-       && subtype == NULL)
+   if ((group_type > EET_G_UNKNOWN)
+       && (group_type < EET_G_LAST)
+       && (((type > EET_T_UNKNOW) && (type < EET_T_STRING))
+           || ((type > EET_T_NULL) && (type < EET_T_LAST)))
+       && (subtype == NULL))
      {
-       subtype = calloc(1, sizeof (Eet_Data_Descriptor));
-       if (!subtype) return ;
-       subtype->name = "implicit";
-       subtype->size = eet_basic_codec[type - 1].size;
-       memcpy(&subtype->func, &edd->func, sizeof(subtype->func));
-
-       eet_data_descriptor_element_add(subtype, eet_basic_codec[type - 1].name, type,
-                                       EET_G_UNKNOWN, 0, 0, /* 0,  */NULL, NULL);
-       type = EET_T_UNKNOW;
+        subtype = calloc(1, sizeof (Eet_Data_Descriptor));
+        if (!subtype)
+           return;
+
+        subtype->name = "implicit";
+        subtype->size = eet_basic_codec[type - 1].size;
+        memcpy(&subtype->func, &edd->func, sizeof(subtype->func));
+
+        eet_data_descriptor_element_add(subtype,
+                                        eet_basic_codec[type - 1].name,
+                                        type,
+                                        EET_G_UNKNOWN,
+                                        0,
+                                        0,
+                                        /* 0,  */ NULL,
+                                        NULL);
+        type = EET_T_UNKNOW;
      }
 
    ede->type = type;
@@ -1535,39 +1949,46 @@ eet_data_descriptor_element_add(Eet_Data_Descriptor *edd,
    ede->counter_name = counter_name;
 
    ede->subtype = subtype;
-}
+} /* eet_data_descriptor_element_add */
 
 EAPI void *
-eet_data_read_cipher(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const char *cipher_key)
+eet_data_read_cipher(Eet_File            *ef,
+                     Eet_Data_Descriptor *edd,
+                     const char          *name,
+                     const char          *cipher_key)
 {
    const Eet_Dictionary *ed = NULL;
-   const void           *data = NULL;
-   void                 *data_dec;
-   Eet_Free_Context      context;
-   int                   required_free = 0;
-   int                   size;
+   const void *data = NULL;
+   void *data_dec;
+   Eet_Free_Context context;
+   int required_free = 0;
+   int size;
 
    ed = eet_dictionary_get(ef);
 
    if (!cipher_key)
-     data = eet_read_direct(ef, name, &size);
+      data = eet_read_direct(ef, name, &size);
+
    if (!data)
      {
-       required_free = 1;
-       data = eet_read_cipher(ef, name, &size, cipher_key);
-       if (!data) return NULL;
+        required_free = 1;
+        data = eet_read_cipher(ef, name, &size, cipher_key);
+        if (!data)
+           return NULL;
      }
 
    memset(&context, 0, sizeof (context));
    data_dec = _eet_data_descriptor_decode(&context, ed, edd, data, size);
    if (required_free)
-     free((void*)data);
+      free((void *)data);
 
    return data_dec;
-}
+} /* eet_data_read_cipher */
 
 EAPI Eet_Node *
-eet_data_node_read_cipher(Eet_File *ef, const char *name, const char *cipher_key)
+eet_data_node_read_cipher(Eet_File   *ef,
+                          const char *name,
+                          const char *cipher_key)
 {
    const Eet_Dictionary *ed = NULL;
    const void *data = NULL;
@@ -1579,55 +2000,74 @@ eet_data_node_read_cipher(Eet_File *ef, const char *name, const char *cipher_key
    ed = eet_dictionary_get(ef);
 
    if (!cipher_key)
-     data = eet_read_direct(ef, name, &size);
+      data = eet_read_direct(ef, name, &size);
+
    if (!data)
      {
-       required_free = 1;
-       data = eet_read_cipher(ef, name, &size, cipher_key);
-       if (!data) return NULL;
+        required_free = 1;
+        data = eet_read_cipher(ef, name, &size, cipher_key);
+        if (!data)
+           return NULL;
      }
 
    memset(&context, 0, sizeof (context));
    result = _eet_data_descriptor_decode(&context, ed, NULL, data, size);
    if (required_free)
-     free((void*)data);
+      free((void *)data);
 
    return result;
-}
+} /* eet_data_node_read_cipher */
 
 EAPI void *
-eet_data_read(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name)
+eet_data_read(Eet_File            *ef,
+              Eet_Data_Descriptor *edd,
+              const char          *name)
 {
    return eet_data_read_cipher(ef, edd, name, NULL);
-}
+} /* eet_data_read */
 
 EAPI int
-eet_data_write_cipher(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const char *cipher_key, const void *data, int compress)
+eet_data_write_cipher(Eet_File            *ef,
+                      Eet_Data_Descriptor *edd,
+                      const char          *name,
+                      const char          *cipher_key,
+                      const void          *data,
+                      int                  compress)
 {
-   Eet_Dictionary       *ed;
-   void                 *data_enc;
-   int                   size;
-   int                   val;
+   Eet_Dictionary *ed;
+   void *data_enc;
+   int size;
+   int val;
 
    ed = eet_dictionary_get(ef);
 
    data_enc = _eet_data_descriptor_encode(ed, edd, data, &size);
-   if (!data_enc) return 0;
+   if (!data_enc)
+      return 0;
+
    val = eet_write_cipher(ef, name, data_enc, size, compress, cipher_key);
    free(data_enc);
    return val;
-}
+} /* eet_data_write_cipher */
 
 EAPI int
-eet_data_write(Eet_File *ef, Eet_Data_Descriptor *edd, const char *name, const void *data, int compress)
+eet_data_write(Eet_File            *ef,
+               Eet_Data_Descriptor *edd,
+               const char          *name,
+               const void          *data,
+               int                  compress)
 {
    return eet_data_write_cipher(ef, edd, name, NULL, data, compress);
-}
+} /* eet_data_write */
 
 static int
 _eet_free_hash(void *data)
 {
+#ifdef _WIN64
+   __int64 ptr = (UINT_PTR)data;
+#else /* ifdef _WIN64 */
    unsigned long ptr = (unsigned long)(data);
+#endif /* ifdef _WIN64 */
    int hash;
 
    hash = ptr;
@@ -1635,18 +2075,19 @@ _eet_free_hash(void *data)
    hash ^= ptr >> 16;
    hash ^= ptr >> 24;
 
-#if LONG_BIT != 32
+#if defined (_WIN64) || ((!defined (_WIN32)) && (LONG_BIT != 32))
    hash ^= ptr >> 32;
    hash ^= ptr >> 40;
    hash ^= ptr >> 48;
    hash ^= ptr >> 56;
-#endif
+#endif /* if defined (_WIN64) || ((!defined (_WIN32)) && (LONG_BIT != 32)) */
 
    return hash & 0xFF;
-}
+} /* _eet_free_hash */
 
 static void
-_eet_free_add(Eet_Free *ef, void *data)
+_eet_free_add(Eet_Free *ef,
+              void     *data)
 {
    int hash;
    int i;
@@ -1654,94 +2095,141 @@ _eet_free_add(Eet_Free *ef, void *data)
    hash = _eet_free_hash(data);
 
    for (i = 0; i < ef->num[hash]; ++i)
-     if (ef->list[hash][i] == data) return;
+      if (ef->list[hash][i] == data)
+         return;
 
    ef->num[hash]++;
    if (ef->num[hash] > ef->len[hash])
      {
-        void    **tmp;
+        void **tmp;
 
-        tmp = realloc(ef->list[hash], (ef->len[hash] + 16) * sizeof(void*));
-        if (!tmp) return ;
+        tmp = realloc(ef->list[hash], (ef->len[hash] + 16) * sizeof(void *));
+        if (!tmp)
+           return;
 
         ef->len[hash] += 16;
         ef->list[hash] = tmp;
      }
+
    ef->list[hash][ef->num[hash] - 1] = data;
-}
+} /* _eet_free_add */
+
 static void
 _eet_free_reset(Eet_Free *ef)
 {
    int i;
 
-   if (ef->ref > 0) return ;
+   if (ef->ref > 0)
+      return;
+
    for (i = 0; i < 256; ++i)
      {
-       ef->len[i] = 0;
-       ef->num[i] = 0;
-       if (ef->list[i]) free(ef->list[i]);
-       ef->list[i] = NULL;
+        ef->len[i] = 0;
+        ef->num[i] = 0;
+        if (ef->list[i])
+           free(ef->list[i]);
+
+        ef->list[i] = NULL;
      }
-}
+} /* _eet_free_reset */
+
 static void
 _eet_free_ref(Eet_Free *ef)
 {
    ef->ref++;
-}
+} /* _eet_free_ref */
+
 static void
 _eet_free_unref(Eet_Free *ef)
 {
    ef->ref--;
-}
+} /* _eet_free_unref */
 
-#define _eet_freelist_add(Ctx, Data)   _eet_free_add(&Ctx->freelist, Data);
-#define _eet_freelist_reset(Ctx)       _eet_free_reset(&Ctx->freelist);
-#define _eet_freelist_ref(Ctx)         _eet_free_ref(&Ctx->freelist);
-#define _eet_freelist_unref(Ctx)       _eet_free_unref(&Ctx->freelist);
+#define _eet_freelist_add(Ctx, Data) _eet_free_add(&Ctx->freelist, Data);
+#define _eet_freelist_reset(Ctx)     _eet_free_reset(&Ctx->freelist);
+#define _eet_freelist_ref(Ctx)       _eet_free_ref(&Ctx->freelist);
+#define _eet_freelist_unref(Ctx)     _eet_free_unref(&Ctx->freelist);
 
 static void
-_eet_freelist_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
+_eet_freelist_free(Eet_Free_Context    *context,
+                   Eet_Data_Descriptor *edd)
 {
    int j;
    int i;
 
-   if (context->freelist.ref > 0) return;
+   if (context->freelist.ref > 0)
+      return;
+
    for (j = 0; j < 256; ++j)
-     for (i = 0; i < context->freelist.num[j]; ++i)
-       {
-         if (edd)
-           edd->func.mem_free(context->freelist.list[j][i]);
-         else
-           free(context->freelist.list[j][i]);
-       }
+      for (i = 0; i < context->freelist.num[j]; ++i)
+        {
+           if (edd)
+              edd->func.mem_free(context->freelist.list[j][i]);
+           else
+              free(context->freelist.list[j][i]);
+        }
    _eet_free_reset(&context->freelist);
-}
+} /* _eet_freelist_free */
 
-#define _eet_freelist_list_add(Ctx, Data)  _eet_free_add(&Ctx->freelist_list, Data);
-#define _eet_freelist_list_reset(Ctx)      _eet_free_reset(&Ctx->freelist_list);
-#define _eet_freelist_list_ref(Ctx)        _eet_free_ref(&Ctx->freelist_list);
-#define _eet_freelist_list_unref(Ctx)      _eet_free_unref(&Ctx->freelist_list);
+#define _eet_freelist_array_add(Ctx, Data) _eet_free_add(&Ctx->freelist_array, Data);
+#define _eet_freelist_array_reset(Ctx)     _eet_free_reset(&Ctx->freelist_array);
+#define _eet_freelist_array_ref(Ctx)       _eet_free_ref(&Ctx->freelist_array);
+#define _eet_freelist_array_unref(Ctx)     _eet_free_unref(&Ctx->freelist_array);
 
 static void
-_eet_freelist_list_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
+_eet_freelist_array_free(Eet_Free_Context    *context,
+                        Eet_Data_Descriptor *edd)
 {
    int j;
    int i;
 
-   if (context->freelist_list.ref > 0) return;
+   if (context->freelist_array.ref > 0)
+      return;
+
    for (j = 0; j < 256; ++j)
-     for (i = 0; i < context->freelist_list.num[j]; ++i)
-       {
-         if (edd)
-           edd->func.list_free(*((void**)(context->freelist_list.list[j][i])));
-       }
+      for (i = 0; i < context->freelist_array.num[j]; ++i)
+        {
+           if (edd)
+            {
+               if (edd->func.array_free)
+                 edd->func.array_free(context->freelist_array.list[j][i]);
+               else
+                 edd->func.mem_free(context->freelist_array.list[j][i]);
+            }
+           else
+              free(context->freelist_array.list[j][i]);
+        }
+   _eet_free_reset(&context->freelist_array);
+} /* _eet_freelist_array_free */
+
+#define _eet_freelist_list_add(Ctx, Data) _eet_free_add(&Ctx->freelist_list, Data);
+#define _eet_freelist_list_reset(Ctx)     _eet_free_reset(&Ctx->freelist_list);
+#define _eet_freelist_list_ref(Ctx)       _eet_free_ref(&Ctx->freelist_list);
+#define _eet_freelist_list_unref(Ctx)     _eet_free_unref(&Ctx->freelist_list);
+
+static void
+_eet_freelist_list_free(Eet_Free_Context    *context,
+                        Eet_Data_Descriptor *edd)
+{
+   int j;
+   int i;
+
+   if (context->freelist_list.ref > 0)
+      return;
+
+   for (j = 0; j < 256; ++j)
+      for (i = 0; i < context->freelist_list.num[j]; ++i)
+        {
+           if (edd)
+              edd->func.list_free(*((void **)(context->freelist_list.list[j][i])));
+        }
    _eet_free_reset(&context->freelist_list);
-}
+} /* _eet_freelist_list_free */
 
-#define _eet_freelist_str_add(Ctx, Data)   _eet_free_add(&Ctx->freelist_str, Data);
-#define _eet_freelist_str_reset(Ctx)       _eet_free_reset(&Ctx->freelist_str);
-#define _eet_freelist_str_ref(Ctx)         _eet_free_ref(&Ctx->freelist_str);
-#define _eet_freelist_str_unref(Ctx)       _eet_free_unref(&Ctx->freelist_str);
+#define _eet_freelist_str_add(Ctx, Data) _eet_free_add(&Ctx->freelist_str, Data);
+#define _eet_freelist_str_reset(Ctx)     _eet_free_reset(&Ctx->freelist_str);
+#define _eet_freelist_str_ref(Ctx)       _eet_free_ref(&Ctx->freelist_str);
+#define _eet_freelist_str_unref(Ctx)     _eet_free_unref(&Ctx->freelist_str);
 
 static void
 _eet_freelist_str_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
@@ -1749,63 +2237,71 @@ _eet_freelist_str_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
    int j;
    int i;
 
-   if (context->freelist_str.ref > 0) return;
+   if (context->freelist_str.ref > 0)
+      return;
+
    for (j = 0; j < 256; ++j)
-     for (i = 0; i < context->freelist_str.num[j]; ++i)
-       {
-         if (edd)
-           edd->func.str_free(context->freelist_str.list[j][i]);
-         else
-           free(context->freelist_str.list[j][i]);
-       }
+      for (i = 0; i < context->freelist_str.num[j]; ++i)
+        {
+           if (edd)
+              edd->func.str_free(context->freelist_str.list[j][i]);
+           else
+              free(context->freelist_str.list[j][i]);
+        }
    _eet_free_reset(&context->freelist_str);
-}
+} /* _eet_freelist_str_free */
 
-#define _eet_freelist_direct_str_add(Ctx, Data)    _eet_free_add(&Ctx->freelist_direct_str, Data);
-#define _eet_freelist_direct_str_reset(Ctx)        _eet_free_reset(&Ctx->freelist_direct_str);
-#define _eet_freelist_direct_str_ref(Ctx)          _eet_free_ref(&Ctx->freelist_direct_str);
-#define _eet_freelist_direct_str_unref(Ctx)        _eet_free_unref(&Ctx->freelist_direct_str);
+#define _eet_freelist_direct_str_add(Ctx, Data) _eet_free_add(&Ctx->freelist_direct_str, Data);
+#define _eet_freelist_direct_str_reset(Ctx)     _eet_free_reset(&Ctx->freelist_direct_str);
+#define _eet_freelist_direct_str_ref(Ctx)       _eet_free_ref(&Ctx->freelist_direct_str);
+#define _eet_freelist_direct_str_unref(Ctx)     _eet_free_unref(&Ctx->freelist_direct_str);
 
 static void
-_eet_freelist_direct_str_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
+_eet_freelist_direct_str_free(Eet_Free_Context    *context,
+                              Eet_Data_Descriptor *edd)
 {
    int j;
    int i;
 
-   if (context->freelist_direct_str.ref > 0) return;
+   if (context->freelist_direct_str.ref > 0)
+      return;
+
    for (j = 0; j < 256; ++j)
-     for (i = 0; i < context->freelist_direct_str.num[j]; ++i)
-       {
-         if (edd)
-           edd->func.str_direct_free(context->freelist_direct_str.list[j][i]);
-         else
-           free(context->freelist_direct_str.list[j][i]);
-       }
+      for (i = 0; i < context->freelist_direct_str.num[j]; ++i)
+        {
+           if (edd)
+              edd->func.str_direct_free(context->freelist_direct_str.list[j][i]);
+           else
+              free(context->freelist_direct_str.list[j][i]);
+        }
    _eet_free_reset(&context->freelist_direct_str);
-}
+} /* _eet_freelist_direct_str_free */
 
 #define _eet_freelist_hash_add(Ctx, Data) _eet_free_add(&Ctx->freelist_hash, Data);
 #define _eet_freelist_hash_reset(Ctx)     _eet_free_reset(&Ctx->freelist_hash);
-#define _eet_freelist_hash_ref(Ctx)      _eet_free_ref(&Ctx->freelist_hash);
-#define _eet_freelist_hash_unref(Ctx)    _eet_free_unref(&Ctx->freelist_hash);
+#define _eet_freelist_hash_ref(Ctx)       _eet_free_ref(&Ctx->freelist_hash);
+#define _eet_freelist_hash_unref(Ctx)     _eet_free_unref(&Ctx->freelist_hash);
 
 static void
-_eet_freelist_hash_free(Eet_Free_Context *context, Eet_Data_Descriptor *edd)
+_eet_freelist_hash_free(Eet_Free_Context    *context,
+                        Eet_Data_Descriptor *edd)
 {
    int j;
    int i;
 
-   if (context->freelist_hash.ref > 0) return;
+   if (context->freelist_hash.ref > 0)
+      return;
+
    for (j = 0; j < 256; ++j)
-     for (i = 0; i < context->freelist_hash.num[j]; ++i)
-       {
-         if (edd)
-           edd->func.hash_free(context->freelist_hash.list[j][i]);
-         else
-           free(context->freelist_hash.list[j][i]);
-       }
+      for (i = 0; i < context->freelist_hash.num[j]; ++i)
+        {
+           if (edd)
+              edd->func.hash_free(context->freelist_hash.list[j][i]);
+           else
+              free(context->freelist_hash.list[j][i]);
+        }
    _eet_free_reset(&context->freelist_hash);
-}
+} /* _eet_freelist_hash_free */
 
 static void
 _eet_freelist_all_ref(Eet_Free_Context *freelist_context)
@@ -1815,7 +2311,7 @@ _eet_freelist_all_ref(Eet_Free_Context *freelist_context)
    _eet_freelist_list_ref(freelist_context);
    _eet_freelist_hash_ref(freelist_context);
    _eet_freelist_direct_str_ref(freelist_context);
-}
+} /* _eet_freelist_all_ref */
 
 static void
 _eet_freelist_all_unref(Eet_Free_Context *freelist_context)
@@ -1825,18 +2321,21 @@ _eet_freelist_all_unref(Eet_Free_Context *freelist_context)
    _eet_freelist_list_unref(freelist_context);
    _eet_freelist_hash_unref(freelist_context);
    _eet_freelist_direct_str_unref(freelist_context);
-}
+} /* _eet_freelist_all_unref */
 
 static int
-eet_data_descriptor_encode_hash_cb(void *hash __UNUSED__, const char *cipher_key, void *hdata, void *fdata)
+eet_data_descriptor_encode_hash_cb(void *hash  __UNUSED__,
+                                   const char *cipher_key,
+                                   void       *hdata,
+                                   void       *fdata)
 {
-   Eet_Dictionary               *ed;
-   Eet_Data_Encode_Hash_Info    *edehi;
-   Eet_Data_Stream              *ds;
-   Eet_Data_Element             *ede;
-   Eet_Data_Chunk               *echnk;
-   void                         *data = NULL;
-   int                           size;
+   Eet_Dictionary *ed;
+   Eet_Data_Encode_Hash_Info *edehi;
+   Eet_Data_Stream *ds;
+   Eet_Data_Element *ede;
+   Eet_Data_Chunk *echnk;
+   void *data = NULL;
+   int size;
 
    edehi = fdata;
    ede = edehi->ede;
@@ -1846,44 +2345,54 @@ eet_data_descriptor_encode_hash_cb(void *hash __UNUSED__, const char *cipher_key
    /* Store key */
    data = eet_data_put_type(ed,
                             EET_T_STRING,
-                           &cipher_key,
-                           &size);
+                            &cipher_key,
+                            &size);
    if (data)
      {
-       echnk = eet_data_chunk_new(data, size, ede->name, ede->type, ede->group_type);
-       eet_data_chunk_put(ed, echnk, ds);
-       eet_data_chunk_free(echnk);
-       free(data);
-       data = NULL;
+        echnk = eet_data_chunk_new(data,
+                                   size,
+                                   ede->name,
+                                   ede->type,
+                                   ede->group_type);
+        eet_data_chunk_put(ed, echnk, ds);
+        eet_data_chunk_free(echnk);
+        free(data);
+        data = NULL;
      }
 
    EET_ASSERT(!((ede->type > EET_T_UNKNOW) && (ede->type < EET_T_STRING)), return );
 
    /* Store data */
    if (ede->type >= EET_T_STRING)
-     eet_data_put_unknown(ed, NULL, ede, ds, &hdata);
+      eet_data_put_unknown(ed, NULL, ede, ds, &hdata);
    else
      {
-       if (ede->subtype)
-         data = _eet_data_descriptor_encode(ed,
-                                            ede->subtype,
-                                            hdata,
-                                            &size);
-       if (data)
-         {
-            echnk = eet_data_chunk_new(data, size, ede->name, ede->type, ede->group_type);
-            eet_data_chunk_put(ed, echnk, ds);
-            eet_data_chunk_free(echnk);
-            free(data);
-            data = NULL;
-         }
+        if (ede->subtype)
+           data = _eet_data_descriptor_encode(ed,
+                                              ede->subtype,
+                                              hdata,
+                                              &size);
+
+        if (data)
+          {
+             echnk = eet_data_chunk_new(data,
+                                        size,
+                                        ede->name,
+                                        ede->type,
+                                        ede->group_type);
+             eet_data_chunk_put(ed, echnk, ds);
+             eet_data_chunk_free(echnk);
+             free(data);
+             data = NULL;
+          }
      }
 
    return 1;
-}
+} /* eet_data_descriptor_encode_hash_cb */
 
 static char *
-_eet_data_dump_token_get(const char *src, int *len)
+_eet_data_dump_token_get(const char *src,
+                         int        *len)
 {
    const char *p;
    char *tok = NULL;
@@ -1891,103 +2400,108 @@ _eet_data_dump_token_get(const char *src, int *len)
    int in_quote = 0;
    int tlen = 0, tsize = 0;
 
-#define TOK_ADD(x) \
-   \
-      tlen++; \
-      if (tlen >= tsize) \
-       \
-          tsize += 32; \
-          tok = realloc(tok, tsize); \
-       \
-      tok[tlen - 1] = x; \
-   }
+#define TOK_ADD(x)\
+   do {\
+        tlen++;\
+        if (tlen >= tsize)\
+          {\
+             tsize += 32;\
+             tok = realloc(tok, tsize);\
+          }\
+        tok[tlen - 1] = x;\
+     } while (0)
 
    for (p = src; *len > 0; p++, (*len)--)
      {
-       if (in_token)
-         {
-            if (in_quote)
-              {
-                 if ((p[0] == '\"') && (p > src) && (p[-1] != '\\'))
-                   {
-                      in_quote = 0;
-                   }
-                 else if ((p[0] == '\\') && (*len > 1) && (p[1] == '\"'))
-                   {
-                      /* skip */
-                   }
-                 else if ((p[0] == '\\') && (p > src) && (p[-1] == '\\'))
-                   {
-                      /* skip */
-                   }
-                 else if ((p[0] == '\\') && (*len > 1) && (p[1] == 'n'))
-                   {
-                      /* skip */
-                   }
-                 else if ((p[0] == 'n') && (p > src) && (p[-1] == '\\'))
-                   {
-                      TOK_ADD('\n');
-                   }
-                 else
-                   TOK_ADD(p[0]);
-              }
-            else
-              {
-                 if (p[0] == '\"') in_quote = 1;
-                 else
-                   {
-                      if ((isspace(p[0])) || (p[0] == ';')) /* token ends here */
-                        {
-                           TOK_ADD(0);
-                           (*len)--;
-                           return tok;
-                        }
-                      else
-                        TOK_ADD(p[0]);
-                   }
-              }
-         }
-       else
-         {
-            if (!((isspace(p[0])) || (p[0] == ';')))
-              {
-                 in_token = 1;
-                 (*len)++;
-                 p--;
-              }
-         }
+        if (in_token)
+          {
+             if (in_quote)
+               {
+                  if ((p[0] == '\"') && (p > src) && (p[-1] != '\\'))
+                     in_quote = 0;
+                  else if ((p[0] == '\\') && (*len > 1) &&
+                           (p[1] == '\"'))
+                    {
+/* skip */
+                    }
+                  else if ((p[0] == '\\') && (p > src) && (p[-1] == '\\'))
+                    {
+/* skip */
+                    }
+                  else if ((p[0] == '\\') && (*len > 1) && (p[1] == 'n'))
+                    {
+/* skip */
+                    }
+                  else if ((p[0] == 'n') && (p > src) && (p[-1] == '\\'))
+                     TOK_ADD('\n');
+                  else
+                     TOK_ADD(p[0]);
+               }
+             else
+               {
+                  if (p[0] == '\"')
+                     in_quote = 1;
+                  else
+                    {
+                       if ((isspace(p[0])) || (p[0] == ';')) /* token ends here */
+                         {
+                            TOK_ADD(0);
+                            (*len)--;
+                            return tok;
+                         }
+                       else
+                          TOK_ADD(p[0]);
+                    }
+               }
+          }
+        else if (!((isspace(p[0])) || (p[0] == ';')))
+          {
+             in_token = 1;
+             (*len)++;
+             p--;
+          }
      }
    if (in_token)
      {
-       TOK_ADD(0);
-       return tok;
+        TOK_ADD(0);
+        return tok;
      }
-   if (tok) free(tok);
+
+   if (tok)
+      free(tok);
+
    return NULL;
-}
+} /* _eet_data_dump_token_get */
 
 static void
-eet_data_encode(Eet_Dictionary *ed, Eet_Data_Stream *ds, void *data, const char *name, int size, int type, int group_type)
+eet_data_encode(Eet_Dictionary  *ed,
+                Eet_Data_Stream *ds,
+                void            *data,
+                const char      *name,
+                int              size,
+                int              type,
+                int              group_type)
 {
    Eet_Data_Chunk *echnk;
 
-   if (!data) type = EET_T_NULL;
+   if (!data)
+      type = EET_T_NULL;
 
    if (group_type != EET_G_UNKNOWN)
-     if (type >= EET_T_LAST)
-       type = EET_T_UNKNOW;
+      if (type >= EET_T_LAST)
+         type = EET_T_UNKNOW;
 
    echnk = eet_data_chunk_new(data, size, name, type, group_type);
    eet_data_chunk_put(ed, echnk, ds);
    eet_data_chunk_free(echnk);
    free(data);
-}
+} /* eet_data_encode */
 
 static void *
-_eet_data_dump_encode(int parent_type,
-                     Eet_Dictionary *ed,
-                      Eet_Node *node,
-                     int *size_ret)
+_eet_data_dump_encode(int             parent_type,
+                      Eet_Dictionary *ed,
+                      Eet_Node       *node,
+                      int            *size_ret)
 {
    Eet_Data_Chunk *chnk = NULL;
    Eet_Data_Stream *ds;
@@ -1999,187 +2513,287 @@ _eet_data_dump_encode(int parent_type,
 
    if (_eet_data_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_data_words_bigendian = 1;
-       else _eet_data_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_data_words_bigendian = 1;
+        else
+           _eet_data_words_bigendian = 0;
      }
 
-   if (node == NULL) return NULL;
+   if (node == NULL)
+      return NULL;
 
    ds = eet_data_stream_new();
-   if (!ds) return NULL;
+   if (!ds)
+      return NULL;
 
    switch (node->type)
      {
       case EET_G_UNKNOWN:
-       for (n = node->values; n; n = n->next)
-         {
-            data = _eet_data_dump_encode(node->type, ed, n, &size);
-            if (data)
-              {
-                 eet_data_stream_write(ds, data, size);
-                 free(data);
-              }
-         }
-       break;
+         for (n = node->values; n; n = n->next)
+           {
+              data = _eet_data_dump_encode(node->type, ed, n, &size);
+              if (data)
+                {
+                   eet_data_stream_write(ds, data, size);
+                   free(data);
+                }
+           }
+         break;
+
       case EET_G_ARRAY:
       case EET_G_VAR_ARRAY:
-       for (child_type = EET_T_NULL, n = node->values; n; n = n->next)
-         {
-            if (n->type != EET_T_NULL)
-              {
-                 child_type = n->type;
-                 break;
-              }
-         }
-
-       data = eet_data_put_type(ed,
-                                EET_T_INT,
-                                &node->count,
-                                &size);
-       eet_data_encode(ed, ds, data, node->name, size, child_type, node->type);
-
-       count = node->count;
-
-       for (n = node->values; n; n = n->next)
-         {
-            int pos = ds->pos;
-
-            switch (n->type)
-              {
-               case EET_T_STRING:
-               case EET_T_INLINED_STRING:
-                  data = eet_data_put_type(ed, n->type, &(n->data.value.str), &size);
-                  if (data) eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-                  break;
-               case EET_T_NULL:
-                  continue;
-               default:
-                  data = _eet_data_dump_encode(n->type, ed, n, &size);
-                  eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-                  break;
-              }
-            if (ds->pos != pos) count--;
-         }
-
-       for (; count; count--)
-         {
-            eet_data_encode(ed, ds, NULL, node->name, 0, EET_T_NULL, node->type);
-         }
-
-       /* Array is somekind of special case, so we should embed it inside another chunk. */
-       *size_ret = ds->pos;
-       cdata = ds->data;
-
-       ds->data = NULL;
-       ds->size = 0;
-       eet_data_stream_free(ds);
-
-       return cdata;
-       break;
+         for (child_type = EET_T_NULL, n = node->values; n; n = n->next)
+           {
+              if (n->type != EET_T_NULL)
+                {
+                   child_type = n->type;
+                   break;
+                }
+           }
+
+         data = eet_data_put_type(ed,
+                                  EET_T_INT,
+                                  &node->count,
+                                  &size);
+         eet_data_encode(ed,
+                         ds,
+                         data,
+                         node->name,
+                         size,
+                         child_type,
+                         node->type);
+
+         count = node->count;
+
+         for (n = node->values; n; n = n->next)
+           {
+              int pos = ds->pos;
+
+              switch (n->type)
+                {
+                 case EET_T_STRING:
+                 case EET_T_INLINED_STRING:
+                    data = eet_data_put_type(ed,
+                                             n->type,
+                                             &(n->data.value.str),
+                                             &size);
+                    if (data)
+                       eet_data_encode(ed,
+                                       ds,
+                                       data,
+                                       node->name,
+                                       size,
+                                       n->type,
+                                       node->type);
+
+                    break;
+
+                 case EET_T_NULL:
+                    continue;
+
+                 default:
+                    data = _eet_data_dump_encode(n->type, ed, n, &size);
+                    eet_data_encode(ed,
+                                    ds,
+                                    data,
+                                    node->name,
+                                    size,
+                                    n->type,
+                                    node->type);
+                    break;
+                } /* switch */
+              if (ds->pos != pos)
+                 count--;
+           }
+
+         for (; count; count--)
+           {
+              eet_data_encode(ed,
+                              ds,
+                              NULL,
+                              node->name,
+                              0,
+                              EET_T_NULL,
+                              node->type);
+           }
+
+         /* Array is somekind of special case, so we should embed it inside another chunk. */
+         *size_ret = ds->pos;
+         cdata = ds->data;
+
+         ds->data = NULL;
+         ds->size = 0;
+         eet_data_stream_free(ds);
+
+         return cdata;
+         break;
+
       case EET_G_LIST:
-       for (n = node->values; n; n = n->next)
-         {
-            switch (n->type)
-              {
-               case EET_T_STRING:
-               case EET_T_INLINED_STRING:
-                  data = eet_data_put_type(ed, n->type, &(n->data.value.str), &size);
-                  if (data) eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-                  break;
-               case EET_T_NULL:
-                  continue;
-               default:
-                  data = _eet_data_dump_encode(node->type, ed, n, &size);
-                  eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-              }
-         }
-
-       /* List is another somekind of special case, every chunk is embed inside a list chunk. */
-       *size_ret = ds->pos;
-       cdata = ds->data;
-
-       ds->data = NULL;
-       ds->size = 0;
-       eet_data_stream_free(ds);
-
-       return cdata;
-       break;
+         for (n = node->values; n; n = n->next)
+           {
+              switch (n->type)
+                {
+                 case EET_T_STRING:
+                 case EET_T_INLINED_STRING:
+                    data = eet_data_put_type(ed,
+                                             n->type,
+                                             &(n->data.value.str),
+                                             &size);
+                    if (data)
+                       eet_data_encode(ed,
+                                       ds,
+                                       data,
+                                       node->name,
+                                       size,
+                                       n->type,
+                                       node->type);
+
+                    break;
+
+                 case EET_T_NULL:
+                    continue;
+
+                 default:
+                    data = _eet_data_dump_encode(node->type, ed, n, &size);
+                    eet_data_encode(ed,
+                                    ds,
+                                    data,
+                                    node->name,
+                                    size,
+                                    n->type,
+                                    node->type);
+                } /* switch */
+           }
+
+         /* List is another somekind of special case, every chunk is embed inside a list chunk. */
+         *size_ret = ds->pos;
+         cdata = ds->data;
+
+         ds->data = NULL;
+         ds->size = 0;
+         eet_data_stream_free(ds);
+
+         return cdata;
+         break;
+
       case EET_G_HASH:
-       if (node->key)
-         {
-            data = eet_data_put_type(ed,
-                                      EET_T_STRING,
-                                     &node->key,
-                                     &size);
-            eet_data_encode(ed, ds, data, node->name, size, node->type, node->type);
-         }
-       else
-         /* A Hash without key will not decode correctly. */
-         return NULL;
-
-       for (n = node->values; n; n = n->next)
-         {
-            switch (n->type)
-              {
-               case EET_T_STRING:
-               case EET_T_INLINED_STRING:
-                  data = eet_data_put_type(ed, n->type, &(n->data.value.str), &size);
-                  if (data) eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-                  break;
-               case EET_T_NULL:
-                  continue;
-               default:
-                  data = _eet_data_dump_encode(node->type, ed, n, &size);
-                  eet_data_encode(ed, ds, data, node->name, size, n->type, node->type);
-              }
-         }
-
-       /* Hash is somekind of special case, so we should embed it inside another chunk. */
-       *size_ret = ds->pos;
-       cdata = ds->data;
-
-       eet_data_stream_flush(ds);
-
-       return cdata;
+         if (node->key)
+           {
+              data = eet_data_put_type(ed,
+                                       EET_T_STRING,
+                                       &node->key,
+                                       &size);
+              eet_data_encode(ed,
+                              ds,
+                              data,
+                              node->name,
+                              size,
+                              node->type,
+                              node->type);
+           }
+         else
+            /* A Hash without key will not decode correctly. */
+            return NULL;
+
+         for (n = node->values; n; n = n->next)
+           {
+              switch (n->type)
+                {
+                 case EET_T_STRING:
+                 case EET_T_INLINED_STRING:
+                    data = eet_data_put_type(ed,
+                                             n->type,
+                                             &(n->data.value.str),
+                                             &size);
+                    if (data)
+                       eet_data_encode(ed,
+                                       ds,
+                                       data,
+                                       node->name,
+                                       size,
+                                       n->type,
+                                       node->type);
+
+                    break;
+
+                 case EET_T_NULL:
+                    continue;
+
+                 default:
+                    data = _eet_data_dump_encode(node->type, ed, n, &size);
+                    eet_data_encode(ed,
+                                    ds,
+                                    data,
+                                    node->name,
+                                    size,
+                                    n->type,
+                                    node->type);
+                } /* switch */
+           }
+
+         /* Hash is somekind of special case, so we should embed it inside another chunk. */
+         *size_ret = ds->pos;
+         cdata = ds->data;
+
+         eet_data_stream_flush(ds);
+
+         return cdata;
+
       case EET_T_NULL:
-        break;
-
-#define EET_DATA_NODE_ENCODE(Eet_Type, Type)                           \
-      case Eet_Type:                                                   \
-       data = eet_data_put_type(ed, node->type, &(node->data.value.Type), &size); \
-        if (data)                                                              \
-         {                                                             \
-            eet_data_encode(ed, ds, data, node->name, size, node->type, parent_type); \
-            cdata = ds->data;                                          \
-            *size_ret = ds->pos;                                       \
-            eet_data_stream_flush(ds);                                 \
-            return cdata;                                              \
-         }                                                             \
-       break;
-
-        EET_DATA_NODE_ENCODE(EET_T_CHAR, c);
-        EET_DATA_NODE_ENCODE(EET_T_SHORT, s);
-        EET_DATA_NODE_ENCODE(EET_T_INT, i);
-        EET_DATA_NODE_ENCODE(EET_T_LONG_LONG, l);
-        EET_DATA_NODE_ENCODE(EET_T_FLOAT, f);
-        EET_DATA_NODE_ENCODE(EET_T_DOUBLE, d);
-        EET_DATA_NODE_ENCODE(EET_T_UCHAR, uc);
-        EET_DATA_NODE_ENCODE(EET_T_USHORT, us);
-        EET_DATA_NODE_ENCODE(EET_T_UINT, ui);
-        EET_DATA_NODE_ENCODE(EET_T_ULONG_LONG, ul);
-        EET_DATA_NODE_ENCODE(EET_T_INLINED_STRING, str);
-        EET_DATA_NODE_ENCODE(EET_T_STRING, str);
+         break;
+
+#define EET_DATA_NODE_ENCODE(Eet_Type, Type)\
+ case Eet_Type:\
+    data = eet_data_put_type(ed, node->type, &(node->data.value.Type), &size);\
+    if (data)\
+      {\
+         eet_data_encode(ed,\
+                         ds,\
+                         data,\
+                         node->name,\
+                         size,\
+                         node->type,\
+                         parent_type);\
+         cdata = ds->data;\
+         *size_ret = ds->pos;\
+         eet_data_stream_flush(ds);\
+         return cdata;\
+      } /* switch */\
+    break;
+
+         EET_DATA_NODE_ENCODE(EET_T_CHAR,           c);
+         EET_DATA_NODE_ENCODE(EET_T_SHORT,          s);
+         EET_DATA_NODE_ENCODE(EET_T_INT,            i);
+         EET_DATA_NODE_ENCODE(EET_T_LONG_LONG,      l);
+         EET_DATA_NODE_ENCODE(EET_T_FLOAT,          f);
+         EET_DATA_NODE_ENCODE(EET_T_DOUBLE,         d);
+         EET_DATA_NODE_ENCODE(EET_T_UCHAR,          uc);
+         EET_DATA_NODE_ENCODE(EET_T_USHORT,         us);
+         EET_DATA_NODE_ENCODE(EET_T_UINT,           ui);
+         EET_DATA_NODE_ENCODE(EET_T_ULONG_LONG,     ul);
+         EET_DATA_NODE_ENCODE(EET_T_INLINED_STRING, str);
+         EET_DATA_NODE_ENCODE(EET_T_STRING,         str);
+
       default:
-       break;
+         break;
      }
 
    if ((node->type >= EET_G_UNKNOWN) && (node->type < EET_G_LAST))
-     chnk = eet_data_chunk_new(ds->data, ds->pos, node->name, EET_T_UNKNOW, node->type);
+      chnk = eet_data_chunk_new(ds->data,
+                                ds->pos,
+                                node->name,
+                                EET_T_UNKNOW,
+                                node->type);
    else
-     chnk = eet_data_chunk_new(ds->data, ds->pos, node->name, node->type, EET_G_UNKNOWN);
+      chnk = eet_data_chunk_new(ds->data,
+                                ds->pos,
+                                node->name,
+                                node->type,
+                                EET_G_UNKNOWN);
+
    eet_data_stream_flush(ds);
 
    ds = eet_data_stream_new();
@@ -2194,262 +2808,284 @@ _eet_data_dump_encode(int parent_type,
    eet_data_chunk_free(chnk);
 
    return cdata;
-}
+} /* _eet_data_dump_encode */
 
 static void *
 _eet_data_dump_parse(Eet_Dictionary *ed,
-                     int *size_ret,
-                    const char *src,
-                    int size)
+                     int            *size_ret,
+                     const char     *src,
+                     int             size)
 {
    void *cdata = NULL;
    const char *p = NULL;
-#define M_NONE 0
+#define M_NONE   0
 #define M_STRUCT 1
-#define M_ 2
+#define M_       2
    int left, jump;
    Eet_Node *node_base = NULL;
    Eet_Node *node = NULL;
    Eet_Node *n = NULL, *nn = NULL;
 
    /* FIXME; handle parse errors */
-#define TOK_GET(t) \
+#define TOK_GET(t)\
    jump = left; t = _eet_data_dump_token_get(p, &left); p += jump - left;
    left = size;
-   for (p = src; p < (src + size);)
-     {
-       char *tok1, *tok2, *tok3, *tok4;
-
-       TOK_GET(tok1);
-       if (tok1)
-         {
-            if (!strcmp(tok1, "group"))
-              {
-                 TOK_GET(tok2);
-                 if (tok2)
-                   {
-                      TOK_GET(tok3);
-                      if (tok3)
-                        {
-                           TOK_GET(tok4);
-                           if (tok4)
-                             {
-                                if (!strcmp(tok4, "{"))
-                                  {
-                                     /* we have 'group NAM TYP {' */
-                                     n = eet_node_new();
-                                     if (n)
-                                       {
-                                          n->parent = node;
-                                          if (!node_base)
-                                            {
-                                               node_base = n;
-                                            }
-                                          if (node)
-                                            {
-                                               /* append node */
-                                               if (!node->values)
-                                                 node->values = n;
-                                               else
-                                                 {
-                                                    for (nn = node->values; nn; nn = nn->next)
-                                                      {
-                                                         if (!nn->next)
-                                                           {
-                                                              nn->next = n;
-                                                              break;
-                                                           }
-                                                      }
-                                                 }
-                                            }
-                                          n->name = eina_stringshare_add(tok2);
-                                          if      (!strcmp(tok3, "struct"))    n->type = EET_G_UNKNOWN;
-                                          else if (!strcmp(tok3, "array"))     n->type = EET_G_ARRAY;
-                                          else if (!strcmp(tok3, "var_array")) n->type = EET_G_VAR_ARRAY;
-                                          else if (!strcmp(tok3, "list"))      n->type = EET_G_LIST;
-                                          else if (!strcmp(tok3, "hash"))      n->type = EET_G_HASH;
-                                          else
-                                            {
-                                              ERR("ERROR: group type '%s' invalid.", tok3);
-                                            }
-                                          node = n;
-                                       }
-                                  }
-                                free(tok4);
-                             }
-                           free(tok3);
-                        }
-                      free(tok2);
-                   }
-              }
-            else if (!strcmp(tok1, "value"))
-              {
-                 TOK_GET(tok2);
-                 if (tok2)
-                   {
-                      TOK_GET(tok3);
-                      if (tok3)
-                        {
-                           TOK_GET(tok4);
-                           if (tok4)
-                             {
-                                /* we have 'value NAME TYP XXX' */
-                                if (node_base)
-                                  {
-                                     n = eet_node_new();
-                                     if (n)
-                                       {
-                                          n->parent = node;
-                                          /* append node */
-                                          if (!node->values)
-                                            node->values = n;
-                                          else
-                                            {
-                                               for (nn = node->values; nn; nn = nn->next)
-                                                 {
-                                                    if (!nn->next)
-                                                      {
-                                                         nn->next = n;
-                                                         break;
-                                                      }
-                                                 }
-                                            }
-                                          n->name = eina_stringshare_add(tok2);
-                                          if      (!strcmp(tok3, "char:"))
-                                            {
-                                               n->type = EET_T_CHAR;
-                                               sscanf(tok4, "%hhi", &(n->data.value.c));
-                                            }
-                                          else if (!strcmp(tok3, "short:"))
-                                            {
-                                               n->type = EET_T_SHORT;
-                                               sscanf(tok4, "%hi", &(n->data.value.s));
-                                            }
-                                          else if (!strcmp(tok3, "int:"))
-                                            {
-                                               n->type = EET_T_INT;
-                                               sscanf(tok4, "%i", &(n->data.value.i));
-                                            }
-                                          else if (!strcmp(tok3, "long_long:"))
-                                            {
-                                               n->type = EET_T_LONG_LONG;
-                                               sscanf(tok4, "%lli", &(n->data.value.l));
-                                            }
-                                          else if (!strcmp(tok3, "float:"))
-                                            {
-                                               n->type = EET_T_FLOAT;
-                                               sscanf(tok4, "%f", &(n->data.value.f));
-                                            }
-                                          else if (!strcmp(tok3, "double:"))
-                                            {
-                                               n->type = EET_T_DOUBLE;
-                                               sscanf(tok4, "%lf", &(n->data.value.d));
-                                            }
-                                          else if (!strcmp(tok3, "uchar:"))
-                                            {
-                                               n->type = EET_T_UCHAR;
-                                               sscanf(tok4, "%hhu", &(n->data.value.uc));
-                                            }
-                                          else if (!strcmp(tok3, "ushort:"))
-                                            {
-                                               n->type = EET_T_USHORT;
-                                               sscanf(tok4, "%hu", &(n->data.value.us));
-                                            }
-                                          else if (!strcmp(tok3, "uint:"))
-                                            {
-                                               n->type = EET_T_UINT;
-                                               sscanf(tok4, "%u", &(n->data.value.ui));
-                                            }
-                                          else if (!strcmp(tok3, "ulong_long:"))
-                                            {
-                                               n->type = EET_T_ULONG_LONG;
-                                               sscanf(tok4, "%llu", &(n->data.value.ul));
-                                            }
-                                          else if (!strcmp(tok3, "string:"))
-                                            {
-                                               n->type = EET_T_STRING;
-                                               n->data.value.str = eina_stringshare_add(tok4);
-                                            }
-                                          else if (!strcmp(tok3, "inlined:"))
-                                            {
-                                               n->type = EET_T_INLINED_STRING;
-                                               n->data.value.str = eina_stringshare_add(tok4);
-                                            }
-                                          else if (!strcmp(tok3, "null"))
-                                            {
-                                               n->type = EET_T_NULL;
-                                               n->data.value.str = NULL;
-                                            }
-                                          else
-                                            {
-                                               ERR("ERROR: value type '%s' invalid.", tok4);
-                                            }
-                                       }
-                                  }
-                                free(tok4);
-                             }
-                           free(tok3);
-                        }
-                      free(tok2);
-                   }
-              }
-            else if (!strcmp(tok1, "key"))
-              {
-                 TOK_GET(tok2);
-                 if (tok2)
-                   {
-                      /* we have 'key NAME' */
-                      if (node)
-                        {
-                           node->key = eina_stringshare_add(tok2);
-                        }
-                      free(tok2);
-                   }
-              }
-            else if (!strcmp(tok1, "count"))
-              {
-                 TOK_GET(tok2);
-                 if (tok2)
-                   {
-                      /* we have a 'count COUNT' */
-                      if (node)
-                        {
-                           sscanf(tok2, "%i", &(node->count));
-                        }
-                      free(tok2);
-                   }
-              }
-            else if (!strcmp(tok1, "}"))
-              {
-                 /* we have an end of the group */
-                 if (node) node = node->parent;
-              }
-            free(tok1);
-         }
+   for (p = src; p < (src + size); )
+     {
+        char *tok1, *tok2, *tok3, *tok4;
+
+        TOK_GET(tok1);
+        if (tok1)
+          {
+             if (!strcmp(tok1, "group"))
+               {
+                  TOK_GET(tok2);
+                  if (tok2)
+                    {
+                       TOK_GET(tok3);
+                       if (tok3)
+                         {
+                            TOK_GET(tok4);
+                            if (tok4)
+                              {
+                                 if (!strcmp(tok4, "{"))
+                                   {
+/* we have 'group NAM TYP {' */
+                                      n = eet_node_new();
+                                      if (n)
+                                        {
+                                           n->parent = node;
+                                           if (!node_base)
+                                              node_base = n;
+
+                                           if (node)
+                                             {
+/* append node */
+                                                if (!node->values)
+                                                   node->values = n;
+                                                else
+                                                   for (nn = node->values; nn;
+                                                        nn = nn->next)
+                                                     {
+                                                        if (!nn->next)
+                                                          {
+                                                             nn->next = n;
+                                                             break;
+                                                          }
+                                                     }
+                                             }
+
+                                           n->name = eina_stringshare_add(tok2);
+                                           if      (!strcmp(tok3, "struct"))
+                                              n->type = EET_G_UNKNOWN;
+                                           else if (!strcmp(tok3, "array"))
+                                              n->type = EET_G_ARRAY;
+                                           else if (!strcmp(tok3, "var_array"))
+                                              n->type = EET_G_VAR_ARRAY;
+                                           else if (!strcmp(tok3, "list"))
+                                              n->type = EET_G_LIST;
+                                           else if (!strcmp(tok3, "hash"))
+                                              n->type = EET_G_HASH;
+                                           else
+                                              ERR(
+                                                 "ERROR: group type '%s' invalid.",
+                                                 tok3);
+
+                                           node = n;
+                                        }
+                                   }
+
+                                 free(tok4);
+                              }
+
+                            free(tok3);
+                         }
+
+                       free(tok2);
+                    }
+               }
+             else if (!strcmp(tok1, "value"))
+               {
+                  TOK_GET(tok2);
+                  if (tok2)
+                    {
+                       TOK_GET(tok3);
+                       if (tok3)
+                         {
+                            TOK_GET(tok4);
+                            if (tok4)
+                              {
+/* we have 'value NAME TYP XXX' */
+                                 if (node_base)
+                                   {
+                                      n = eet_node_new();
+                                      if (n)
+                                        {
+                                           n->parent = node;
+/* append node */
+                                           if (!node->values)
+                                              node->values = n;
+                                           else
+                                              for (nn = node->values; nn;
+                                                   nn = nn->next)
+                                                {
+                                                   if (!nn->next)
+                                                     {
+                                                        nn->next = n;
+                                                        break;
+                                                     }
+                                                }
+
+                                           n->name = eina_stringshare_add(tok2);
+                                           if      (!strcmp(tok3, "char:"))
+                                             {
+                                                n->type = EET_T_CHAR;
+                                                sscanf(tok4, "%hhi",
+                                                       &(n->data.value.c));
+                                             }
+                                           else if (!strcmp(tok3, "short:"))
+                                             {
+                                                n->type = EET_T_SHORT;
+                                                sscanf(tok4, "%hi",
+                                                       &(n->data.value.s));
+                                             }
+                                           else if (!strcmp(tok3, "int:"))
+                                             {
+                                                n->type = EET_T_INT;
+                                                sscanf(tok4, "%i",
+                                                       &(n->data.value.i));
+                                             }
+                                           else if (!strcmp(tok3, "long_long:"))
+                                             {
+                                                n->type = EET_T_LONG_LONG;
+                                                sscanf(tok4, "%lli",
+                                                       &(n->data.value.l));
+                                             }
+                                           else if (!strcmp(tok3, "float:"))
+                                             {
+                                                n->type = EET_T_FLOAT;
+                                                sscanf(tok4, "%f",
+                                                       &(n->data.value.f));
+                                             }
+                                           else if (!strcmp(tok3, "double:"))
+                                             {
+                                                n->type = EET_T_DOUBLE;
+                                                sscanf(tok4, "%lf",
+                                                       &(n->data.value.d));
+                                             }
+                                           else if (!strcmp(tok3, "uchar:"))
+                                             {
+                                                n->type = EET_T_UCHAR;
+                                                sscanf(tok4, "%hhu",
+                                                       &(n->data.value.uc));
+                                             }
+                                           else if (!strcmp(tok3, "ushort:"))
+                                             {
+                                                n->type = EET_T_USHORT;
+                                                sscanf(tok4, "%hu",
+                                                       &(n->data.value.us));
+                                             }
+                                           else if (!strcmp(tok3, "uint:"))
+                                             {
+                                                n->type = EET_T_UINT;
+                                                sscanf(tok4, "%u",
+                                                       &(n->data.value.ui));
+                                             }
+                                           else if (!strcmp(tok3, "ulong_long:"))
+                                             {
+                                                n->type = EET_T_ULONG_LONG;
+                                                sscanf(tok4, "%llu",
+                                                       &(n->data.value.ul));
+                                             }
+                                           else if (!strcmp(tok3, "string:"))
+                                             {
+                                                n->type = EET_T_STRING;
+                                                n->data.value.str =
+                                                   eina_stringshare_add(tok4);
+                                             }
+                                           else if (!strcmp(tok3, "inlined:"))
+                                             {
+                                                n->type = EET_T_INLINED_STRING;
+                                                n->data.value.str =
+                                                   eina_stringshare_add(tok4);
+                                             }
+                                           else if (!strcmp(tok3, "null"))
+                                             {
+                                                n->type = EET_T_NULL;
+                                                n->data.value.str = NULL;
+                                             }
+                                           else
+                                              ERR(
+                                                 "ERROR: value type '%s' invalid.",
+                                                 tok4);
+                                        }
+                                   }
+
+                                 free(tok4);
+                              }
+
+                            free(tok3);
+                         }
+
+                       free(tok2);
+                    }
+               }
+             else if (!strcmp(tok1, "key"))
+               {
+                  TOK_GET(tok2);
+                  if (tok2)
+                    {
+/* we have 'key NAME' */
+                       if (node)
+                          node->key = eina_stringshare_add(tok2);
+
+                       free(tok2);
+                    }
+               }
+             else if (!strcmp(tok1, "count"))
+               {
+                  TOK_GET(tok2);
+                  if (tok2)
+                    {
+/* we have a 'count COUNT' */
+                       if (node)
+                          sscanf(tok2, "%i", &(node->count));
+
+                       free(tok2);
+                    }
+               }
+             else if (!strcmp(tok1, "}"))
+                /* we have an end of the group */
+                if (node)
+                   node = node->parent;
+
+             free(tok1);
+          }
      }
 
    if (node_base)
      {
-       cdata = _eet_data_dump_encode(EET_G_UNKNOWN, ed, node_base, size_ret);
-       eet_node_del(node_base);
+        cdata = _eet_data_dump_encode(EET_G_UNKNOWN, ed, node_base, size_ret);
+        eet_node_del(node_base);
      }
-   return cdata;
-}
 
-#define NEXT_CHUNK(P, Size, Echnk, Ed)                  \
-  {                                                     \
-     int        tmp;                                    \
-     tmp = Ed ? (int) (sizeof(int) * 2) : Echnk.len + 4;\
-     P += (4 + Echnk.size + tmp);                       \
-     Size -= (4 + Echnk.size + tmp);                    \
-  }
+   return cdata;
+} /* _eet_data_dump_parse */
+
+#define NEXT_CHUNK(P, Size, Echnk, Ed)\
+   {\
+      int tmp;\
+      tmp = Ed ? (int)(sizeof(int) * 2) : Echnk.len + 4;\
+      P += (4 + Echnk.size + tmp);\
+      Size -= (4 + Echnk.size + tmp);\
+   }
 
 static void *
-_eet_data_descriptor_decode(Eet_Free_Context *context,
-                           const Eet_Dictionary *ed,
-                            Eet_Data_Descriptor *edd,
-                           const void *data_in,
-                           int size_in)
+_eet_data_descriptor_decode(Eet_Free_Context     *context,
+                            const Eet_Dictionary *ed,
+                            Eet_Data_Descriptor  *edd,
+                            const void           *data_in,
+                            int                   size_in)
 {
    Eet_Node *result = NULL;
    void *data = NULL;
@@ -2459,164 +3095,198 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
 
    if (_eet_data_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_data_words_bigendian = 1;
-       else _eet_data_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_data_words_bigendian = 1;
+        else
+           _eet_data_words_bigendian = 0;
      }
 
    if (edd)
      {
-       data = edd->func.mem_alloc(edd->size);
-       if (!data) return NULL;
-       if (edd->ed != ed)
-         {
-            for (i = 0; i < edd->elements.num; i++)
-              edd->elements.set[i].directory_name_ptr = NULL;
-            edd->ed = ed;
-         }
+        data = edd->func.mem_alloc(edd->size);
+        if (!data)
+           return NULL;
+
+        if (edd->ed != ed)
+          {
+             for (i = 0; i < edd->elements.num; i++)
+                edd->elements.set[i].directory_name_ptr = NULL;
+             edd->ed = ed;
+          }
      }
+
    _eet_freelist_all_ref(context);
-   if (data) _eet_freelist_add(context, data);
+   if (data)
+      _eet_freelist_add(context, data);
+
    memset(&chnk, 0, sizeof(Eet_Data_Chunk));
    eet_data_chunk_get(ed, &chnk, data_in, size_in);
-   if (!chnk.name) goto error;
+   if (!chnk.name)
+      goto error;
+
    if (edd)
-     {
-       if (strcmp(chnk.name, edd->name)) goto error;
-     }
+      if (strcmp(chnk.name, edd->name))
+         goto error;
+
    p = chnk.data;
    if (ed)
-     size = size_in - (4 + sizeof(int) * 2);
+      size = size_in - (4 + sizeof(int) * 2);
    else
-     size = size_in - (4 + 4 + chnk.len);
+      size = size_in - (4 + 4 + chnk.len);
+
    if (edd)
      {
-       if (!edd->elements.hash.buckets) _eet_descriptor_hash_new(edd);
+        if (!edd->elements.hash.buckets)
+           _eet_descriptor_hash_new(edd);
      }
    else
      {
-       switch (chnk.group_type)
-         {
-          case EET_G_UNKNOWN:
-             switch (chnk.type)
-               {
-                case EET_T_STRING:
-                   return eet_node_string_new(chnk.name, chnk.data);
-                case EET_T_INLINED_STRING:
-                   return eet_node_inlined_string_new(chnk.name, chnk.data);
-                case EET_T_NULL:
-                   return eet_node_null_new(chnk.name);
-                default:
-                   result = eet_node_struct_new(chnk.name, NULL);
-               }
-             break;
-          case EET_G_VAR_ARRAY:
-             return eet_node_var_array_new(chnk.name, NULL);
-          case EET_G_LIST:
-          case EET_G_HASH:
-          case EET_G_ARRAY:
-          case EET_G_UNION:
-          case EET_G_VARIANT:
-          default:
-             goto error;
-         }
+        switch (chnk.group_type)
+          {
+           case EET_G_UNKNOWN:
+              switch (chnk.type)
+                {
+                 case EET_T_STRING:
+                    return eet_node_string_new(chnk.name, chnk.data);
+
+                 case EET_T_INLINED_STRING:
+                    return eet_node_inlined_string_new(chnk.name, chnk.data);
+
+                 case EET_T_NULL:
+                    return eet_node_null_new(chnk.name);
+
+                 default:
+                    result = eet_node_struct_new(chnk.name, NULL);
+                } /* switch */
+              break;
+
+           case EET_G_VAR_ARRAY:
+              return eet_node_var_array_new(chnk.name, NULL);
+
+           case EET_G_LIST:
+           case EET_G_HASH:
+           case EET_G_ARRAY:
+           case EET_G_UNION:
+           case EET_G_VARIANT:
+           default:
+              goto error;
+          } /* switch */
      }
+
    while (size > 0)
      {
-       Eet_Data_Chunk echnk;
-       Eet_Data_Element *ede = NULL;
-       Eet_Node *child = NULL;
-       int group_type = EET_G_UNKNOWN, type = EET_T_UNKNOW;
-       int ret = 0;
-
-       /* get next data chunk */
-       memset(&echnk, 0, sizeof(Eet_Data_Chunk));
-       eet_data_chunk_get(ed, &echnk, p, size);
-       if (!echnk.name) goto error;
-       /* FIXME: don't REPLY on edd - work without */
-       if (edd)
-         {
-            ede = _eet_descriptor_hash_find(edd, echnk.name, echnk.hash);
-            if (ede)
-              {
-                 group_type = ede->group_type;
-                 type = ede->type;
-                 if ((echnk.type == 0) && (echnk.group_type == 0))
-                   {
-                      type = ede->type;
-                      group_type = ede->group_type;
-                   }
-                 else
-                   {
-                      if (IS_SIMPLE_TYPE(echnk.type) &&
-                          eet_data_type_match(echnk.type, ede->type))
-                        /* Needed when converting on the fly from FP to Float */
-                        type = ede->type;
-                      else if ((echnk.group_type > EET_G_UNKNOWN) &&
-                               (echnk.group_type < EET_G_LAST) &&
-                               (echnk.group_type == ede->group_type))
-                        group_type = echnk.group_type;
-                   }
-              }
-         }
-       /*...... dump to node */
-       else
-         {
-            type = echnk.type;
-            group_type = echnk.group_type;
-         }
-
-       if (!edd && group_type == EET_G_UNKNOWN && IS_SIMPLE_TYPE(type))
-         {
-            unsigned char dd[128];
-
-            ret = eet_data_get_type(ed,
-                                    type,
-                                    echnk.data,
-                                    ((char *)echnk.data) + echnk.size,
-                                    dd);
-            if (ret <= 0) goto error;
-
-            child = eet_data_node_simple_type(type, echnk.name, dd);
-
-            eet_node_struct_append(result, echnk.name, child);
-         }
-       else
-         {
-            ret = eet_group_codec[group_type - 100].get(context,
-                                                        ed, edd, ede, &echnk,
-                                                        type, group_type, ede ? (void*) (((char *)data) + ede->offset) : (void**) &result,
-                                                        &p, &size);
-
-            if (ret <= 0) goto error;
-         }
-
-       /* advance to next chunk */
+        Eet_Data_Chunk echnk;
+        Eet_Data_Element *ede = NULL;
+        Eet_Node *child = NULL;
+        int group_type = EET_G_UNKNOWN, type = EET_T_UNKNOW;
+        int ret = 0;
+
+        /* get next data chunk */
+        memset(&echnk, 0, sizeof(Eet_Data_Chunk));
+        eet_data_chunk_get(ed, &echnk, p, size);
+        if (!echnk.name)
+           goto error;  /* FIXME: don't REPLY on edd - work without */
+
+        if (edd)
+          {
+             ede = _eet_descriptor_hash_find(edd, echnk.name, echnk.hash);
+             if (ede)
+               {
+                  group_type = ede->group_type;
+                  type = ede->type;
+                  if ((echnk.type == 0) && (echnk.group_type == 0))
+                    {
+                       type = ede->type;
+                       group_type = ede->group_type;
+                    }
+                  else
+                    {
+                       if (IS_SIMPLE_TYPE(echnk.type) &&
+                           eet_data_type_match(echnk.type, ede->type))
+/* Needed when converting on the fly from FP to Float */
+                          type = ede->type;
+                       else if ((echnk.group_type > EET_G_UNKNOWN) &&
+                                (echnk.group_type < EET_G_LAST) &&
+                                (echnk.group_type == ede->group_type))
+                          group_type = echnk.group_type;
+                    }
+               }
+          }
+        /*...... dump to node */
+        else
+          {
+             type = echnk.type;
+             group_type = echnk.group_type;
+          }
+
+        if (!edd && group_type == EET_G_UNKNOWN && IS_SIMPLE_TYPE(type))
+          {
+             unsigned char dd[128];
+
+             ret = eet_data_get_type(ed,
+                                     type,
+                                     echnk.data,
+                                     ((char *)echnk.data) + echnk.size,
+                                     dd);
+             if (ret <= 0)
+                goto error;
+
+             child = eet_data_node_simple_type(type, echnk.name, dd);
+
+             eet_node_struct_append(result, echnk.name, child);
+          }
+        else
+          {
+             ret = eet_group_codec[group_type - 100].get(
+                   context,
+                   ed,
+                   edd,
+                   ede,
+                   &echnk,
+                   type,
+                   group_type,
+                   ede ? (void *)(((char
+                                    *)
+                                   data)
+                                  + ede->
+                                  offset)
+                   : (void **)&result,
+                   &p,
+                   &size);
+
+             if (ret <= 0)
+                goto error;
+          }
+
+        /* advance to next chunk */
         NEXT_CHUNK(p, size, echnk, ed);
      }
 
    _eet_freelist_all_unref(context);
    if (!edd)
      {
-       _eet_freelist_str_free(context, edd);
-       _eet_freelist_direct_str_free(context, edd);
-       _eet_freelist_list_free(context, edd);
-       _eet_freelist_hash_free(context, edd);
-       _eet_freelist_free(context, edd);
+        _eet_freelist_str_free(context, edd);
+        _eet_freelist_direct_str_free(context, edd);
+        _eet_freelist_list_free(context, edd);
+        _eet_freelist_hash_free(context, edd);
+       _eet_freelist_array_free(context, edd);
+        _eet_freelist_free(context, edd);
      }
    else
      {
-       _eet_freelist_reset(context);
-       _eet_freelist_str_reset(context);
-       _eet_freelist_list_reset(context);
-       _eet_freelist_hash_reset(context);
-       _eet_freelist_direct_str_reset(context);
+        _eet_freelist_reset(context);
+        _eet_freelist_str_reset(context);
+        _eet_freelist_list_reset(context);
+        _eet_freelist_hash_reset(context);
+        _eet_freelist_direct_str_reset(context);
+       _eet_freelist_array_reset(context);
      }
 
    if (!edd)
-     return result;
+      return result;
 
    return data;
 
@@ -2628,16 +3298,24 @@ error:
    _eet_freelist_direct_str_free(context, edd);
    _eet_freelist_list_free(context, edd);
    _eet_freelist_hash_free(context, edd);
+   _eet_freelist_array_free(context, edd);
    _eet_freelist_free(context, edd);
 
    /* FIXME: Warn that something goes wrong here. */
    return NULL;
-}
+} /* _eet_data_descriptor_decode */
 
 static int
-eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                 int type, int group_type __UNUSED__, void *data,
-                 char **p, int *size)
+eet_data_get_list(Eet_Free_Context     *context,
+                  const Eet_Dictionary *ed,
+                  Eet_Data_Descriptor  *edd,
+                  Eet_Data_Element     *ede,
+                  Eet_Data_Chunk       *echnk,
+                  int                   type,
+                  int group_type        __UNUSED__,
+                  void                 *data,
+                  char                **p,
+                  int                  *size)
 {
    Eet_Data_Descriptor *subtype = NULL;
    void *list = NULL;
@@ -2648,10 +3326,10 @@ eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_
 
    if (edd)
      {
-       subtype = ede->subtype;
+        subtype = ede->subtype;
 
-       if (type != ede->type)
-         return 0;
+        if (type != ede->type)
+           return 0;
      }
 
    ptr = (void **)data;
@@ -2659,35 +3337,51 @@ eet_data_get_list(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_
    data_ret = NULL;
 
    if (IS_POINTER_TYPE(type))
-     {
-       POINTER_TYPE_DECODE(context, ed, edd, ede, echnk, type, &data_ret, p, size, on_error);
-     }
+      POINTER_TYPE_DECODE(context,
+                          ed,
+                          edd,
+                          ede,
+                          echnk,
+                          type,
+                          &data_ret,
+                          p,
+                          size,
+                          on_error);
    else
-     {
-       STRUCT_TYPE_DECODE(data_ret, context, ed, subtype, echnk->data, echnk->size, on_error);
-     }
+      STRUCT_TYPE_DECODE(data_ret,
+                         context,
+                         ed,
+                         subtype,
+                         echnk->data,
+                         echnk->size,
+                         on_error);
 
    if (edd)
      {
-       list = edd->func.list_append(list, data_ret);
-       *ptr = list;
-       _eet_freelist_list_add(context, ptr);
+        list = edd->func.list_append(list, data_ret);
+        *ptr = list;
+        _eet_freelist_list_add(context, ptr);
      }
    else
-     {
-       eet_node_list_append(*((Eet_Node**) data), echnk->name, data_ret);
-     }
+      eet_node_list_append(*((Eet_Node **)data), echnk->name, data_ret);
 
    return 1;
 
- on_error:
+on_error:
    return 0;
-}
+} /* eet_data_get_list */
 
 static int
-eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                 int type, int group_type __UNUSED__, void *data,
-                 char **p, int *size)
+eet_data_get_hash(Eet_Free_Context     *context,
+                  const Eet_Dictionary *ed,
+                  Eet_Data_Descriptor  *edd,
+                  Eet_Data_Element     *ede,
+                  Eet_Data_Chunk       *echnk,
+                  int                   type,
+                  int group_type        __UNUSED__,
+                  void                 *data,
+                  char                **p,
+                  int                  *size)
 {
    void **ptr;
    void *hash = NULL;
@@ -2702,11 +3396,12 @@ eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_
 
    /* Read key */
    ret = eet_data_get_type(ed,
-                          EET_T_STRING,
-                          echnk->data,
-                          ((char *)echnk->data) + echnk->size,
-                          &key);
-   if (ret <= 0) goto on_error;
+                           EET_T_STRING,
+                           echnk->data,
+                           ((char *)echnk->data) + echnk->size,
+                           &key);
+   if (ret <= 0)
+      goto on_error;
 
    /* Advance to next chunk */
    NEXT_CHUNK((*p), (*size), (*echnk), ed);
@@ -2714,33 +3409,43 @@ eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_
 
    /* Read value */
    eet_data_chunk_get(ed, echnk, *p, *size);
-   if (!echnk->name) goto on_error;
+   if (!echnk->name)
+      goto on_error;
 
    if (IS_POINTER_TYPE(echnk->type))
-     {
-       POINTER_TYPE_DECODE(context, ed, edd, ede, echnk, echnk->type, &data_ret, p, size, on_error);
-     }
+      POINTER_TYPE_DECODE(context,
+                          ed,
+                          edd,
+                          ede,
+                          echnk,
+                          echnk->type,
+                          &data_ret,
+                          p,
+                          size,
+                          on_error);
    else
-     {
-       STRUCT_TYPE_DECODE(data_ret, context, ed, ede ? ede->subtype : NULL, echnk->data, echnk->size, on_error);
-     }
+      STRUCT_TYPE_DECODE(data_ret,
+                         context,
+                         ed,
+                         ede ? ede->subtype : NULL,
+                         echnk->data,
+                         echnk->size,
+                         on_error);
 
    if (edd)
      {
-       hash = edd->func.hash_add(hash, key, data_ret);
-       *ptr = hash;
-       _eet_freelist_hash_add(context, hash);
+        hash = edd->func.hash_add(hash, key, data_ret);
+        *ptr = hash;
+        _eet_freelist_hash_add(context, hash);
      }
    else
-     {
-       eet_node_hash_add(*((Eet_Node **) data), echnk->name, key, data_ret);
-     }
+      eet_node_hash_add(*((Eet_Node **)data), echnk->name, key, data_ret);
 
    return 1;
 
- on_error:
+on_error:
    return ret;
-}
+} /* eet_data_get_hash */
 
 /* var arrays and fixed arrays have to
  * get all chunks at once. for fixed arrays
@@ -2753,10 +3458,16 @@ eet_data_get_hash(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_
  * each chunk is pointless.
  */
 static int
-eet_data_get_array(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd,
-                  Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                  int type, int group_type, void *data,
-                  char **p, int *size)
+eet_data_get_array(Eet_Free_Context     *context,
+                   const Eet_Dictionary *ed,
+                   Eet_Data_Descriptor  *edd,
+                   Eet_Data_Element     *ede,
+                   Eet_Data_Chunk       *echnk,
+                   int                   type,
+                   int                   group_type,
+                   void                 *data,
+                   char                **p,
+                   int                  *size)
 {
    Eina_List *childs = NULL;
    const char *name;
@@ -2772,154 +3483,206 @@ eet_data_get_array(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data
    ptr = data;
    /* read the number of elements */
    ret = eet_data_get_type(ed,
-                          EET_T_INT,
-                          echnk->data,
-                          ((char *)echnk->data) + echnk->size,
-                          &count);
-   if (ret <= 0) return ret;
+                           EET_T_INT,
+                           echnk->data,
+                           ((char *)echnk->data) + echnk->size,
+                           &count);
+   if (ret <= 0)
+      return ret;
 
    name = echnk->name;
 
    if (ede)
      {
-       if (IS_POINTER_TYPE(type))
-         subsize = eet_basic_codec[ede->type].size;
-       else
-         subsize = ede->subtype->size;
-
-       if (group_type == EET_G_VAR_ARRAY)
-         {
-            /* store the number of elements
-             * on the counter offset */
-            *(int *)(((char *)data) + ede->count - ede->offset) = count;
-            /* allocate space for the array of elements */
-            *(void **)ptr = edd->func.mem_alloc(count * subsize);
+        if (IS_POINTER_TYPE(type))
+           subsize = eet_basic_codec[ede->type].size;
+        else
+           subsize = ede->subtype->size;
+
+        if (group_type == EET_G_VAR_ARRAY)
+          {
+             /* store the number of elements
+              * on the counter offset */
+             *(int *)(((char *)data) + ede->count - ede->offset) = count;
+             /* allocate space for the array of elements */
+            if (edd->func.array_alloc)
+              *(void **) ptr = edd->func.array_alloc(count * subsize);
+            else
+              *(void **) ptr = edd->func.mem_alloc(count * subsize);
 
-            if (!*(void **)ptr) return 0;
+             if (!*(void **)ptr)
+                return 0;
 
-            memset(*(void **)ptr, 0, count * subsize);
+             memset(*(void **)ptr, 0, count * subsize);
 
-            _eet_freelist_add(context, *(void **)ptr);
-         }
+             _eet_freelist_array_add(context, *(void **)ptr);
+          }
      }
 
    /* get all array elements */
    for (i = 0; i < count; i++)
      {
-       void *dst = NULL;
-       void *data_ret = NULL;
-
-       /* Advance to next chunk */
-       NEXT_CHUNK((*p), (*size), (*echnk), ed);
-       memset(echnk, 0, sizeof(Eet_Data_Chunk));
-
-       eet_data_chunk_get(ed, echnk, *p, *size);
-       if (!echnk->name || strcmp(echnk->name, name) != 0) goto on_error;
-       /* get the data */
-
-       if (echnk->group_type != group_type
-           || (echnk->type != type && echnk->type != EET_T_NULL))
-         goto on_error;
-
-       if (ede)
-         if (ede->group_type != echnk->group_type
-             || (echnk->type != ede->type && echnk->type != EET_T_NULL))
-           goto on_error;
-
-       /* get the destination pointer */
-       if (ede)
-         {
-            if (group_type == EET_G_ARRAY)
-              dst = (char *)ptr + (subsize * i);
-            else
-              dst = *(char **)ptr + (subsize * i);
-         }
-
-       if (IS_POINTER_TYPE(echnk->type))
-         {
-            POINTER_TYPE_DECODE(context, ed, edd, ede, echnk, echnk->type, &data_ret, p, size, on_error);
-            if (dst) memcpy(dst, &data_ret, subsize);
-            if (!edd) childs = eina_list_append(childs, data_ret);
-         }
-       else
-         {
-            STRUCT_TYPE_DECODE(data_ret, context, ed, ede ? ede->subtype : NULL, echnk->data, echnk->size, on_error);
-            if (dst)
-              {
-                 memcpy(dst, data_ret, subsize);
-                 _eet_freelist_add(context, data_ret);
-              }
-            if (!edd) childs = eina_list_append(childs, data_ret);
-         }
+        void *dst = NULL;
+        void *data_ret = NULL;
+
+        /* Advance to next chunk */
+        NEXT_CHUNK((*p), (*size), (*echnk), ed);
+        memset(echnk, 0, sizeof(Eet_Data_Chunk));
+
+        eet_data_chunk_get(ed, echnk, *p, *size);
+        if (!echnk->name || strcmp(echnk->name, name) != 0)
+           goto on_error;  /* get the data */
+
+        if ((echnk->group_type != group_type)
+            || ((echnk->type != type) && (echnk->type != EET_T_NULL)))
+           goto on_error;
+
+        if (ede)
+           if ((ede->group_type != echnk->group_type)
+               || ((echnk->type != ede->type) && (echnk->type != EET_T_NULL)))
+              goto on_error;
+
+        /* get the destination pointer */
+        if (ede)
+          {
+             if (group_type == EET_G_ARRAY)
+                dst = (char *)ptr + (subsize * i);
+             else
+                dst = *(char **)ptr + (subsize * i);
+          }
+
+        if (IS_POINTER_TYPE(echnk->type))
+          {
+             POINTER_TYPE_DECODE(context,
+                                 ed,
+                                 edd,
+                                 ede,
+                                 echnk,
+                                 echnk->type,
+                                 &data_ret,
+                                 p,
+                                 size,
+                                 on_error);
+             if (dst)
+                memcpy(dst, &data_ret, subsize);
+
+             if (!edd)
+                childs = eina_list_append(childs, data_ret);
+          }
+        else
+          {
+             STRUCT_TYPE_DECODE(data_ret,
+                                context,
+                                ed,
+                                ede ? ede->subtype : NULL,
+                                echnk->data,
+                                echnk->size,
+                                on_error);
+             if (dst)
+               {
+                  memcpy(dst, data_ret, subsize);
+                 if (edd) edd->func.mem_free(data_ret);
+                 else free(data_ret);
+               }
+
+             if (!edd)
+                childs = eina_list_append(childs, data_ret);
+          }
      }
 
    if (!edd)
      {
-       Eet_Node *parent = *((Eet_Node **) data);
-       Eet_Node *array;
+        Eet_Node *parent = *((Eet_Node **)data);
+        Eet_Node *array;
 
-       if (group_type == EET_G_ARRAY)
-         array = eet_node_array_new(name, count, childs);
-       else
-         array = eet_node_var_array_new(name, childs);
+        if (group_type == EET_G_ARRAY)
+           array = eet_node_array_new(name, count, childs);
+        else
+           array = eet_node_var_array_new(name, childs);
 
-       if (!array) goto on_error;
+        if (!array)
+           goto on_error;
 
-       eet_node_struct_append(parent, name, array);
+        eet_node_struct_append(parent, name, array);
      }
 
    return 1;
 
- on_error:
+on_error:
    EINA_LIST_FREE(childs, tmp)
-     eet_node_del(tmp);
+   eet_node_del(tmp);
 
    return 0;
-}
+} /* eet_data_get_array */
 
 static void
-eet_data_put_union(Eet_Dictionary *ed,
-                  __UNUSED__ Eet_Data_Descriptor *edd,
-                  Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_union(Eet_Dictionary          *ed,
+                   Eet_Data_Descriptor *edd __UNUSED__,
+                   Eet_Data_Element        *ede,
+                   Eet_Data_Stream         *ds,
+                   void                    *data_in)
 {
    const char *union_type;
    int i;
 
    EET_ASSERT(!((ede->type != EET_T_UNKNOW) || (!ede->subtype)), return );
 
-   union_type = ede->subtype->func.type_get(((char*) data_in) + ede->count - ede->offset,
-                                           NULL);
+   union_type = ede->subtype->func.type_get(
+         ((char *)data_in) + ede->count - ede->offset,
+         NULL);
 
-   if (!union_type) return ;
+   if (!union_type)
+      return;
 
    /* Search the structure of the union to encode. */
    for (i = 0; i < ede->subtype->elements.num; ++i)
-     if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
-       {
-         Eet_Data_Element *sede;
-         void *data;
-         int size;
-
-         /* Yeah we found it ! */
-         data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
-         if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-
-         sede = &(ede->subtype->elements.set[i]);
-         data = _eet_data_descriptor_encode(ed,
-                                            sede->subtype,
-                                            data_in,
-                                            &size);
-         if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-         break;
-       }
-}
+      if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
+        {
+           Eet_Data_Element *sede;
+           void *data;
+           int size;
+
+           /* Yeah we found it ! */
+           data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
+           if (data)
+              eet_data_encode(ed,
+                              ds,
+                              data,
+                              ede->name,
+                              size,
+                              ede->type,
+                              ede->group_type);
+
+           sede = &(ede->subtype->elements.set[i]);
+           data = _eet_data_descriptor_encode(ed,
+                                              sede->subtype,
+                                              data_in,
+                                              &size);
+           if (data)
+              eet_data_encode(ed,
+                              ds,
+                              data,
+                              ede->name,
+                              size,
+                              ede->type,
+                              ede->group_type);
+
+           break;
+        }
+
+} /* eet_data_put_union */
 
 static int
-eet_data_get_union(Eet_Free_Context *context, const Eet_Dictionary *ed,
-                  __UNUSED__ Eet_Data_Descriptor *edd,
-                  Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                  int type, int group_type, void *data,
-                  char **p, int *size)
+eet_data_get_union(Eet_Free_Context        *context,
+                   const Eet_Dictionary    *ed,
+                   Eet_Data_Descriptor *edd __UNUSED__,
+                   Eet_Data_Element        *ede,
+                   Eet_Data_Chunk          *echnk,
+                   int                      type,
+                   int                      group_type,
+                   void                    *data,
+                   char                   **p,
+                   int                     *size)
 {
    const char *union_type;
    void *data_ret = NULL;
@@ -2928,11 +3691,12 @@ eet_data_get_union(Eet_Free_Context *context, const Eet_Dictionary *ed,
 
    /* Read type */
    ret = eet_data_get_type(ed,
-                          EET_T_STRING,
-                          echnk->data,
-                          ((char *)echnk->data) + echnk->size,
-                          &union_type);
-   if (ret <= 0) goto on_error;
+                           EET_T_STRING,
+                           echnk->data,
+                           ((char *)echnk->data) + echnk->size,
+                           &union_type);
+   if (ret <= 0)
+      goto on_error;
 
    /* Advance to next chunk */
    NEXT_CHUNK((*p), (*size), (*echnk), ed);
@@ -2940,74 +3704,82 @@ eet_data_get_union(Eet_Free_Context *context, const Eet_Dictionary *ed,
 
    /* Read value */
    eet_data_chunk_get(ed, echnk, *p, *size);
-   if (!echnk->name) goto on_error;
+   if (!echnk->name)
+      goto on_error;
 
    if (ede)
      {
-       EET_ASSERT(!(ede->group_type != group_type || ede->type != type), goto on_error);
-
-       /* Search the structure of the union to decode */
-       for (i = 0; i < ede->subtype->elements.num; ++i)
-         if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
-           {
-              Eet_Data_Element *sede;
-              char *ut;
-
-              /* Yeah we found it ! */
-              sede = &(ede->subtype->elements.set[i]);
-              EET_ASSERT(sede->subtype, goto on_error);
-
-              data_ret = _eet_data_descriptor_decode(context,
-                                                     ed,
-                                                     sede->subtype,
-                                                     echnk->data,
-                                                     echnk->size);
-              if (!data_ret) goto on_error;
-
-              /* Memcopy the structure content to remove pointer indirection. */
-              memcpy(data, data_ret, sede->subtype->size);
-
-              /* data_ret is now useless. */
-              sede->subtype->func.mem_free(data_ret);
-
-              /* Set union type. */
-              if ((!ed) || (!ede->subtype->func.str_direct_alloc))
-                {
-                   ut = ede->subtype->func.str_alloc(union_type);
-                   _eet_freelist_str_add(context, ut);
-                }
-              else
-                {
-                   ut = ede->subtype->func.str_direct_alloc(union_type);
-                   _eet_freelist_direct_str_add(context, ut);
-                }
-
-              ede->subtype->func.type_set(ut,
-                                          ((char*) data) + ede->count - ede->offset,
-                                          EINA_FALSE);
-
-              break;
-           }
+        EET_ASSERT(!(ede->group_type != group_type || ede->type != type),
+                   goto on_error);
+
+        /* Search the structure of the union to decode */
+        for (i = 0; i < ede->subtype->elements.num; ++i)
+           if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
+             {
+                Eet_Data_Element *sede;
+                char *ut;
+
+                /* Yeah we found it ! */
+                sede = &(ede->subtype->elements.set[i]);
+                EET_ASSERT(sede->subtype, goto on_error);
+
+                data_ret = _eet_data_descriptor_decode(context,
+                                                       ed,
+                                                       sede->subtype,
+                                                       echnk->data,
+                                                       echnk->size);
+                if (!data_ret)
+                   goto on_error;
+
+                /* Memcopy the structure content to remove pointer indirection. */
+                memcpy(data, data_ret, sede->subtype->size);
+
+                /* data_ret is now useless. */
+                sede->subtype->func.mem_free(data_ret);
+
+                /* Set union type. */
+                if ((!ed) || (!ede->subtype->func.str_direct_alloc))
+                  {
+                     ut = ede->subtype->func.str_alloc(union_type);
+                     _eet_freelist_str_add(context, ut);
+                  }
+                else
+                  {
+                     ut = ede->subtype->func.str_direct_alloc(union_type);
+                     _eet_freelist_direct_str_add(context, ut);
+                  }
+
+                ede->subtype->func.type_set(
+                   ut,
+                   ((char *)data) + ede->count -
+                   ede->offset,
+                   EINA_FALSE);
+
+                break;
+             }
+
      }
    else
      {
-       /* FIXME: generate node structure. */
-       data_ret = _eet_data_descriptor_decode(context,
-                                              ed, NULL,
-                                              echnk->data, echnk->size);
-       goto on_error;
+        /* FIXME: generate node structure. */
+        data_ret = _eet_data_descriptor_decode(context,
+                                               ed, NULL,
+                                               echnk->data, echnk->size);
+        goto on_error;
      }
 
    return 1;
 
- on_error:
+on_error:
    return 0;
-}
+} /* eet_data_get_union */
 
 static void
-eet_data_put_variant(Eet_Dictionary *ed,
-                    __UNUSED__ Eet_Data_Descriptor *edd,
-                    Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_variant(Eet_Dictionary          *ed,
+                     Eet_Data_Descriptor *edd __UNUSED__,
+                     Eet_Data_Element        *ede,
+                     Eet_Data_Stream         *ds,
+                     void                    *data_in)
 {
    const char *union_type;
    void *data;
@@ -3017,83 +3789,114 @@ eet_data_put_variant(Eet_Dictionary *ed,
 
    EET_ASSERT(!((ede->type != EET_T_UNKNOW) || (!ede->subtype)), return );
 
-   union_type = ede->subtype->func.type_get(((char*) data_in) + ede->count - ede->offset,
-                                           &unknow);
+   union_type = ede->subtype->func.type_get(
+         ((char *)data_in) + ede->count - ede->offset,
+         &unknow);
 
-   if (!union_type && unknow == EINA_FALSE) return ;
+   if (!union_type && unknow == EINA_FALSE)
+      return;
 
    if (unknow)
      {
-       /* Handle opaque internal representation */
-       Eet_Variant_Unknow *evu;
-
-       data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
-       if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-
-       evu = (Eet_Variant_Unknow*) data_in;
-       if (evu && EINA_MAGIC_CHECK(evu, EET_MAGIC_VARIANT))
-         eet_data_encode(ed, ds, evu->data, ede->name, evu->size, ede->type, ede->group_type);
+        /* Handle opaque internal representation */
+        Eet_Variant_Unknow *evu;
+
+        data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
+        if (data)
+           eet_data_encode(ed,
+                           ds,
+                           data,
+                           ede->name,
+                           size,
+                           ede->type,
+                           ede->group_type);
+
+        evu = (Eet_Variant_Unknow *)data_in;
+        if (evu && EINA_MAGIC_CHECK(evu, EET_MAGIC_VARIANT))
+           eet_data_encode(ed,
+                           ds,
+                           evu->data,
+                           ede->name,
+                           evu->size,
+                           ede->type,
+                           ede->group_type);
      }
    else
-     {
-       /* Search the structure of the union to encode. */
-       for (i = 0; i < ede->subtype->elements.num; ++i)
-         if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
-           {
-              Eet_Data_Element *sede;
-
-              /* Yeah we found it ! */
-              data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
-              if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-
-              sede = &(ede->subtype->elements.set[i]);
-
-              if (sede->group_type != EET_G_UNKNOWN)
-                {
-                   Eet_Data_Stream *lds;
-
-                   lds = eet_data_stream_new();
-                   eet_group_codec[sede->group_type - 100].put(ed,
-                                                               sede->subtype,
-                                                               sede,
-                                                               lds,
-                                                               data_in);
-                   if (lds->size != 0)
-                     {
-                        eet_data_encode(ed, ds, lds->data, ede->name, lds->pos,
-                                        ede->type, ede->group_type);
-
-                        lds->data = NULL;
-                        lds->size = 0;
-                     }
-                   else
-                     {
-                        eet_data_encode(ed, ds, NULL, ede->name, 0,
-                                        EET_T_NULL, ede->group_type);
-                     }
-
-                   eet_data_stream_free(lds);
-                }
-              else
-                {
-                   data = _eet_data_descriptor_encode(ed,
-                                                      sede->subtype,
-                                                      *(void**)data_in,
-                                                      &size);
-                   if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-                }
-
-              break;
-           }
-     }
-}
+      /* Search the structure of the union to encode. */
+      for (i = 0; i < ede->subtype->elements.num; ++i)
+         if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
+           {
+              Eet_Data_Element *sede;
+
+              /* Yeah we found it ! */
+              data = eet_data_put_type(ed, EET_T_STRING, &union_type, &size);
+              if (data)
+                 eet_data_encode(ed,
+                                 ds,
+                                 data,
+                                 ede->name,
+                                 size,
+                                 ede->type,
+                                 ede->group_type);
+
+              sede = &(ede->subtype->elements.set[i]);
+
+              if (sede->group_type != EET_G_UNKNOWN)
+                {
+                   Eet_Data_Stream *lds;
+
+                   lds = eet_data_stream_new();
+                   eet_group_codec[sede->group_type - 100].put(ed,
+                                                               sede->subtype,
+                                                               sede,
+                                                               lds,
+                                                               data_in);
+                   if (lds->size != 0)
+                     {
+                        eet_data_encode(ed, ds, lds->data, ede->name, lds->pos,
+                                        ede->type, ede->group_type);
+
+                        lds->data = NULL;
+                        lds->size = 0;
+                     }
+                   else
+                      eet_data_encode(ed, ds, NULL, ede->name, 0,
+                                      EET_T_NULL, ede->group_type);
+
+                   eet_data_stream_free(lds);
+                }
+              else
+                {
+                   data = _eet_data_descriptor_encode(ed,
+                                                      sede->subtype,
+                                                      *(void **)data_in,
+                                                      &size);
+                   if (data)
+                      eet_data_encode(ed,
+                                      ds,
+                                      data,
+                                      ede->name,
+                                      size,
+                                      ede->type,
+                                      ede->group_type);
+                }
+
+              break;
+           }
+
+} /* eet_data_put_variant */
 
 static int
-eet_data_get_variant(Eet_Free_Context *context, const Eet_Dictionary *ed,
-                    __UNUSED__ Eet_Data_Descriptor *edd,
-                    Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                    int type, int group_type, void *data,
-                    char **p, int *size)
+eet_data_get_variant(Eet_Free_Context        *context,
+                     const Eet_Dictionary    *ed,
+                     Eet_Data_Descriptor *edd __UNUSED__,
+                     Eet_Data_Element        *ede,
+                     Eet_Data_Chunk          *echnk,
+                     int type                 __UNUSED__,
+                     int group_type           __UNUSED__,
+                     void                    *data,
+                     char                   **p,
+                     int                     *size)
 {
    const char *union_type;
    void *data_ret = NULL;
@@ -3102,11 +3905,12 @@ eet_data_get_variant(Eet_Free_Context *context, const Eet_Dictionary *ed,
 
    /* Read type */
    ret = eet_data_get_type(ed,
-                          EET_T_STRING,
-                          echnk->data,
-                          ((char *)echnk->data) + echnk->size,
-                          &union_type);
-   if (ret <= 0) goto on_error;
+                           EET_T_STRING,
+                           echnk->data,
+                           ((char *)echnk->data) + echnk->size,
+                           &union_type);
+   if (ret <= 0)
+      goto on_error;
 
    /* Advance to next chunk */
    NEXT_CHUNK((*p), (*size), (*echnk), ed);
@@ -3114,257 +3918,284 @@ eet_data_get_variant(Eet_Free_Context *context, const Eet_Dictionary *ed,
 
    /* Read value */
    eet_data_chunk_get(ed, echnk, *p, *size);
-   if (!echnk->name) goto on_error;
+   if (!echnk->name)
+      goto on_error;
 
    if (ede)
      {
-       char *ut;
-
-       EET_ASSERT(ede->subtype, goto on_error);
-
-       if ((!ed) || (!ede->subtype->func.str_direct_alloc))
-         {
-            ut = ede->subtype->func.str_alloc(union_type);
-            _eet_freelist_str_add(context, ut);
-         }
-       else
-         {
-            ut = ede->subtype->func.str_direct_alloc(union_type);
-            _eet_freelist_direct_str_add(context, ut);
-         }
-
-       /* Search the structure of the union to decode */
-       for (i = 0; i < ede->subtype->elements.num; ++i)
-         if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
-           {
-              Eet_Data_Element *sede;
-
-              /* Yeah we found it ! */
-              sede = &(ede->subtype->elements.set[i]);
-
-              if (sede->group_type != EET_G_UNKNOWN)
-                {
-                   Eet_Data_Chunk chnk;
-                   char *p2;
-                   int size2;
-                   int ret;
-
-                   p2 = echnk->data;
-                   size2 = echnk->size;
-
-                   /* Didn't find a proper way to provide this
-                      without duplicating code */
-                   while (size2 > 0)
-                     {
-                        memset(&chnk, 0, sizeof(Eet_Data_Chunk));
-                        eet_data_chunk_get(ed, &chnk, p2, size2);
-
-                        if (!chnk.name) goto on_error;
-
-                        ret = eet_group_codec[sede->group_type - 100].get(context,
-                                                                          ed, sede->subtype,
-                                                                          sede, &chnk,
-                                                                          sede->type, sede->group_type,
-                                                                          data, &p2, &size2);
-
-                        if (ret <= 0) goto on_error;
-
-                        /* advance to next chunk */
-                        NEXT_CHUNK(p2, size2, chnk, ed);
-                     }
-
-                   /* Put garbage so that we will not put eet_variant_unknow in it */
-                   data_ret = (void*) data;
-
-                   /* Set variant type. */
-                   ede->subtype->func.type_set(ut,
-                                               ((char*) data) + ede->count - ede->offset,
-                                               EINA_FALSE);
-                   break;
-                }
-
-              data_ret = _eet_data_descriptor_decode(context,
-                                                     ed,
-                                                     sede->subtype,
-                                                     echnk->data,
-                                                     echnk->size);
-              if (!data_ret) break;
-
-              /* And point to the variant data. */
-              *(void**) data = data_ret;
-
-              /* Set variant type. */
-              ede->subtype->func.type_set(ut,
-                                          ((char*) data) + ede->count - ede->offset,
-                                          EINA_FALSE);
-              break;
-           }
-
-       if (!data_ret)
-         {
-            Eet_Variant_Unknow *evu;
-
-            evu = calloc(1, sizeof (Eet_Variant_Unknow) + echnk->size - 1);
-            if (!evu) goto on_error;
-
-            evu->size = echnk->size;
-            memcpy(evu->data, echnk->data, evu->size);
-            EINA_MAGIC_SET(evu, EET_MAGIC_VARIANT);
-
-            /* And point to the opaque internal data scructure */
-            *(void**) data = evu;
-
-            /* Set variant type. */
-            ede->subtype->func.type_set(ut,
-                                        ((char*) data) + ede->count - ede->offset,
-                                        EINA_TRUE);
-         }
+        char *ut;
+
+        EET_ASSERT(ede->subtype, goto on_error);
+
+        if ((!ed) || (!ede->subtype->func.str_direct_alloc))
+          {
+             ut = ede->subtype->func.str_alloc(union_type);
+             _eet_freelist_str_add(context, ut);
+          }
+        else
+          {
+             ut = ede->subtype->func.str_direct_alloc(union_type);
+             _eet_freelist_direct_str_add(context, ut);
+          }
+
+        /* Search the structure of the union to decode */
+        for (i = 0; i < ede->subtype->elements.num; ++i)
+           if (strcmp(ede->subtype->elements.set[i].name, union_type) == 0)
+             {
+                Eet_Data_Element *sede;
+
+                /* Yeah we found it ! */
+                sede = &(ede->subtype->elements.set[i]);
+
+                if (sede->group_type != EET_G_UNKNOWN)
+                  {
+                     Eet_Data_Chunk chnk;
+                     char *p2;
+                     int size2;
+                     int ret;
+
+                     p2 = echnk->data;
+                     size2 = echnk->size;
+
+                     /* Didn't find a proper way to provide this
+                        without duplicating code */
+                     while (size2 > 0)
+                       {
+                          memset(&chnk, 0, sizeof(Eet_Data_Chunk));
+                          eet_data_chunk_get(ed, &chnk, p2, size2);
+
+                          if (!chnk.name)
+                             goto on_error;
+
+                          ret = eet_group_codec[sede->group_type - 100].get
+                                (context, ed, sede->subtype, sede, &chnk, sede->type,
+                                sede->group_type, data, &p2, &size2);
+
+                          if (ret <= 0)
+                             goto on_error;
+
+/* advance to next chunk */
+                          NEXT_CHUNK(p2, size2, chnk, ed);
+                       }
+
+                     /* Put garbage so that we will not put eet_variant_unknow in it */
+                     data_ret = (void *)data;
+
+                     /* Set variant type. */
+                     ede->subtype->func.type_set
+                        (ut, ((char *)data) + ede->count - ede->offset,
+                        EINA_FALSE);
+                     break;
+                  }
+
+                data_ret = _eet_data_descriptor_decode(context,
+                                                       ed,
+                                                       sede->subtype,
+                                                       echnk->data,
+                                                       echnk->size);
+                if (!data_ret)
+                   break;
+
+                /* And point to the variant data. */
+                *(void **)data = data_ret;
+
+                /* Set variant type. */
+                ede->subtype->func.type_set
+                   (ut, ((char *)data) + ede->count - ede->offset, EINA_FALSE);
+                break;
+             }
+
+        if (!data_ret)
+          {
+             Eet_Variant_Unknow *evu;
+
+             evu = calloc(1, sizeof (Eet_Variant_Unknow) + echnk->size - 1);
+             if (!evu)
+                goto on_error;
+
+             evu->size = echnk->size;
+             memcpy(evu->data, echnk->data, evu->size);
+             EINA_MAGIC_SET(evu, EET_MAGIC_VARIANT);
+
+             /* And point to the opaque internal data scructure */
+             *(void **)data = evu;
+
+             /* Set variant type. */
+             ede->subtype->func.type_set
+                (ut, ((char *)data) + ede->count - ede->offset, EINA_TRUE);
+          }
      }
    else
      {
-       /* FIXME: dump node structure. */
-       data_ret = _eet_data_descriptor_decode(context,
-                                              ed, NULL,
-                                              echnk->data, echnk->size);
-       goto on_error;
+        /* FIXME: dump node structure. */
+        data_ret = _eet_data_descriptor_decode(context,
+                                               ed, NULL,
+                                               echnk->data, echnk->size);
+        goto on_error;
      }
 
    return 1;
 
- on_error:
+on_error:
    return 0;
-}
+} /* eet_data_get_variant */
 
 static Eet_Node *
 eet_data_node_simple_type(int type, const char *name, void *dd)
 {
 #ifdef EET_T_TYPE
 # undef EET_T_TYPE
-#endif
+#endif /* ifdef EET_T_TYPE */
 
-#define EET_T_TYPE(Eet_Type, Eet_Node_Type, Type)                      \
  case Eet_Type:                                                      \
-     return eet_node_##Eet_Node_Type##_new(name, *((Type *) dd));      \
+#define EET_T_TYPE(Eet_Type, Eet_Node_Type, Type)\
case Eet_Type:\
+    return eet_node_ ## Eet_Node_Type ## _new(name, *((Type *)dd));\
 
    switch (type)
      {
-       EET_T_TYPE(EET_T_CHAR, char, char);
-       EET_T_TYPE(EET_T_SHORT, short, short);
-       EET_T_TYPE(EET_T_INT, int, int);
-       EET_T_TYPE(EET_T_LONG_LONG, long_long, long long);
-       EET_T_TYPE(EET_T_FLOAT, float, float);
-       EET_T_TYPE(EET_T_DOUBLE, double, double);
-       EET_T_TYPE(EET_T_UCHAR, unsigned_char, unsigned char);
-       EET_T_TYPE(EET_T_USHORT, unsigned_short, unsigned short);
-       EET_T_TYPE(EET_T_UINT, unsigned_int, unsigned int);
-       EET_T_TYPE(EET_T_ULONG_LONG, unsigned_long_long, unsigned long long);
-       EET_T_TYPE(EET_T_STRING, string, char*);
-       EET_T_TYPE(EET_T_INLINED_STRING, inlined_string, char*);
+        EET_T_TYPE(EET_T_CHAR,           char,               char);
+        EET_T_TYPE(EET_T_SHORT,          short,              short);
+        EET_T_TYPE(EET_T_INT,            int,                int);
+        EET_T_TYPE(EET_T_LONG_LONG,      long_long,          long long);
+        EET_T_TYPE(EET_T_FLOAT,          float,              float);
+        EET_T_TYPE(EET_T_DOUBLE,         double,             double);
+        EET_T_TYPE(EET_T_UCHAR,          unsigned_char,      unsigned char);
+        EET_T_TYPE(EET_T_USHORT,         unsigned_short,     unsigned short);
+        EET_T_TYPE(EET_T_UINT,           unsigned_int,       unsigned int);
+        EET_T_TYPE(EET_T_ULONG_LONG,     unsigned_long_long, unsigned long long);
+        EET_T_TYPE(EET_T_STRING,         string,             char *);
+        EET_T_TYPE(EET_T_INLINED_STRING, inlined_string,     char *);
+
       case EET_T_NULL:
-        return eet_node_null_new(name);
+         return eet_node_null_new(name);
+
       default:
-        ERR("Unknow type passed to eet_data_node_simple_type");
-        return NULL;
-     }
-}
+         ERR("Unknow type passed to eet_data_node_simple_type");
+         return NULL;
+     } /* switch */
+} /* eet_data_node_simple_type */
 
 static int
-eet_data_get_unknown(Eet_Free_Context *context, const Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Chunk *echnk,
-                    int type, int group_type __UNUSED__, void *data,
-                    char **p __UNUSED__, int *size __UNUSED__)
+eet_data_get_unknown(Eet_Free_Context     *context,
+                     const Eet_Dictionary *ed,
+                     Eet_Data_Descriptor  *edd,
+                     Eet_Data_Element     *ede,
+                     Eet_Data_Chunk       *echnk,
+                     int                   type,
+                     int group_type        __UNUSED__,
+                     void                 *data,
+                     char **p              __UNUSED__,
+                     int *size             __UNUSED__)
 {
    int ret;
    void *data_ret;
 
    if (IS_SIMPLE_TYPE(type))
      {
-       unsigned char dd[128];
-
-       ret = eet_data_get_type(ed, type, echnk->data, ((char *)echnk->data) + echnk->size, edd ? (char*) data : (char*) dd);
-       if (ret <= 0) return ret;
-
-       if (!edd)
-         {
-            Eet_Node **parent = data;
-            Eet_Node *node;
-
-            node = eet_data_node_simple_type(type, echnk->name, dd);
-
-            if (*parent) eet_node_struct_append(*parent, echnk->name, node);
-            else *parent = node;
-         }
-       else
-         {
-            if (type == EET_T_STRING)
-              {
-                 char **str;
-
-                 str = (char **)(((char *)data));
-                 if (*str)
-                   {
-                      if ((ed == NULL) || (edd->func.str_direct_alloc == NULL))
-                        {
-                           *str = edd->func.str_alloc(*str);
-                           _eet_freelist_str_add(context, *str);
-                        }
-                      else
-                        {
-                           *str = edd->func.str_direct_alloc(*str);
-                           _eet_freelist_direct_str_add(context, *str);
-                        }
-                   }
-              }
-            else if (edd && type == EET_T_INLINED_STRING)
-              {
-                 char **str;
-
-                 str = (char **)(((char *)data));
-                 if (*str)
-                   {
-                      *str = edd->func.str_alloc(*str);
-                      _eet_freelist_str_add(context, *str);
-                   }
-              }
-         }
+        unsigned char dd[128];
+
+        ret = eet_data_get_type(ed,
+                                type,
+                                echnk->data,
+                                ((char *)echnk->data) + echnk->size,
+                                edd ? (char *)data : (char *)dd);
+        if (ret <= 0)
+           return ret;
+
+        if (!edd)
+          {
+             Eet_Node **parent = data;
+             Eet_Node *node;
+
+             node = eet_data_node_simple_type(type, echnk->name, dd);
+
+             if (*parent)
+                eet_node_struct_append(*parent, echnk->name, node);
+             else
+                *parent = node;
+          }
+        else
+          {
+             if (type == EET_T_STRING)
+               {
+                  char **str;
+
+                  str = (char **)(((char *)data));
+                  if (*str)
+                    {
+                       if ((ed == NULL) || (edd->func.str_direct_alloc == NULL))
+                         {
+                            *str = edd->func.str_alloc(*str);
+                            _eet_freelist_str_add(context, *str);
+                         }
+                       else
+                         {
+                            *str = edd->func.str_direct_alloc(*str);
+                            _eet_freelist_direct_str_add(context, *str);
+                         }
+                    }
+               }
+             else if (edd && type == EET_T_INLINED_STRING)
+               {
+                  char **str;
+
+                  str = (char **)(((char *)data));
+                  if (*str)
+                    {
+                       *str = edd->func.str_alloc(*str);
+                       _eet_freelist_str_add(context, *str);
+                    }
+               }
+          }
      }
    else
      {
-       Eet_Data_Descriptor *subtype;
-
-       subtype = ede ? ede->subtype : NULL;
-
-       if (subtype || !edd)
-         {
-            Eet_Node **parent = data;
-            void **ptr;
-
-            data_ret = _eet_data_descriptor_decode(context, ed, subtype, echnk->data, echnk->size);
-            if (!data_ret) return 0;
-
-            if (edd)
-              {
-                 ptr = (void **)(((char *)data));
-                 *ptr = (void *)data_ret;
-              }
-            else
-              {
-                 Eet_Node *node = data_ret;
-
-                 if (*parent)
-                   {
-                      node = eet_node_struct_child_new(echnk->name, node);
-                      eet_node_struct_append(*parent, echnk->name, node);
-                   }
-                 else *parent = node;
-              }
-         }
+        Eet_Data_Descriptor *subtype;
+
+        subtype = ede ? ede->subtype : NULL;
+
+        if (subtype || !edd)
+          {
+             Eet_Node **parent = data;
+             void **ptr;
+
+             data_ret = _eet_data_descriptor_decode(context,
+                                                    ed,
+                                                    subtype,
+                                                    echnk->data,
+                                                    echnk->size);
+             if (!data_ret)
+                return 0;
+
+             if (edd)
+               {
+                  ptr = (void **)(((char *)data));
+                  *ptr = (void *)data_ret;
+               }
+             else
+               {
+                  Eet_Node *node = data_ret;
+
+                  if (*parent)
+                    {
+                       node = eet_node_struct_child_new(echnk->name, node);
+                       eet_node_struct_append(*parent, echnk->name, node);
+                    }
+                  else
+                     *parent = node;
+               }
+          }
      }
 
    return 1;
-}
+} /* eet_data_get_unknown */
 
 static void
-eet_data_put_array(Eet_Dictionary *ed, Eet_Data_Descriptor *edd __UNUSED__, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_array(Eet_Dictionary          *ed,
+                   Eet_Data_Descriptor *edd __UNUSED__,
+                   Eet_Data_Element        *ede,
+                   Eet_Data_Stream         *ds,
+                   void                    *data_in)
 {
    void *data;
    int offset = 0;
@@ -3373,105 +4204,144 @@ eet_data_put_array(Eet_Dictionary *ed, Eet_Data_Descriptor *edd __UNUSED__, Eet_
    int size;
    int j;
 
-   EET_ASSERT(!((ede->type > EET_T_UNKNOW) && (ede->type < EET_T_STRING)), return );
+   EET_ASSERT(!((ede->type > EET_T_UNKNOW) && (ede->type < EET_T_STRING)),
+              return );
 
    if (ede->group_type == EET_G_ARRAY)
-     count = ede->counter_offset;
+      count = ede->counter_offset;
    else
-     count = *(int *)(((char *)data_in) + ede->count - ede->offset);
+      count = *(int *)(((char *)data_in) + ede->count - ede->offset);
+
+   if (count <= 0)
+      return;  /* Store number of elements */
 
-   if (count <= 0) return;
-   /* Store number of elements */
    data = eet_data_put_type(ed, EET_T_INT, &count, &size);
-   if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
+   if (data)
+      eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
 
    if (IS_POINTER_TYPE(ede->type))
-     subsize = eet_basic_codec[ede->type].size;
+      subsize = eet_basic_codec[ede->type].size;
    else
-     subsize = ede->subtype->size;
+      subsize = ede->subtype->size;
 
    for (j = 0; j < count; j++)
      {
-       void *d;
-       int pos = ds->pos;
-
-       if (ede->group_type == EET_G_ARRAY)
-         d = (void *)(((char *)data_in) + offset);
-       else
-         d = *(((char **)data_in)) + offset;
-
-       if (IS_POINTER_TYPE(ede->type))
-         {
-            if (*(char**) d)
-              eet_data_put_unknown(ed, NULL, ede, ds, d);
-         }
-       else
-         {
-            data = _eet_data_descriptor_encode(ed, ede->subtype, d, &size);
-            if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-         }
-
-       if (pos == ds->pos)
-         {
-            /* Add a NULL element just to have the correct array layout. */
-            eet_data_encode(ed, ds, NULL, ede->name, 0, EET_T_NULL, ede->group_type);
-         }
-
-       offset += subsize;
+        void *d;
+        int pos = ds->pos;
+
+        if (ede->group_type == EET_G_ARRAY)
+           d = (void *)(((char *)data_in) + offset);
+        else
+           d = *(((char **)data_in)) + offset;
+
+        if (IS_POINTER_TYPE(ede->type))
+          {
+             if (*(char **)d)
+                eet_data_put_unknown(ed, NULL, ede, ds, d);
+          }
+        else
+          {
+             data = _eet_data_descriptor_encode(ed, ede->subtype, d, &size);
+             if (data)
+                eet_data_encode(ed,
+                                ds,
+                                data,
+                                ede->name,
+                                size,
+                                ede->type,
+                                ede->group_type);
+          }
+
+        if (pos == ds->pos)
+           /* Add a NULL element just to have the correct array layout. */
+           eet_data_encode(ed,
+                           ds,
+                           NULL,
+                           ede->name,
+                           0,
+                           EET_T_NULL,
+                           ede->group_type);
+
+        offset += subsize;
      }
-}
+} /* eet_data_put_array */
 
 static void
-eet_data_put_unknown(Eet_Dictionary *ed, Eet_Data_Descriptor *edd __UNUSED__, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_unknown(Eet_Dictionary          *ed,
+                     Eet_Data_Descriptor *edd __UNUSED__,
+                     Eet_Data_Element        *ede,
+                     Eet_Data_Stream         *ds,
+                     void                    *data_in)
 {
    void *data = NULL;
    int size;
 
    if (IS_SIMPLE_TYPE(ede->type))
-     data = eet_data_put_type(ed, ede->type, data_in, &size);
+      data = eet_data_put_type(ed, ede->type, data_in, &size);
    else if (ede->subtype)
-     {
-       if (*((char **)data_in))
-         data = _eet_data_descriptor_encode(ed,
-                                            ede->subtype,
-                                            *((char **)((char *)(data_in))),
-                                            &size);
-     }
-   if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-}
+      if (*((char **)data_in))
+         data = _eet_data_descriptor_encode(ed,
+                                            ede->subtype,
+                                            *((char **)((char *)(data_in))),
+                                            &size);
+
+   if (data)
+      eet_data_encode(ed,
+                      ds,
+                      data,
+                      ede->name,
+                      size,
+                      ede->type,
+                      ede->group_type);
+} /* eet_data_put_unknown */
 
 static void
-eet_data_put_list(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_list(Eet_Dictionary      *ed,
+                  Eet_Data_Descriptor *edd,
+                  Eet_Data_Element    *ede,
+                  Eet_Data_Stream     *ds,
+                  void                *data_in)
 {
    void *data;
    void *l;
    int size;
 
    EET_ASSERT(!(((ede->type > EET_T_UNKNOW) && (ede->type < EET_T_STRING))
-               || ((ede->type > EET_T_NULL) && (ede->type < EET_T_LAST))),
-             return );
+                || ((ede->type > EET_T_NULL) && (ede->type < EET_T_LAST))),
+              return );
 
    l = *((void **)(((char *)data_in)));
    for (; l; l = edd->func.list_next(l))
      {
-       if (IS_POINTER_TYPE(ede->type))
-         {
-            const void *str = edd->func.list_data(l);
-            eet_data_put_unknown(ed, NULL, ede, ds, &str);
-         }
-       else
-         {
-            data = _eet_data_descriptor_encode(ed,
-                                               ede->subtype,
-                                               edd->func.list_data(l),
-                                               &size);
-            if (data) eet_data_encode(ed, ds, data, ede->name, size, ede->type, ede->group_type);
-         }
-     }
-}
+        if (IS_POINTER_TYPE(ede->type))
+          {
+             const void *str = edd->func.list_data(l);
+             eet_data_put_unknown(ed, NULL, ede, ds, &str);
+          }
+        else
+          {
+             data = _eet_data_descriptor_encode(ed,
+                                                ede->subtype,
+                                                edd->func.list_data(l),
+                                                &size);
+             if (data)
+                eet_data_encode(ed,
+                                ds,
+                                data,
+                                ede->name,
+                                size,
+                                ede->type,
+                                ede->group_type);
+          }
+     }
+} /* eet_data_put_list */
 
 static void
-eet_data_put_hash(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element *ede, Eet_Data_Stream *ds, void *data_in)
+eet_data_put_hash(Eet_Dictionary      *ed,
+                  Eet_Data_Descriptor *edd,
+                  Eet_Data_Element    *ede,
+                  Eet_Data_Stream     *ds,
+                  void                *data_in)
 {
    Eet_Data_Encode_Hash_Info fdata;
    void *l;
@@ -3481,30 +4351,33 @@ eet_data_put_hash(Eet_Dictionary *ed, Eet_Data_Descriptor *edd, Eet_Data_Element
    fdata.ede = ede;
    fdata.ed = ed;
    edd->func.hash_foreach(l, eet_data_descriptor_encode_hash_cb, &fdata);
-}
+} /* eet_data_put_hash */
 
 EAPI int
 eet_data_dump_cipher(Eet_File *ef,
-                    const char *name, const char *cipher_key,
-                    void (*dumpfunc) (void *data, const char *str),
-                    void *dumpdata)
+                     const char *name,
+                     const char *cipher_key,
+                     void (*dumpfunc)(void *data, const char *str),
+                     void *dumpdata)
 {
    const Eet_Dictionary *ed = NULL;
-   const void          *data = NULL;
-   Eet_Node             *result;
-   Eet_Free_Context      context;
-   int                  required_free = 0;
-   int                  size;
+   const void *data = NULL;
+   Eet_Node *result;
+   Eet_Free_Context context;
+   int required_free = 0;
+   int size;
 
    ed = eet_dictionary_get(ef);
 
    if (!cipher_key)
-     data = eet_read_direct(ef, name, &size);
+      data = eet_read_direct(ef, name, &size);
+
    if (!data)
      {
-       required_free = 1;
-       data = eet_read_cipher(ef, name, &size, cipher_key);
-       if (!data) return 0;
+        required_free = 1;
+        data = eet_read_cipher(ef, name, &size, cipher_key);
+        if (!data)
+           return 0;
      }
 
    memset(&context, 0, sizeof (context));
@@ -3515,47 +4388,50 @@ eet_data_dump_cipher(Eet_File *ef,
    eet_node_del(result);
 
    if (required_free)
-     free((void*)data);
+      free((void *)data);
 
    return result ? 1 : 0;
-}
+} /* eet_data_dump_cipher */
 
 EAPI int
 eet_data_dump(Eet_File *ef,
-             const char *name,
-             void (*dumpfunc) (void *data, const char *str),
-             void *dumpdata)
+              const char *name,
+              void (*dumpfunc)(void *data, const char *str),
+              void *dumpdata)
 {
    return eet_data_dump_cipher(ef, name, NULL, dumpfunc, dumpdata);
-}
-
+} /* eet_data_dump */
 
 EAPI int
 eet_data_text_dump_cipher(const void *data_in,
-                         const char *cipher_key, int size_in,
-                         void (*dumpfunc) (void *data, const char *str),
-                         void *dumpdata)
+                          const char *cipher_key,
+                          int size_in,
+                          void (*dumpfunc)(void *data, const char *str),
+                          void *dumpdata)
 {
    void *ret = NULL;
    Eet_Node *result;
    Eet_Free_Context context;
    unsigned int ret_len = 0;
 
-   if (!data_in) return 0;
+   if (!data_in)
+      return 0;
 
    if (cipher_key)
      {
-       if (eet_decipher(data_in, size_in, cipher_key,
-                       strlen(cipher_key), &ret, &ret_len))
-        {
-          if (ret) free(ret);
-          return 0;
-        }
+        if (eet_decipher(data_in, size_in, cipher_key,
+                         strlen(cipher_key), &ret, &ret_len))
+          {
+             if (ret)
+                free(ret);
+
+             return 0;
+          }
      }
    else
      {
-       ret = (void*) data_in;
-       ret_len = size_in;
+        ret = (void *)data_in;
+        ret_len = size_in;
      }
 
    memset(&context, 0, sizeof (context));
@@ -3564,182 +4440,213 @@ eet_data_text_dump_cipher(const void *data_in,
    eet_node_dump(result, 0, dumpfunc, dumpdata);
 
    eet_node_del(result);
-   if (cipher_key) free(ret);
+   if (cipher_key)
+      free(ret);
 
    return result ? 1 : 0;
-}
+} /* eet_data_text_dump_cipher */
 
 EAPI int
 eet_data_text_dump(const void *data_in,
-                  int size_in,
-                  void (*dumpfunc) (void *data, const char *str),
-                  void *dumpdata)
+                   int size_in,
+                   void (*dumpfunc)(void *data, const char *str),
+                   void *dumpdata)
 {
    return eet_data_text_dump_cipher(data_in, NULL, size_in, dumpfunc, dumpdata);
-}
+} /* eet_data_text_dump */
 
 EAPI void *
 eet_data_text_undump_cipher(const char *text,
-                           const char *cipher_key,
-                           int textlen,
-                           int *size_ret)
+                            const char *cipher_key,
+                            int         textlen,
+                            int        *size_ret)
 {
    void *ret = NULL;
 
    ret = _eet_data_dump_parse(NULL, size_ret, text, textlen);
    if (ret && cipher_key)
      {
-       void *ciphered = NULL;
-       unsigned int ciphered_len;
-
-       if (eet_cipher(ret, *size_ret, cipher_key,
-                      strlen(cipher_key), &ciphered, &ciphered_len))
-         {
-            if (ciphered) free(ciphered);
-            size_ret = 0;
-            free(ret);
-            return NULL;
-         }
-       free(ret);
-       *size_ret = ciphered_len;
-       ret = ciphered;
+        void *ciphered = NULL;
+        unsigned int ciphered_len;
+
+        if (eet_cipher(ret, *size_ret, cipher_key,
+                       strlen(cipher_key), &ciphered, &ciphered_len))
+          {
+             if (ciphered)
+                free(ciphered);
+
+             size_ret = 0;
+             free(ret);
+             return NULL;
+          }
+
+        free(ret);
+        *size_ret = ciphered_len;
+        ret = ciphered;
      }
+
    return ret;
-}
+} /* eet_data_text_undump_cipher */
 
 EAPI void *
 eet_data_text_undump(const char *text,
-                    int textlen,
-                    int *size_ret)
+                     int         textlen,
+                     int        *size_ret)
 {
    return eet_data_text_undump_cipher(text, NULL, textlen, size_ret);
-}
+} /* eet_data_text_undump */
 
 EAPI int
-eet_data_undump_cipher(Eet_File *ef,
-                      const char *name,
-                      const char *cipher_key,
-                      const char *text,
-                      int textlen,
-                      int compress)
-{
-   Eet_Dictionary       *ed;
-   void                 *data_enc;
-   int                   size;
-   int                   val;
+eet_data_undump_cipher(Eet_File   *ef,
+                       const char *name,
+                       const char *cipher_key,
+                       const char *text,
+                       int         textlen,
+                       int         compress)
+{
+   Eet_Dictionary *ed;
+   void *data_enc;
+   int size;
+   int val;
 
    ed = eet_dictionary_get(ef);
 
    data_enc = _eet_data_dump_parse(ed, &size, text, textlen);
-   if (!data_enc) return 0;
+   if (!data_enc)
+      return 0;
+
    val = eet_write_cipher(ef, name, data_enc, size, compress, cipher_key);
    free(data_enc);
    return val;
-}
+} /* eet_data_undump_cipher */
 
 EAPI int
-eet_data_undump(Eet_File *ef,
-               const char *name,
-               const char *text,
-               int textlen,
-               int compress)
+eet_data_undump(Eet_File   *ef,
+                const char *name,
+                const char *text,
+                int         textlen,
+                int         compress)
 {
    return eet_data_undump_cipher(ef, name, NULL, text, textlen, compress);
-}
+} /* eet_data_undump */
 
 EAPI void *
 eet_data_descriptor_decode_cipher(Eet_Data_Descriptor *edd,
-                                 const void *data_in,
-                                 const char *cipher_key,
-                                 int size_in)
+                                  const void          *data_in,
+                                  const char          *cipher_key,
+                                  int                  size_in)
 {
-   void *deciphered = (void*) data_in;
+   void *deciphered = (void *)data_in;
    void *ret;
    Eet_Free_Context context;
    unsigned int deciphered_len = size_in;
 
    if (cipher_key && data_in)
-     {
-       if (eet_decipher(data_in, size_in, cipher_key,
-                       strlen(cipher_key), &deciphered, &deciphered_len))
-        {
-          if (deciphered) free(deciphered);
-          return NULL;
-        }
-     }
+      if (eet_decipher(data_in, size_in, cipher_key,
+                       strlen(cipher_key), &deciphered, &deciphered_len))
+        {
+           if (deciphered)
+              free(deciphered);
+
+           return NULL;
+        }
 
    memset(&context, 0, sizeof (context));
-   ret = _eet_data_descriptor_decode(&context, NULL, edd, deciphered, deciphered_len);
+   ret = _eet_data_descriptor_decode(&context,
+                                     NULL,
+                                     edd,
+                                     deciphered,
+                                     deciphered_len);
 
-   if (data_in != deciphered) free(deciphered);
+   if (data_in != deciphered)
+      free(deciphered);
 
    return ret;
-}
+} /* eet_data_descriptor_decode_cipher */
 
 EAPI void *
 eet_data_descriptor_decode(Eet_Data_Descriptor *edd,
-                          const void *data_in,
-                          int size_in)
+                           const void          *data_in,
+                           int                  size_in)
 {
    return eet_data_descriptor_decode_cipher(edd, data_in, NULL, size_in);
-}
+} /* eet_data_descriptor_decode */
 
 EAPI Eet_Node *
-eet_data_node_decode_cipher(const void *data_in, const char *cipher_key, int size_in)
+eet_data_node_decode_cipher(const void *data_in,
+                            const char *cipher_key,
+                            int         size_in)
 {
-   void *deciphered = (void*) data_in;
+   void *deciphered = (void *)data_in;
    Eet_Node *ret;
    Eet_Free_Context context;
    unsigned int deciphered_len = size_in;
 
    if (cipher_key && data_in)
-     {
-       if (eet_decipher(data_in, size_in, cipher_key,
-                       strlen(cipher_key), &deciphered, &deciphered_len))
-        {
-          if (deciphered) free(deciphered);
-          return NULL;
-        }
-     }
+      if (eet_decipher(data_in, size_in, cipher_key,
+                       strlen(cipher_key), &deciphered, &deciphered_len))
+        {
+           if (deciphered)
+              free(deciphered);
+
+           return NULL;
+        }
 
    memset(&context, 0, sizeof (context));
-   ret = _eet_data_descriptor_decode(&context, NULL, NULL, deciphered, deciphered_len);
+   ret = _eet_data_descriptor_decode(&context,
+                                     NULL,
+                                     NULL,
+                                     deciphered,
+                                     deciphered_len);
 
-   if (data_in != deciphered) free(deciphered);
+   if (data_in != deciphered)
+      free(deciphered);
 
    return ret;
-}
+} /* eet_data_node_decode_cipher */
 
 static void *
-_eet_data_descriptor_encode(Eet_Dictionary *ed,
+_eet_data_descriptor_encode(Eet_Dictionary      *ed,
                             Eet_Data_Descriptor *edd,
-                            const void *data_in,
-                            int *size_ret)
+                            const void          *data_in,
+                            int                 *size_ret)
 {
-   Eet_Data_Stream      *ds;
-   Eet_Data_Chunk       *chnk;
-   void                 *cdata;
-   int                   csize;
-   int                   i;
+   Eet_Data_Stream *ds;
+   Eet_Data_Chunk *chnk;
+   void *cdata;
+   int csize;
+   int i;
 
    if (_eet_data_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_data_words_bigendian = 1;
-       else _eet_data_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_data_words_bigendian = 1;
+        else
+           _eet_data_words_bigendian = 0;
      }
 
    ds = eet_data_stream_new();
    for (i = 0; i < edd->elements.num; i++)
      {
-       Eet_Data_Element *ede;
-
-       ede = &(edd->elements.set[i]);
-       eet_group_codec[ede->group_type - 100].put(ed, edd, ede, ds, ((char *)data_in) + ede->offset);
+        Eet_Data_Element *ede;
+
+        ede = &(edd->elements.set[i]);
+        eet_group_codec[ede->group_type - 100].put(
+           ed,
+           edd,
+           ede,
+           ds,
+           ((char *)data_in) +
+           ede->offset);
      }
-   chnk = eet_data_chunk_new(ds->data, ds->pos, edd->name, EET_T_UNKNOW, EET_G_UNKNOWN);
+   chnk = eet_data_chunk_new(ds->data,
+                             ds->pos,
+                             edd->name,
+                             EET_T_UNKNOW,
+                             EET_G_UNKNOWN);
    ds->data = NULL;
    ds->size = 0;
    eet_data_stream_free(ds);
@@ -3758,29 +4665,35 @@ _eet_data_descriptor_encode(Eet_Dictionary *ed,
    eet_data_chunk_free(chnk);
 
    return cdata;
-}
+} /* _eet_data_descriptor_encode */
 
 EAPI int
-eet_data_node_write_cipher(Eet_File *ef, const char *name, const char *cipher_key, Eet_Node *node, int compress)
+eet_data_node_write_cipher(Eet_File   *ef,
+                           const char *name,
+                           const char *cipher_key,
+                           Eet_Node   *node,
+                           int         compress)
 {
-   Eet_Dictionary       *ed;
-   void                 *data_enc;
-   int                   size;
-   int                   val;
+   Eet_Dictionary *ed;
+   void *data_enc;
+   int size;
+   int val;
 
    ed = eet_dictionary_get(ef);
 
    data_enc = _eet_data_dump_encode(EET_G_UNKNOWN, ed, node, &size);
-   if (!data_enc) return 0;
+   if (!data_enc)
+      return 0;
+
    val = eet_write_cipher(ef, name, data_enc, size, compress, cipher_key);
    free(data_enc);
    return val;
-}
+} /* eet_data_node_write_cipher */
 
 EAPI void *
-eet_data_node_encode_cipher(Eet_Node *node,
-                           const char *cipher_key,
-                           int *size_ret)
+eet_data_node_encode_cipher(Eet_Node   *node,
+                            const char *cipher_key,
+                            int        *size_ret)
 {
    void *ret = NULL;
    void *ciphered = NULL;
@@ -3790,28 +4703,35 @@ eet_data_node_encode_cipher(Eet_Node *node,
    ret = _eet_data_dump_encode(EET_G_UNKNOWN, NULL, node, &size);
    if (cipher_key && ret)
      {
-       if (eet_cipher(ret, size, cipher_key,
-                      strlen(cipher_key), &ciphered, &ciphered_len))
-         {
-            if (ciphered) free(ciphered);
-            if (size_ret) *size_ret = 0;
-            free(ret);
-            return NULL;
-         }
-       free(ret);
-       size = (int) ciphered_len;
-       ret = ciphered;
+        if (eet_cipher(ret, size, cipher_key,
+                       strlen(cipher_key), &ciphered, &ciphered_len))
+          {
+             if (ciphered)
+                free(ciphered);
+
+             if (size_ret)
+                *size_ret = 0;
+
+             free(ret);
+             return NULL;
+          }
+
+        free(ret);
+        size = (int)ciphered_len;
+        ret = ciphered;
      }
 
-   if (size_ret) *size_ret = size;
+   if (size_ret)
+      *size_ret = size;
+
    return ret;
-}
+} /* eet_data_node_encode_cipher */
 
 EAPI void *
 eet_data_descriptor_encode_cipher(Eet_Data_Descriptor *edd,
-                                 const void *data_in,
-                                 const char *cipher_key,
-                                 int *size_ret)
+                                  const void          *data_in,
+                                  const char          *cipher_key,
+                                  int                 *size_ret)
 {
    void *ret = NULL;
    void *ciphered = NULL;
@@ -3821,27 +4741,35 @@ eet_data_descriptor_encode_cipher(Eet_Data_Descriptor *edd,
    ret = _eet_data_descriptor_encode(NULL, edd, data_in, &size);
    if (cipher_key && ret)
      {
-       if (eet_cipher(ret, size, cipher_key,
-                     strlen(cipher_key), &ciphered, &ciphered_len))
-        {
-          if (ciphered) free(ciphered);
-          if (size_ret) *size_ret = 0;
-          free(ret);
-          return NULL;
-        }
-       free(ret);
-       size = ciphered_len;
-       ret = ciphered;
+        if (eet_cipher(ret, size, cipher_key,
+                       strlen(cipher_key), &ciphered, &ciphered_len))
+          {
+             if (ciphered)
+                free(ciphered);
+
+             if (size_ret)
+                *size_ret = 0;
+
+             free(ret);
+             return NULL;
+          }
+
+        free(ret);
+        size = ciphered_len;
+        ret = ciphered;
      }
 
-   if (size_ret) *size_ret = size;
+   if (size_ret)
+      *size_ret = size;
+
    return ret;
-}
+} /* eet_data_descriptor_encode_cipher */
 
 EAPI void *
 eet_data_descriptor_encode(Eet_Data_Descriptor *edd,
-                          const void *data_in,
-                          int *size_ret)
+                           const void          *data_in,
+                           int                 *size_ret)
 {
    return eet_data_descriptor_encode_cipher(edd, data_in, NULL, size_ret);
-}
+} /* eet_data_descriptor_encode */
+
index 7ccd184..7e86d08 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #include <stdio.h>
 #include <string.h>
 Eet_Dictionary *
 eet_dictionary_add(void)
 {
-   Eet_Dictionary       *new;
+   Eet_Dictionary *new;
 
    new = calloc(1, sizeof (Eet_Dictionary));
    if (!new)
-     return NULL;
+      return NULL;
 
    memset(new->hash, -1, sizeof (int) * 256);
 
    return new;
-}
+} /* eet_dictionary_add */
 
 void
 eet_dictionary_free(Eet_Dictionary *ed)
 {
    if (ed)
      {
-        int     i;
+        int i;
 
         for (i = 0; i < ed->count; ++i)
-          if (ed->all[i].str)
-            free(ed->all[i].str);
-        if (ed->all) free(ed->all);
+           if (ed->all[i].str)
+              free(ed->all[i].str);
+
+        if (ed->all)
+           free(ed->all);
+
         free(ed);
      }
-}
+} /* eet_dictionary_free */
 
 static int
-_eet_dictionary_lookup(Eet_Dictionary *ed, const char *string, int hash)
+_eet_dictionary_lookup(Eet_Dictionary *ed,
+                       const char     *string,
+                       int             hash)
 {
-   int  prev = -1;
-   int  current;
+   int prev = -1;
+   int current;
 
    current = ed->hash[hash];
 
    while (current != -1)
      {
         if (ed->all[current].str)
-          {
-             if (strcmp(ed->all[current].str, string) >= 0)
-               break ;
-          }
+           if (strcmp(ed->all[current].str, string) >= 0)
+              break;
+
         if (ed->all[current].mmap)
-          {
-             if (strcmp(ed->all[current].mmap, string) >= 0)
-               break ;
-          }
+           if (strcmp(ed->all[current].mmap, string) >= 0)
+              break;
 
         prev = current;
         current = ed->all[current].next;
      }
 
    if (current == -1)
-     return prev;
+      return prev;
 
    return current;
-}
+} /* _eet_dictionary_lookup */
 
 int
-eet_dictionary_string_add(Eet_Dictionary *ed, const char *string)
+eet_dictionary_string_add(Eet_Dictionary *ed,
+                          const char     *string)
 {
-   Eet_String   *current;
-   char         *str;
-   int           hash;
-   int           idx;
-   int           len;
+   Eet_String *current;
+   char *str;
+   int hash;
+   int idx;
+   int len;
 
    if (!ed)
-     return -1;
+      return -1;
 
    hash = _eet_hash_gen(string, 8);
 
@@ -94,27 +93,25 @@ eet_dictionary_string_add(Eet_Dictionary *ed, const char *string)
    if (idx != -1)
      {
         if (ed->all[idx].str)
-          {
-             if (strcmp(ed->all[idx].str, string) == 0)
-               return idx;
-          }
+           if (strcmp(ed->all[idx].str, string) == 0)
+              return idx;
+
         if (ed->all[idx].mmap)
-          {
-             if (strcmp(ed->all[idx].mmap, string) == 0)
-               return idx;
-          }
+           if (strcmp(ed->all[idx].mmap, string) == 0)
+              return idx;
+
      }
 
    if (ed->total == ed->count)
      {
-        Eet_String      *new;
-        int              total;
+        Eet_String *new;
+        int total;
 
         total = ed->total + 8;
 
         new = realloc(ed->all, sizeof (Eet_String) * total);
         if (new == NULL)
-          return -1;
+           return -1;
 
         ed->all = new;
         ed->total = total;
@@ -123,7 +120,7 @@ eet_dictionary_string_add(Eet_Dictionary *ed, const char *string)
    len = strlen(string) + 1;
    str = strdup(string);
    if (str == NULL)
-     return -1;
+      return -1;
 
    current = ed->all + ed->count;
 
@@ -147,61 +144,85 @@ eet_dictionary_string_add(Eet_Dictionary *ed, const char *string)
         current->prev = ed->all[idx].prev;
 
         if (current->next != -1)
-          ed->all[current->next].prev = ed->count;
+           ed->all[current->next].prev = ed->count;
+
         if (current->prev != -1)
-          ed->all[current->prev].next = ed->count;
+           ed->all[current->prev].next = ed->count;
         else
-          ed->hash[hash] = ed->count;
+           ed->hash[hash] = ed->count;
      }
 
    return ed->count++;
-}
+} /* eet_dictionary_string_add */
 
 int
-eet_dictionary_string_get_size(const Eet_Dictionary *ed, int idx)
+eet_dictionary_string_get_size(const Eet_Dictionary *ed,
+                               int                   idx)
 {
-   if (!ed) return 0;
-   if (idx < 0) return 0;
+   if (!ed)
+      return 0;
+
+   if (idx < 0)
+      return 0;
+
    if (idx < ed->count)
-     return ed->all[idx].len;
+      return ed->all[idx].len;
+
    return 0;
-}
+} /* eet_dictionary_string_get_size */
 
 int
-eet_dictionary_string_get_hash(const Eet_Dictionary *ed, int idx)
+eet_dictionary_string_get_hash(const Eet_Dictionary *ed,
+                               int                   idx)
 {
-   if (!ed) return -1;
-   if (idx < 0) return -1;
+   if (!ed)
+      return -1;
+
+   if (idx < 0)
+      return -1;
+
    if (idx < ed->count)
-     return ed->all[idx].hash;
+      return ed->all[idx].hash;
+
    return -1;
-}
+} /* eet_dictionary_string_get_hash */
 
 const char *
-eet_dictionary_string_get_char(const Eet_Dictionary *ed, int idx)
+eet_dictionary_string_get_char(const Eet_Dictionary *ed,
+                               int                   idx)
 {
-   if (!ed) return NULL;
-   if (idx < 0) return NULL;
+   if (!ed)
+      return NULL;
+
+   if (idx < 0)
+      return NULL;
+
    if (idx < ed->count)
      {
 #ifdef _WIN32
-       /* Windows file system could change the mmaped file when replacing a file. So we need to copy all string in memory to avoid bugs. */
-       if (ed->all[idx].str == NULL)
-         {
-            ed->all[idx].str = strdup(ed->all[idx].mmap);
-            ed->all[idx].mmap = NULL;
-         }
-#else
+        /* Windows file system could change the mmaped file when replacing a file. So we need to copy all string in memory to avoid bugs. */
+        if (ed->all[idx].str == NULL)
+          {
+             ed->all[idx].str = strdup(ed->all[idx].mmap);
+             ed->all[idx].mmap = NULL;
+          }
+
+#else /* ifdef _WIN32 */
         if (ed->all[idx].mmap)
-          return ed->all[idx].mmap;
-#endif
+           return ed->all[idx].mmap;
+
+#endif /* ifdef _WIN32 */
         return ed->all[idx].str;
      }
+
    return NULL;
-}
+} /* eet_dictionary_string_get_char */
 
 static inline Eina_Bool
-_eet_dictionary_string_get_me_cache(const char *s, int len, int *mantisse, int *exponent)
+_eet_dictionary_string_get_me_cache(const char *s,
+                                    int         len,
+                                    int        *mantisse,
+                                    int        *exponent)
 {
    if ((len == 6) && (s[0] == '0') && (s[1] == 'x') && (s[3] == 'p'))
      {
@@ -210,148 +231,182 @@ _eet_dictionary_string_get_me_cache(const char *s, int len, int *mantisse, int *
 
         return EINA_TRUE;
      }
+
    return EINA_FALSE;
-}
+} /* _eet_dictionary_string_get_me_cache */
 
 static inline Eina_Bool
-_eet_dictionary_string_get_float_cache(const char *s, int len, float *result)
+_eet_dictionary_string_get_float_cache(const char *s,
+                                       int         len,
+                                       float      *result)
 {
-   int  mantisse;
-   int  exponent;
+   int mantisse;
+   int exponent;
 
    if (_eet_dictionary_string_get_me_cache(s, len, &mantisse, &exponent))
      {
-        if (s[4] == '+')        *result = (float) (mantisse << exponent);
-        else                    *result = (float) mantisse / (float) (1 << exponent);
+        if (s[4] == '+')
+           *result = (float)(mantisse << exponent);
+        else
+           *result = (float)mantisse / (float)(1 << exponent);
 
         return EINA_TRUE;
      }
+
    return EINA_FALSE;
-}
+} /* _eet_dictionary_string_get_float_cache */
 
 static inline Eina_Bool
-_eet_dictionary_string_get_double_cache(const char *s, int len, double *result)
+_eet_dictionary_string_get_double_cache(const char *s,
+                                        int         len,
+                                        double     *result)
 {
-   int  mantisse;
-   int  exponent;
+   int mantisse;
+   int exponent;
 
    if (_eet_dictionary_string_get_me_cache(s, len, &mantisse, &exponent))
      {
-        if (s[4] == '+')        *result = (double) (mantisse << exponent);
-        else                    *result = (double) mantisse / (float) (1 << exponent);
+        if (s[4] == '+')
+           *result = (double)(mantisse << exponent);
+        else
+           *result = (double)mantisse / (float)(1 << exponent);
 
         return EINA_TRUE;
      }
+
    return EINA_FALSE;
-}
+} /* _eet_dictionary_string_get_double_cache */
 
 static inline Eina_Bool
-_eet_dictionary_test(const Eet_Dictionary *ed, int idx, void *result)
+_eet_dictionary_test(const Eet_Dictionary *ed,
+                     int                   idx,
+                     void                 *result)
 {
-   if (!result) return EINA_FALSE;
-   if (!ed) return EINA_FALSE;
-   if (idx < 0) return EINA_FALSE;
-   if (!(idx < ed->count)) return EINA_FALSE;
+   if (!result)
+      return EINA_FALSE;
+
+   if (!ed)
+      return EINA_FALSE;
+
+   if (idx < 0)
+      return EINA_FALSE;
+
+   if (!(idx < ed->count))
+      return EINA_FALSE;
+
    return EINA_TRUE;
-}
+} /* _eet_dictionary_test */
 
 Eina_Bool
-eet_dictionary_string_get_float(const Eet_Dictionary *ed, int idx, float *result)
+eet_dictionary_string_get_float(const Eet_Dictionary *ed,
+                                int                   idx,
+                                float                *result)
 {
-   if (!_eet_dictionary_test(ed, idx, result)) return EINA_FALSE;
+   if (!_eet_dictionary_test(ed, idx, result))
+      return EINA_FALSE;
 
    if (!(ed->all[idx].type & EET_D_FLOAT))
      {
-       const char      *str;
+        const char *str;
 
-       str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
+        str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
 
-       if (!_eet_dictionary_string_get_float_cache(str, ed->all[idx].len, &ed->all[idx].f))
-         {
-            long long    mantisse = 0;
-            long         exponent = 0;
+        if (!_eet_dictionary_string_get_float_cache(str, ed->all[idx].len,
+                                                    &ed->all[idx].f))
+          {
+             long long mantisse = 0;
+             long exponent = 0;
 
-            if (eina_convert_atod(str, ed->all[idx].len, &mantisse, &exponent) == EINA_FALSE)
-              return EINA_FALSE;
+             if (eina_convert_atod(str, ed->all[idx].len, &mantisse,
+                                   &exponent) == EINA_FALSE)
+                return EINA_FALSE;
 
-            ed->all[idx].f = ldexpf((float) mantisse, exponent);
-         }
+             ed->all[idx].f = ldexpf((float)mantisse, exponent);
+          }
 
-       ed->all[idx].type |= EET_D_FLOAT;
+        ed->all[idx].type |= EET_D_FLOAT;
      }
 
    *result = ed->all[idx].f;
    return EINA_TRUE;
-}
+} /* eet_dictionary_string_get_float */
 
 Eina_Bool
-eet_dictionary_string_get_double(const Eet_Dictionary *ed, int idx, double *result)
+eet_dictionary_string_get_double(const Eet_Dictionary *ed,
+                                 int                   idx,
+                                 double               *result)
 {
-   if (!_eet_dictionary_test(ed, idx, result)) return EINA_FALSE;
+   if (!_eet_dictionary_test(ed, idx, result))
+      return EINA_FALSE;
 
    if (!(ed->all[idx].type & EET_D_DOUBLE))
      {
-       const char      *str;
+        const char *str;
 
-       str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
+        str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
 
-       if (!_eet_dictionary_string_get_double_cache(str, ed->all[idx].len, &ed->all[idx].d))
-         {
-            long long    mantisse = 0;
-            long         exponent = 0;
+        if (!_eet_dictionary_string_get_double_cache(str, ed->all[idx].len,
+                                                     &ed->all[idx].d))
+          {
+             long long mantisse = 0;
+             long exponent = 0;
 
-            if (eina_convert_atod(str, ed->all[idx].len, &mantisse, &exponent) == EINA_FALSE)
-              return EINA_FALSE;
+             if (eina_convert_atod(str, ed->all[idx].len, &mantisse,
+                                   &exponent) == EINA_FALSE)
+                return EINA_FALSE;
 
-            ed->all[idx].d = ldexp((double) mantisse, exponent);
-         }
+             ed->all[idx].d = ldexp((double)mantisse, exponent);
+          }
 
-       ed->all[idx].type |= EET_D_DOUBLE;
+        ed->all[idx].type |= EET_D_DOUBLE;
      }
 
    *result = ed->all[idx].d;
    return EINA_TRUE;
-}
+} /* eet_dictionary_string_get_double */
 
 Eina_Bool
-eet_dictionary_string_get_fp(const Eet_Dictionary *ed, int idx, Eina_F32p32 *result)
+eet_dictionary_string_get_fp(const Eet_Dictionary *ed,
+                             int                   idx,
+                             Eina_F32p32          *result)
 {
-   if (!_eet_dictionary_test(ed, idx, result)) return EINA_FALSE;
+   if (!_eet_dictionary_test(ed, idx, result))
+      return EINA_FALSE;
 
    if (!(ed->all[idx].type & EET_D_FIXED_POINT))
      {
-       const char *str;
-       Eina_F32p32 fp;
+        const char *str;
+        Eina_F32p32 fp;
 
-       str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
+        str = ed->all[idx].str ? ed->all[idx].str : ed->all[idx].mmap;
 
-       if (!eina_convert_atofp(str, ed->all[idx].len, &fp))
-         return EINA_FALSE;
+        if (!eina_convert_atofp(str, ed->all[idx].len, &fp))
+           return EINA_FALSE;
 
-       ed->all[idx].fp = fp;
-       ed->all[idx].type |= EET_D_FIXED_POINT;
+        ed->all[idx].fp = fp;
+        ed->all[idx].type |= EET_D_FIXED_POINT;
      }
 
    *result = ed->all[idx].fp;
    return EINA_TRUE;
-}
+} /* eet_dictionary_string_get_fp */
 
 EAPI int
-eet_dictionary_string_check(Eet_Dictionary *ed, const char *string)
+eet_dictionary_string_check(Eet_Dictionary *ed,
+                            const char     *string)
 {
-   int i;
+   int i;
 
-   if (ed == NULL
-       || string == NULL)
-     return 0;
+   if ((ed == NULL) || (string == NULL))
+      return 0;
 
-   if (ed->start <= string
-       && string < ed->end)
-     return 1;
+   if ((ed->start <= string) && (string < ed->end))
+      return 1;
 
    for (i = 0; i < ed->count; ++i)
-     if (ed->all[i].str == string)
-       return 1;
+      if (ed->all[i].str == string)
+         return 1;
 
    return 0;
-}
+} /* eet_dictionary_string_check */
+
index 0636581..9c52dfd 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #ifdef HAVE_ALLOCA_H
 # include <alloca.h>
 #elif defined _MSC_VER
 # include <malloc.h>
 # define alloca _alloca
-#else
+#else /* ifdef HAVE_ALLOCA_H */
 # include <stddef.h>
 # ifdef  __cplusplus
 extern "C"
-# endif
-void *alloca (size_t);
-#endif
+# endif /* ifdef  __cplusplus */
+void *    alloca (size_t);
+#endif /* ifdef HAVE_ALLOCA_H */
 
 #ifdef HAVE_NETINET_IN_H
 # ifdef __OpenBSD__
 #  include <sys/types.h>
-# endif
+# endif /* ifdef __OpenBSD__ */
 # include <netinet/in.h>
-#endif
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef _WIN32
 # include <winsock2.h>
-#endif
+#endif /* ifdef _WIN32 */
 
 #include <stdio.h>
 #include <string.h>
@@ -45,29 +41,30 @@ void *alloca (size_t);
 
 /*---*/
 
-typedef struct _JPEG_error_mgr             *emptr;
+typedef struct _JPEG_error_mgr emptr;
 
 /*---*/
 
 struct _JPEG_error_mgr
 {
    struct jpeg_error_mgr pub;
-   jmp_buf setjmp_buffer;
+   jmp_buf               setjmp_buffer;
 };
 
-struct jpeg_membuf_src {
+struct jpeg_membuf_src
+{
    struct jpeg_source_mgr pub;
 
-   const unsigned char *buf;
-   size_t len;
+   const unsigned char   *buf;
+   size_t                 len;
 };
 
 static void
 _eet_jpeg_membuf_src_init(j_decompress_ptr cinfo)
 {
    /* FIXME: Use attribute unused */
-   (void) cinfo;
-}
+   (void)cinfo;
+} /* _eet_jpeg_membuf_src_init */
 
 static boolean
 _eet_jpeg_membuf_src_fill(j_decompress_ptr cinfo)
@@ -79,31 +76,35 @@ _eet_jpeg_membuf_src_fill(j_decompress_ptr cinfo)
    src->pub.next_input_byte = jpeg_eoi;
 
    return TRUE;
-}
+} /* _eet_jpeg_membuf_src_fill */
 
 static void
-_eet_jpeg_membuf_src_skip(j_decompress_ptr cinfo, long num_bytes)
+_eet_jpeg_membuf_src_skip(j_decompress_ptr cinfo,
+                          long             num_bytes)
 {
    struct jpeg_membuf_src *src = (struct jpeg_membuf_src *)cinfo->src;
 
    src->pub.bytes_in_buffer -= num_bytes;
    src->pub.next_input_byte += num_bytes;
-}
+} /* _eet_jpeg_membuf_src_skip */
 
 static void
 _eet_jpeg_membuf_src_term(j_decompress_ptr cinfo)
 {
    free(cinfo->src);
    cinfo->src = NULL;
-}
+} /* _eet_jpeg_membuf_src_term */
 
 static int
-eet_jpeg_membuf_src(j_decompress_ptr cinfo, const void *buf, size_t len)
+eet_jpeg_membuf_src(j_decompress_ptr cinfo,
+                    const void      *buf,
+                    size_t           len)
 {
    struct jpeg_membuf_src *src;
 
    src = malloc(sizeof(*src));
-   if (!src) return -1;
+   if (!src)
+      return -1;
 
    cinfo->src = &src->pub;
    src->buf = buf;
@@ -117,25 +118,26 @@ eet_jpeg_membuf_src(j_decompress_ptr cinfo, const void *buf, size_t len)
    src->pub.next_input_byte = src->buf;
 
    return 0;
-}
+} /* eet_jpeg_membuf_src */
 
-struct jpeg_membuf_dst {
+struct jpeg_membuf_dst
+{
    struct jpeg_destination_mgr pub;
 
-   void **dst_buf;
-   size_t *dst_len;
+   void                      **dst_buf;
+   size_t                     *dst_len;
 
-   unsigned char *buf;
-   size_t len;
-   int failed;
+   unsigned char              *buf;
+   size_t                      len;
+   int                         failed;
 };
 
 static void
 _eet_jpeg_membuf_dst_init(j_compress_ptr cinfo)
 {
    /* FIXME: Use eina attribute */
-   (void) cinfo;
-}
+   (void)cinfo;
+} /* _eet_jpeg_membuf_dst_init */
 
 static boolean
 _eet_jpeg_membuf_dst_flush(j_compress_ptr cinfo)
@@ -144,52 +146,62 @@ _eet_jpeg_membuf_dst_flush(j_compress_ptr cinfo)
    unsigned char *buf;
 
    if (dst->len >= 0x40000000 ||
-       (buf = realloc(dst->buf, dst->len * 2)) == NULL) {
-      dst->failed = 1;
-      dst->pub.next_output_byte = dst->buf;
-      dst->pub.free_in_buffer = dst->len;
-      return TRUE;
-   }
+       (buf = realloc(dst->buf, dst->len * 2)) == NULL)
+     {
+        dst->failed = 1;
+        dst->pub.next_output_byte = dst->buf;
+        dst->pub.free_in_buffer = dst->len;
+        return TRUE;
+     }
 
    dst->pub.next_output_byte =
-     buf + ((unsigned char *)dst->pub.next_output_byte - dst->buf);
+      buf + ((unsigned char *)dst->pub.next_output_byte - dst->buf);
    dst->buf = buf;
    dst->pub.free_in_buffer += dst->len;
    dst->len *= 2;
 
    return FALSE;
-}
+} /* _eet_jpeg_membuf_dst_flush */
 
 static void
 _eet_jpeg_membuf_dst_term(j_compress_ptr cinfo)
 {
    struct jpeg_membuf_dst *dst = (struct jpeg_membuf_dst *)cinfo->dest;
 
-   if (dst->failed) {
-      *dst->dst_buf = NULL;
-      *dst->dst_len = 0;
-      free(dst->buf);
-   } else {
-      *dst->dst_buf = dst->buf;
-      *dst->dst_len = (unsigned char *)dst->pub.next_output_byte - dst->buf;
-   }
+   if (dst->failed)
+     {
+        *dst->dst_buf = NULL;
+        *dst->dst_len = 0;
+        free(dst->buf);
+     }
+   else
+     {
+        *dst->dst_buf = dst->buf;
+        *dst->dst_len = (unsigned char *)dst->pub.next_output_byte - dst->buf;
+     }
+
    free(dst);
    cinfo->dest = NULL;
-}
+} /* _eet_jpeg_membuf_dst_term */
 
 static int
-eet_jpeg_membuf_dst(j_compress_ptr cinfo, void **buf, size_t *len)
+eet_jpeg_membuf_dst(j_compress_ptr cinfo,
+                    void         **buf,
+                    size_t        *len)
 {
    struct jpeg_membuf_dst *dst;
 
    dst = malloc(sizeof(*dst));
-   if (!dst) return -1;
+   if (!dst)
+      return -1;
 
    dst->buf = malloc(32768);
-   if (!dst->buf) {
-      free(dst);
-      return -1;
-   }
+   if (!dst->buf)
+     {
+        free(dst);
+        return -1;
+     }
+
    dst->len = 32768;
 
    cinfo->dest = &dst->pub;
@@ -203,21 +215,58 @@ eet_jpeg_membuf_dst(j_compress_ptr cinfo, void **buf, size_t *len)
    dst->failed = 0;
 
    return 0;
-}
+} /* eet_jpeg_membuf_dst */
 
 /*---*/
 
-static void _JPEGFatalErrorHandler(j_common_ptr cinfo);
-static void _JPEGErrorHandler(j_common_ptr cinfo);
-static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level);
-
-static int   eet_data_image_jpeg_header_decode(const void *data, int size, unsigned int *w, unsigned int *h);
-static int   eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride);
-static void *eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x, unsigned int src_y, unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride);
-static void *eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha);
-static void *eet_data_image_lossless_compressed_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int compression);
-static void *eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int quality);
-static void *eet_data_image_jpeg_alpha_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int quality);
+static void      _JPEGFatalErrorHandler(j_common_ptr cinfo);
+static void      _JPEGErrorHandler(j_common_ptr cinfo);
+static void      _JPEGErrorHandler2(j_common_ptr cinfo,
+                                    int          msg_level);
+
+static int       eet_data_image_jpeg_header_decode(const void   *data,
+                                                   int           size,
+                                                   unsigned int *w,
+                                                   unsigned int *h);
+static int       eet_data_image_jpeg_rgb_decode(const void   *data,
+                                                int           size,
+                                                unsigned int  src_x,
+                                                unsigned int  src_y,
+                                                unsigned int *d,
+                                                unsigned int  w,
+                                                unsigned int  h,
+                                                unsigned int  row_stride);
+static void *    eet_data_image_jpeg_alpha_decode(const void   *data,
+                                                  int           size,
+                                                  unsigned int  src_x,
+                                                  unsigned int  src_y,
+                                                  unsigned int *d,
+                                                  unsigned int  w,
+                                                  unsigned int  h,
+                                                  unsigned int  row_stride);
+static void *    eet_data_image_lossless_convert(int         *size,
+                                                 const void  *data,
+                                                 unsigned int w,
+                                                 unsigned int h,
+                                                 int          alpha);
+static void *    eet_data_image_lossless_compressed_convert(int         *size,
+                                                            const void  *data,
+                                                            unsigned int w,
+                                                            unsigned int h,
+                                                            int          alpha,
+                                                            int          compression);
+static void *    eet_data_image_jpeg_convert(int         *size,
+                                             const void  *data,
+                                             unsigned int w,
+                                             unsigned int h,
+                                             int          alpha,
+                                             int          quality);
+static void *    eet_data_image_jpeg_alpha_convert(int         *size,
+                                                   const void  *data,
+                                                   unsigned int w,
+                                                   unsigned int h,
+                                                   int          alpha,
+                                                   int          quality);
 
 /*---*/
 
@@ -225,41 +274,41 @@ static int _eet_image_words_bigendian = -1;
 
 /*---*/
 
-#define SWAP64(x) (x) = \
-   ((((unsigned long long)(x) & 0x00000000000000ffULL ) << 56) |\
-       (((unsigned long long)(x) & 0x000000000000ff00ULL ) << 40) |\
-       (((unsigned long long)(x) & 0x0000000000ff0000ULL ) << 24) |\
-       (((unsigned long long)(x) & 0x00000000ff000000ULL ) << 8) |\
-       (((unsigned long long)(x) & 0x000000ff00000000ULL ) >> 8) |\
-       (((unsigned long long)(x) & 0x0000ff0000000000ULL ) >> 24) |\
-       (((unsigned long long)(x) & 0x00ff000000000000ULL ) >> 40) |\
-       (((unsigned long long)(x) & 0xff00000000000000ULL ) >> 56))
-#define SWAP32(x) (x) = \
-   ((((int)(x) & 0x000000ff ) << 24) |\
-       (((int)(x) & 0x0000ff00 ) << 8) |\
-       (((int)(x) & 0x00ff0000 ) >> 8) |\
-       (((int)(x) & 0xff000000 ) >> 24))
-#define SWAP16(x) (x) = \
-   ((((short)(x) & 0x00ff ) << 8) |\
-       (((short)(x) & 0xff00 ) >> 8))
+#define SWAP64(x) (x) =\
+   ((((unsigned long long)(x) & 0x00000000000000ffULL) << 56) |\
+    (((unsigned long long)(x) & 0x000000000000ff00ULL) << 40) |\
+    (((unsigned long long)(x) & 0x0000000000ff0000ULL) << 24) |\
+    (((unsigned long long)(x) & 0x00000000ff000000ULL) << 8) |\
+    (((unsigned long long)(x) & 0x000000ff00000000ULL) >> 8) |\
+    (((unsigned long long)(x) & 0x0000ff0000000000ULL) >> 24) |\
+    (((unsigned long long)(x) & 0x00ff000000000000ULL) >> 40) |\
+    (((unsigned long long)(x) & 0xff00000000000000ULL) >> 56))
+#define SWAP32(x) (x) =\
+   ((((int)(x) & 0x000000ff) << 24) |\
+    (((int)(x) & 0x0000ff00) << 8) |\
+    (((int)(x) & 0x00ff0000) >> 8) |\
+    (((int)(x) & 0xff000000) >> 24))
+#define SWAP16(x) (x) =\
+   ((((short)(x) & 0x00ff) << 8) |\
+    (((short)(x) & 0xff00) >> 8))
 
 #ifdef CONV8
 # undef CONV8
-#endif
+#endif /* ifdef CONV8 */
 #ifdef CONV16
 # undef CONV16
-#endif
+#endif /* ifdef CONV16 */
 #ifdef CONV32
 # undef CONV32
-#endif
+#endif /* ifdef CONV32 */
 #ifdef CONV64
 # undef CONV64
-#endif
+#endif /* ifdef CONV64 */
 
 #define CONV8(x)
-#define CONV16(x) {if (_eet_image_words_bigendian) SWAP16(x);}
-#define CONV32(x) {if (_eet_image_words_bigendian) SWAP32(x);}
-#define CONV64(x) {if (_eet_image_words_bigendian) SWAP64(x);}
+#define CONV16(x) {if (_eet_image_words_bigendian) {SWAP16(x); }}
+#define CONV32(x) {if (_eet_image_words_bigendian) {SWAP32(x); }}
+#define CONV64(x) {if (_eet_image_words_bigendian) {SWAP64(x); }}
 
 /*---*/
 
@@ -268,11 +317,11 @@ _JPEGFatalErrorHandler(j_common_ptr cinfo)
 {
    emptr errmgr;
 
-   errmgr = (emptr) cinfo->err;
+   errmgr = (emptr)cinfo->err;
    /*   cinfo->err->output_message(cinfo);*/
    longjmp(errmgr->setjmp_buffer, 1);
    return;
-}
+} /* _JPEGFatalErrorHandler */
 
 static void
 _JPEGErrorHandler(j_common_ptr cinfo __UNUSED__)
@@ -283,10 +332,11 @@ _JPEGErrorHandler(j_common_ptr cinfo __UNUSED__)
    /*   cinfo->err->output_message(cinfo);*/
    /*   longjmp(errmgr->setjmp_buffer, 1);*/
    return;
-}
+} /* _JPEGErrorHandler */
 
 static void
-_JPEGErrorHandler2(j_common_ptr cinfo __UNUSED__, int msg_level __UNUSED__)
+_JPEGErrorHandler2(j_common_ptr cinfo __UNUSED__,
+                   int msg_level      __UNUSED__)
 {
    /*   emptr errmgr; */
 
@@ -294,10 +344,13 @@ _JPEGErrorHandler2(j_common_ptr cinfo __UNUSED__, int msg_level __UNUSED__)
    /*   cinfo->err->output_message(cinfo);*/
    /*   longjmp(errmgr->setjmp_buffer, 1);*/
    return;
-}
+} /* _JPEGErrorHandler2 */
 
 static int
-eet_data_image_jpeg_header_decode(const void *data, int size, unsigned int *w, unsigned int *h)
+eet_data_image_jpeg_header_decode(const void   *data,
+                                  int           size,
+                                  unsigned int *w,
+                                  unsigned int *h)
 {
    struct jpeg_decompress_struct cinfo;
    struct _JPEG_error_mgr jerr;
@@ -308,13 +361,15 @@ eet_data_image_jpeg_header_decode(const void *data, int size, unsigned int *w, u
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
    jerr.pub.emit_message = _JPEGErrorHandler2;
    jerr.pub.output_message = _JPEGErrorHandler;
-   if (setjmp(jerr.setjmp_buffer)) return 0;
+   if (setjmp(jerr.setjmp_buffer))
+      return 0;
+
    jpeg_create_decompress(&cinfo);
 
    if (eet_jpeg_membuf_src(&cinfo, data, (size_t)size))
      {
-       jpeg_destroy_decompress(&cinfo);
-       return 0;
+        jpeg_destroy_decompress(&cinfo);
+        return 0;
      }
 
    jpeg_read_header(&cinfo, TRUE);
@@ -333,12 +388,19 @@ eet_data_image_jpeg_header_decode(const void *data, int size, unsigned int *w, u
 
    if ((*w < 1) || (*h < 1) || (*w > 8192) || (*h > 8192))
       return 0;
+
    return 1;
-}
+} /* eet_data_image_jpeg_header_decode */
 
 static int
-eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, unsigned int src_y,
-                              unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride)
+eet_data_image_jpeg_rgb_decode(const void   *data,
+                               int           size,
+                               unsigned int  src_x,
+                               unsigned int  src_y,
+                               unsigned int *d,
+                               unsigned int  w,
+                               unsigned int  h,
+                               unsigned int  row_stride)
 {
    struct jpeg_decompress_struct cinfo;
    struct _JPEG_error_mgr jerr;
@@ -349,7 +411,8 @@ eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, u
    unsigned int i;
 
    /* FIXME: handle src_x, src_y and row_stride correctly */
-   if (!d) return 0;
+   if (!d)
+      return 0;
 
    memset(&cinfo, 0, sizeof (struct jpeg_decompress_struct));
 
@@ -357,13 +420,15 @@ eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, u
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
    jerr.pub.emit_message = _JPEGErrorHandler2;
    jerr.pub.output_message = _JPEGErrorHandler;
-   if (setjmp(jerr.setjmp_buffer)) return 0;
+   if (setjmp(jerr.setjmp_buffer))
+      return 0;
+
    jpeg_create_decompress(&cinfo);
 
    if (eet_jpeg_membuf_src(&cinfo, data, (size_t)size))
      {
-       jpeg_destroy_decompress(&cinfo);
-       return 0;
+        jpeg_destroy_decompress(&cinfo);
+        return 0;
      }
 
    jpeg_read_header(&cinfo, TRUE);
@@ -377,98 +442,118 @@ eet_data_image_jpeg_rgb_decode(const void *data, int size, unsigned int src_x, u
    ih = cinfo.output_height;
    if ((iw != w) || (ih != h))
      {
-       free(cinfo.src);
-       cinfo.src = NULL;
+        free(cinfo.src);
+        cinfo.src = NULL;
 
-       jpeg_destroy_decompress(&cinfo);
-       return 0;
+        jpeg_destroy_decompress(&cinfo);
+        return 0;
      }
+
    /* end head decoding */
    /* data decoding */
    if (cinfo.rec_outbuf_height > 16)
      {
-       free(cinfo.src);
-       cinfo.src = NULL;
+        free(cinfo.src);
+        cinfo.src = NULL;
 
-       jpeg_destroy_decompress(&cinfo);
-       return 0;
+        jpeg_destroy_decompress(&cinfo);
+        return 0;
      }
+
    tdata = alloca((iw) * 16 * 3);
    ptr2 = d;
 
    if (cinfo.output_components == 3)
      {
-       for (i = 0; i < (unsigned int) cinfo.rec_outbuf_height; i++)
-         line[i] = tdata + (i * (iw) * 3);
-       for (l = 0; l < ih; l += cinfo.rec_outbuf_height)
-         {
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-            scans = cinfo.rec_outbuf_height;
-            if ((ih - l) < scans) scans = ih - l;
-            ptr = tdata;
-
-            if (l + scans >= src_y && l < src_y + h)
-              {
-                 y = src_y - l;
-                 if (src_y < l) y = 0;
-                 for (ptr += 3 * iw * y; y < scans && (y + l) < (src_y + h); y++)
-                   {
-                      tmp = ptr2;
-                      ptr += 3 * src_x;
-                      for (x = 0; x < w; x++)
-                        {
-                           *ptr2 =
-                             (0xff000000) | ((ptr[0]) << 16) | ((ptr[1]) << 8) | (ptr[2]);
-                           ptr += 3;
-                           ptr2++;
-                        }
-                      ptr += 3 * (iw - w);
-                      ptr2 = tmp + row_stride / 4;
-                   }
-              }
-         }
+        for (i = 0; i < (unsigned int)cinfo.rec_outbuf_height; i++)
+           line[i] = tdata + (i * (iw) * 3);
+        for (l = 0; l < ih; l += cinfo.rec_outbuf_height)
+          {
+             jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
+             scans = cinfo.rec_outbuf_height;
+             if ((ih - l) < scans)
+                scans = ih - l;
+
+             ptr = tdata;
+
+             if (l + scans >= src_y && l < src_y + h)
+               {
+                  y = src_y - l;
+                  if (src_y < l)
+                     y = 0;
+
+                  for (ptr += 3 * iw * y; y < scans && (y + l) < (src_y + h);
+                       y++)
+                    {
+                       tmp = ptr2;
+                       ptr += 3 * src_x;
+                       for (x = 0; x < w; x++)
+                         {
+                            *ptr2 =
+                               (0xff000000) |
+                               ((ptr[0]) << 16) | ((ptr[1]) << 8) | (ptr[2]);
+                            ptr += 3;
+                            ptr2++;
+                         }
+                       ptr += 3 * (iw - w);
+                       ptr2 = tmp + row_stride / 4;
+                    }
+               }
+          }
      }
    else if (cinfo.output_components == 1)
      {
-       for (i = 0; i < (unsigned int) cinfo.rec_outbuf_height; i++)
-         line[i] = tdata + (i * (iw));
-       for (l = 0; l < (ih); l += cinfo.rec_outbuf_height)
-         {
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-            scans = cinfo.rec_outbuf_height;
-            if (((ih) - l) < scans) scans = (ih) - l;
-            ptr = tdata;
-
-            if (l >= src_y && l < src_y + h)
-              {
-                 y = src_y - l;
-                 if (src_y < l) y = 0;
-                 for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++)
-                   {
-                      tmp = ptr2;
-                      ptr += src_x;
-                      for (x = 0; x < w; x++)
-                        {
-                           *ptr2 =
-                             (0xff000000) | ((ptr[0]) << 16) | ((ptr[0]) << 8) | (ptr[0]);
-                           ptr++;
-                           ptr2++;
-                        }
-                      ptr += iw - w;
-                      ptr2 = tmp + row_stride / 4;
-                   }
-              }
-         }
+        for (i = 0; i < (unsigned int)cinfo.rec_outbuf_height; i++)
+           line[i] = tdata + (i * (iw));
+        for (l = 0; l < (ih); l += cinfo.rec_outbuf_height)
+          {
+             jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
+             scans = cinfo.rec_outbuf_height;
+             if (((ih) - l) < scans)
+                scans = (ih) - l;
+
+             ptr = tdata;
+
+             if (l >= src_y && l < src_y + h)
+               {
+                  y = src_y - l;
+                  if (src_y < l)
+                     y = 0;
+
+                  for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++)
+                    {
+                       tmp = ptr2;
+                       ptr += src_x;
+                       for (x = 0; x < w; x++)
+                         {
+                            *ptr2 =
+                               (0xff000000) |
+                               ((ptr[0]) << 16) | ((ptr[0]) << 8) | (ptr[0]);
+                            ptr++;
+                            ptr2++;
+                         }
+                       ptr += iw - w;
+                       ptr2 = tmp + row_stride / 4;
+                    }
+               }
+          }
      }
+
    /* end data decoding */
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    return 1;
-}
+} /* eet_data_image_jpeg_rgb_decode */
 
 static void *
-eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x, unsigned int src_y,
-                                unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride)
+eet_data_image_jpeg_alpha_decode(const void   *data,
+                                 int           size,
+                                 unsigned int  src_x,
+                                 unsigned int  src_y,
+                                 unsigned int *d,
+                                 unsigned int  w,
+                                 unsigned int  h,
+                                 unsigned int  row_stride)
 {
    struct jpeg_decompress_struct cinfo;
    struct _JPEG_error_mgr jerr;
@@ -483,13 +568,15 @@ eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x,
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
    jerr.pub.emit_message = _JPEGErrorHandler2;
    jerr.pub.output_message = _JPEGErrorHandler;
-   if (setjmp(jerr.setjmp_buffer)) return NULL;
+   if (setjmp(jerr.setjmp_buffer))
+      return NULL;
+
    jpeg_create_decompress(&cinfo);
 
    if (eet_jpeg_membuf_src(&cinfo, data, (size_t)size))
      {
-       jpeg_destroy_decompress(&cinfo);
-       return NULL;
+        jpeg_destroy_decompress(&cinfo);
+        return NULL;
      }
 
    jpeg_read_header(&cinfo, TRUE);
@@ -503,166 +590,199 @@ eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x,
    if (w != cinfo.output_width
        || h != cinfo.output_height)
      {
-       free(cinfo.src);
-       cinfo.src = NULL;
+        free(cinfo.src);
+        cinfo.src = NULL;
 
-       jpeg_destroy_decompress(&cinfo);
-       return NULL;
+        jpeg_destroy_decompress(&cinfo);
+        return NULL;
      }
+
    /* end head decoding */
    /* data decoding */
    if (cinfo.rec_outbuf_height > 16)
      {
-       free(cinfo.src);
-       cinfo.src = NULL;
+        free(cinfo.src);
+        cinfo.src = NULL;
 
-       jpeg_destroy_decompress(&cinfo);
-       return NULL;
+        jpeg_destroy_decompress(&cinfo);
+        return NULL;
      }
+
    tdata = alloca(w * 16 * 3);
    ptr2 = d;
    if (cinfo.output_components == 1)
      {
-       for (i = 0; i < (unsigned int) cinfo.rec_outbuf_height; i++)
-         line[i] = tdata + (i * w);
-       for (l = 0; l < h; l += cinfo.rec_outbuf_height)
-         {
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-            scans = cinfo.rec_outbuf_height;
-            if ((h - l) < scans) scans = h - l;
-            ptr = tdata;
-
-            if (l >= src_y && l < src_y + h)
-              {
-                 y = src_y - l;
-                 if (src_y < l) y = 0;
-                 for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++)
-                   {
-                      tmp = ptr2;
-                      ptr += src_x;
-                      for (x = 0; x < w; x++)
-                        {
-                           *ptr2 =
-                             ((*ptr2) & 0x00ffffff) |
-                             ((ptr[0]) << 24);
-                           ptr++;
-                           ptr2++;
-                        }
-                      ptr += iw - w;
-                      ptr2 = tmp + row_stride / 4;
-                   }
-              }
-         }
+        for (i = 0; i < (unsigned int)cinfo.rec_outbuf_height; i++)
+           line[i] = tdata + (i * w);
+        for (l = 0; l < h; l += cinfo.rec_outbuf_height)
+          {
+             jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
+             scans = cinfo.rec_outbuf_height;
+             if ((h - l) < scans)
+                scans = h - l;
+
+             ptr = tdata;
+
+             if (l >= src_y && l < src_y + h)
+               {
+                  y = src_y - l;
+                  if (src_y < l)
+                     y = 0;
+
+                  for (ptr += iw * y; y < scans && (y + l) < (src_y + h); y++)
+                    {
+                       tmp = ptr2;
+                       ptr += src_x;
+                       for (x = 0; x < w; x++)
+                         {
+                            *ptr2 =
+                               ((*ptr2) & 0x00ffffff) |
+                               ((ptr[0]) << 24);
+                            ptr++;
+                            ptr2++;
+                         }
+                       ptr += iw - w;
+                       ptr2 = tmp + row_stride / 4;
+                    }
+               }
+          }
      }
+
    /* end data decoding */
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    return d;
-}
+} /* eet_data_image_jpeg_alpha_decode */
 
 static void *
-eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha)
+eet_data_image_lossless_convert(int         *size,
+                                const void  *data,
+                                unsigned int w,
+                                unsigned int h,
+                                int          alpha)
 {
    if (_eet_image_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_image_words_bigendian = 1;
-       else _eet_image_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_image_words_bigendian = 1;
+        else
+           _eet_image_words_bigendian = 0;
      }
-     {
-       unsigned char *d;
-       int           *header;
 
-       d = malloc((w * h * 4) + (8 * 4));
-       if (!d) return NULL;
+   {
+      unsigned char *d;
+      int *header;
 
-       header = (int *)d;
-       memset(d, 0, 32);
+      d = malloc((w * h * 4) + (8 * 4));
+      if (!d)
+         return NULL;
 
-       header[0] = 0xac1dfeed;
-       header[1] = w;
-       header[2] = h;
-       header[3] = alpha;
+      header = (int *)d;
+      memset(d, 0, 32);
 
-       memcpy(d + 32, data, w * h * 4);
+      header[0] = 0xac1dfeed;
+      header[1] = w;
+      header[2] = h;
+      header[3] = alpha;
 
-       if (_eet_image_words_bigendian)
-         {
-            unsigned int i;
+      memcpy(d + 32, data, w * h * 4);
 
-            for (i = 0; i < ((w * h) + 8); i++) SWAP32(header[i]);
-         }
-       *size = ((w * h * 4) + (8 * 4));
-       return d;
-     }
-}
+      if (_eet_image_words_bigendian)
+        {
+           unsigned int i;
+
+           for (i = 0; i < ((w * h) + 8); i++) SWAP32(header[i]);
+        }
+
+      *size = ((w * h * 4) + (8 * 4));
+      return d;
+   }
+} /* eet_data_image_lossless_convert */
 
 static void *
-eet_data_image_lossless_compressed_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int compression)
+eet_data_image_lossless_compressed_convert(int         *size,
+                                           const void  *data,
+                                           unsigned int w,
+                                           unsigned int h,
+                                           int          alpha,
+                                           int          compression)
 {
    if (_eet_image_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_image_words_bigendian = 1;
-       else _eet_image_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_image_words_bigendian = 1;
+        else
+           _eet_image_words_bigendian = 0;
      }
 
-     {
-       unsigned char *d;
-       unsigned char *comp;
-       int           *header;
-       int            ret;
-       uLongf         buflen;
-
-       d = malloc((w * h * 4) + (8 * 4));
-       if (!d) return NULL;
-       buflen = (((w * h * 101) / 100) + 3) * 4;
-       comp = malloc(buflen);
-       if (!comp)
-         {
-            free(d);
-            return NULL;
-         }
-       header = (int *)d;
-       memset(d, 0, 32);
-
-       header[0] = 0xac1dfeed;
-       header[1] = w;
-       header[2] = h;
-       header[3] = alpha;
-       header[4] = compression;
-       memcpy(d + 32, data, w * h * 4);
-
-       if (_eet_image_words_bigendian)
-         {
-            unsigned int i;
-
-            for (i = 0; i < ((w * h) + 8); i++) SWAP32(header[i]);
-         }
-       ret = compress2((Bytef *)comp, &buflen,
-                       (Bytef *)(d + 32),
-                       (uLong)(w * h * 4),
-                       compression);
-       if (ret != Z_OK || buflen > (w * h * 4))
-         {
-            free(comp);
-            free(d);
-            *size = -1;
-            return NULL;
-         }
-       memcpy(d + 32, comp, buflen);
-       *size = (8 * 4) + buflen;
-       free(comp);
-       return d;
-     }
-}
+   {
+      unsigned char *d;
+      unsigned char *comp;
+      int *header;
+      int ret;
+      uLongf buflen;
+
+      d = malloc((w * h * 4) + (8 * 4));
+      if (!d)
+         return NULL;
+
+      buflen = (((w * h * 101) / 100) + 3) * 4;
+      comp = malloc(buflen);
+      if (!comp)
+        {
+           free(d);
+           return NULL;
+        }
+
+      header = (int *)d;
+      memset(d, 0, 32);
+
+      header[0] = 0xac1dfeed;
+      header[1] = w;
+      header[2] = h;
+      header[3] = alpha;
+      header[4] = compression;
+      memcpy(d + 32, data, w * h * 4);
+
+      if (_eet_image_words_bigendian)
+        {
+           unsigned int i;
+
+           for (i = 0; i < ((w * h) + 8); i++) SWAP32(header[i]);
+        }
+
+      ret = compress2((Bytef *)comp, &buflen,
+                      (Bytef *)(d + 32),
+                      (uLong)(w * h * 4),
+                      compression);
+      if (ret != Z_OK || buflen > (w * h * 4))
+        {
+           free(comp);
+           free(d);
+           *size = -1;
+           return NULL;
+        }
+
+      memcpy(d + 32, comp, buflen);
+      *size = (8 * 4) + buflen;
+      free(comp);
+      return d;
+   }
+} /* eet_data_image_lossless_compressed_convert */
 
 static void *
-eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int quality)
+eet_data_image_jpeg_convert(int         *size,
+                            const void  *data,
+                            unsigned int w,
+                            unsigned int h,
+                            int          alpha,
+                            int          quality)
 {
    struct jpeg_compress_struct cinfo;
    struct _JPEG_error_mgr jerr;
@@ -672,7 +792,7 @@ eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigne
    JSAMPROW *jbuf;
    unsigned char *buf;
 
-   (void) alpha; /* unused */
+   (void)alpha; /* unused */
 
    buf = alloca(3 * w);
 
@@ -682,13 +802,15 @@ eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigne
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
    jerr.pub.emit_message = _JPEGErrorHandler2;
    jerr.pub.output_message = _JPEGErrorHandler;
-   if (setjmp(jerr.setjmp_buffer)) return NULL;
+   if (setjmp(jerr.setjmp_buffer))
+      return NULL;
+
    jpeg_create_compress(&cinfo);
 
    if (eet_jpeg_membuf_dst(&cinfo, &d, &sz))
      {
-       jpeg_destroy_compress(&cinfo);
-       return NULL;
+        jpeg_destroy_compress(&cinfo);
+        return NULL;
      }
 
    cinfo.image_width = w;
@@ -699,30 +821,31 @@ eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigne
    jpeg_set_quality(&cinfo, quality, TRUE);
    if (quality >= 90)
      {
-       cinfo.comp_info[0].h_samp_factor = 1;
-       cinfo.comp_info[0].v_samp_factor = 1;
-       cinfo.comp_info[1].h_samp_factor = 1;
-       cinfo.comp_info[1].v_samp_factor = 1;
-       cinfo.comp_info[2].h_samp_factor = 1;
-       cinfo.comp_info[2].v_samp_factor = 1;
+        cinfo.comp_info[0].h_samp_factor = 1;
+        cinfo.comp_info[0].v_samp_factor = 1;
+        cinfo.comp_info[1].h_samp_factor = 1;
+        cinfo.comp_info[1].v_samp_factor = 1;
+        cinfo.comp_info[2].h_samp_factor = 1;
+        cinfo.comp_info[2].v_samp_factor = 1;
      }
+
    jpeg_start_compress(&cinfo, TRUE);
 
    while (cinfo.next_scanline < cinfo.image_height)
      {
-       unsigned int i, j;
-
-       /* convert scaline from ARGB to RGB packed */
-       ptr = ((const int*) data) + cinfo.next_scanline * w;
-       for (j = 0, i = 0; i < w; i++)
-         {
-            buf[j++] = ((*ptr) >> 16) & 0xff;
-            buf[j++] = ((*ptr) >> 8) & 0xff;
-            buf[j++] = ((*ptr)) & 0xff;
-            ptr++;
-         }
-       jbuf = (JSAMPROW *) (&buf);
-       jpeg_write_scanlines(&cinfo, jbuf, 1);
+        unsigned int i, j;
+
+        /* convert scaline from ARGB to RGB packed */
+        ptr = ((const int *)data) + cinfo.next_scanline * w;
+        for (j = 0, i = 0; i < w; i++)
+          {
+             buf[j++] = ((*ptr) >> 16) & 0xff;
+             buf[j++] = ((*ptr) >> 8) & 0xff;
+             buf[j++] = ((*ptr)) & 0xff;
+             ptr++;
+          }
+        jbuf = (JSAMPROW *)(&buf);
+        jpeg_write_scanlines(&cinfo, jbuf, 1);
      }
 
    jpeg_finish_compress(&cinfo);
@@ -730,188 +853,207 @@ eet_data_image_jpeg_convert(int *size, const void *data, unsigned int w, unsigne
 
    *size = sz;
    return d;
-}
+} /* eet_data_image_jpeg_convert */
 
 static void *
-eet_data_image_jpeg_alpha_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int quality)
+eet_data_image_jpeg_alpha_convert(int         *size,
+                                  const void  *data,
+                                  unsigned int w,
+                                  unsigned int h,
+                                  int          alpha,
+                                  int          quality)
 {
    unsigned char *d1, *d2;
    unsigned char *d;
    int *header;
    int sz1, sz2;
 
-   (void) alpha; /* unused */
+   (void)alpha; /* unused */
 
    if (_eet_image_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_image_words_bigendian = 1;
-       else _eet_image_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_image_words_bigendian = 1;
+        else
+           _eet_image_words_bigendian = 0;
      }
 
-     {
-       const int *ptr;
-       void *dst = NULL;
-       size_t sz = 0;
-       struct _JPEG_error_mgr jerr;
-       JSAMPROW *jbuf;
-       struct jpeg_compress_struct cinfo;
-       unsigned char *buf;
-
-       buf = alloca(3 * w);
-
-       cinfo.err = jpeg_std_error(&(jerr.pub));
-       jerr.pub.error_exit = _JPEGFatalErrorHandler;
-       jerr.pub.emit_message = _JPEGErrorHandler2;
-       jerr.pub.output_message = _JPEGErrorHandler;
-       if (setjmp(jerr.setjmp_buffer)) return NULL;
-
-       jpeg_create_compress(&cinfo);
-       if (eet_jpeg_membuf_dst(&cinfo, &dst, &sz))
-         {
-            jpeg_destroy_compress(&cinfo);
-            return NULL;
-         }
-
-       cinfo.image_width = w;
-       cinfo.image_height = h;
-       cinfo.input_components = 3;
-       cinfo.in_color_space = JCS_RGB;
-       jpeg_set_defaults(&cinfo);
-       jpeg_set_quality(&cinfo, quality, TRUE);
-       if (quality >= 90)
-         {
-            cinfo.comp_info[0].h_samp_factor = 1;
-            cinfo.comp_info[0].v_samp_factor = 1;
-            cinfo.comp_info[1].h_samp_factor = 1;
-            cinfo.comp_info[1].v_samp_factor = 1;
-            cinfo.comp_info[2].h_samp_factor = 1;
-            cinfo.comp_info[2].v_samp_factor = 1;
-         }
-       jpeg_start_compress(&cinfo, TRUE);
-
-       while (cinfo.next_scanline < cinfo.image_height)
-         {
-            unsigned int i, j;
-
-            ptr = ((const int*) data) + cinfo.next_scanline * w;
-            /* convert scaline from ARGB to RGB packed */
-            for (j = 0, i = 0; i < w; i++)
-              {
-                 buf[j++] = ((*ptr) >> 16) & 0xff;
-                 buf[j++] = ((*ptr) >> 8) & 0xff;
-                 buf[j++] = ((*ptr)) & 0xff;
-                 ptr++;
-              }
-            jbuf = (JSAMPROW *) (&buf);
-            jpeg_write_scanlines(&cinfo, jbuf, 1);
-         }
-
-       jpeg_finish_compress(&cinfo);
-       jpeg_destroy_compress(&cinfo);
-
-       d1 = dst;
-       sz1 = sz;
-     }
-     {
-       const int *ptr;
-       void *dst = NULL;
-       size_t sz = 0;
-       struct _JPEG_error_mgr jerr;
-       JSAMPROW *jbuf;
-       struct jpeg_compress_struct cinfo;
-       unsigned char *buf;
-
-       buf = alloca(3 * w);
-
-       cinfo.err = jpeg_std_error(&(jerr.pub));
-       jerr.pub.error_exit = _JPEGFatalErrorHandler;
-       jerr.pub.emit_message = _JPEGErrorHandler2;
-       jerr.pub.output_message = _JPEGErrorHandler;
-       if (setjmp(jerr.setjmp_buffer))
-         {
-            free(d1);
-            return NULL;
-         }
-
-       jpeg_create_compress(&cinfo);
-       if (eet_jpeg_membuf_dst(&cinfo, &dst, &sz))
-         {
-            jpeg_destroy_compress(&cinfo);
-            free(d1);
-            return NULL;
-         }
-
-       cinfo.image_width = w;
-       cinfo.image_height = h;
-       cinfo.input_components = 1;
-       cinfo.in_color_space = JCS_GRAYSCALE;
-       jpeg_set_defaults(&cinfo);
-       jpeg_set_quality(&cinfo, quality, TRUE);
-       if (quality >= 90)
-         {
-            cinfo.comp_info[0].h_samp_factor = 1;
-            cinfo.comp_info[0].v_samp_factor = 1;
-            cinfo.comp_info[1].h_samp_factor = 1;
-            cinfo.comp_info[1].v_samp_factor = 1;
-            cinfo.comp_info[2].h_samp_factor = 1;
-            cinfo.comp_info[2].v_samp_factor = 1;
-         }
-       jpeg_start_compress(&cinfo, TRUE);
-
-       while (cinfo.next_scanline < cinfo.image_height)
-         {
-            unsigned int i, j;
-
-            ptr = ((const int*) data) + cinfo.next_scanline * w;
-            /* convert scaline from ARGB to RGB packed */
-            for (j = 0, i = 0; i < w; i++)
-              {
-                 buf[j++] = ((*ptr) >> 24) & 0xff;
-                 ptr++;
-              }
-            jbuf = (JSAMPROW *) (&buf);
-            jpeg_write_scanlines(&cinfo, jbuf, 1);
-         }
-
-       jpeg_finish_compress(&cinfo);
-       jpeg_destroy_compress(&cinfo);
-
-       d2 = dst;
-       sz2 = sz;
-     }
+   {
+      const int *ptr;
+      void *dst = NULL;
+      size_t sz = 0;
+      struct _JPEG_error_mgr jerr;
+      JSAMPROW *jbuf;
+      struct jpeg_compress_struct cinfo;
+      unsigned char *buf;
+
+      buf = alloca(3 * w);
+
+      cinfo.err = jpeg_std_error(&(jerr.pub));
+      jerr.pub.error_exit = _JPEGFatalErrorHandler;
+      jerr.pub.emit_message = _JPEGErrorHandler2;
+      jerr.pub.output_message = _JPEGErrorHandler;
+      if (setjmp(jerr.setjmp_buffer))
+         return NULL;
+
+      jpeg_create_compress(&cinfo);
+      if (eet_jpeg_membuf_dst(&cinfo, &dst, &sz))
+        {
+           jpeg_destroy_compress(&cinfo);
+           return NULL;
+        }
+
+      cinfo.image_width = w;
+      cinfo.image_height = h;
+      cinfo.input_components = 3;
+      cinfo.in_color_space = JCS_RGB;
+      jpeg_set_defaults(&cinfo);
+      jpeg_set_quality(&cinfo, quality, TRUE);
+      if (quality >= 90)
+        {
+           cinfo.comp_info[0].h_samp_factor = 1;
+           cinfo.comp_info[0].v_samp_factor = 1;
+           cinfo.comp_info[1].h_samp_factor = 1;
+           cinfo.comp_info[1].v_samp_factor = 1;
+           cinfo.comp_info[2].h_samp_factor = 1;
+           cinfo.comp_info[2].v_samp_factor = 1;
+        }
+
+      jpeg_start_compress(&cinfo, TRUE);
+
+      while (cinfo.next_scanline < cinfo.image_height)
+        {
+           unsigned int i, j;
+
+           ptr = ((const int *)data) + cinfo.next_scanline * w;
+           /* convert scaline from ARGB to RGB packed */
+           for (j = 0, i = 0; i < w; i++)
+             {
+                buf[j++] = ((*ptr) >> 16) & 0xff;
+                buf[j++] = ((*ptr) >> 8) & 0xff;
+                buf[j++] = ((*ptr)) & 0xff;
+                ptr++;
+             }
+           jbuf = (JSAMPROW *)(&buf);
+           jpeg_write_scanlines(&cinfo, jbuf, 1);
+        }
+
+      jpeg_finish_compress(&cinfo);
+      jpeg_destroy_compress(&cinfo);
+
+      d1 = dst;
+      sz1 = sz;
+   }
+   {
+      const int *ptr;
+      void *dst = NULL;
+      size_t sz = 0;
+      struct _JPEG_error_mgr jerr;
+      JSAMPROW *jbuf;
+      struct jpeg_compress_struct cinfo;
+      unsigned char *buf;
+
+      buf = alloca(3 * w);
+
+      cinfo.err = jpeg_std_error(&(jerr.pub));
+      jerr.pub.error_exit = _JPEGFatalErrorHandler;
+      jerr.pub.emit_message = _JPEGErrorHandler2;
+      jerr.pub.output_message = _JPEGErrorHandler;
+      if (setjmp(jerr.setjmp_buffer))
+        {
+           free(d1);
+           return NULL;
+        }
+
+      jpeg_create_compress(&cinfo);
+      if (eet_jpeg_membuf_dst(&cinfo, &dst, &sz))
+        {
+           jpeg_destroy_compress(&cinfo);
+           free(d1);
+           return NULL;
+        }
+
+      cinfo.image_width = w;
+      cinfo.image_height = h;
+      cinfo.input_components = 1;
+      cinfo.in_color_space = JCS_GRAYSCALE;
+      jpeg_set_defaults(&cinfo);
+      jpeg_set_quality(&cinfo, quality, TRUE);
+      if (quality >= 90)
+        {
+           cinfo.comp_info[0].h_samp_factor = 1;
+           cinfo.comp_info[0].v_samp_factor = 1;
+           cinfo.comp_info[1].h_samp_factor = 1;
+           cinfo.comp_info[1].v_samp_factor = 1;
+           cinfo.comp_info[2].h_samp_factor = 1;
+           cinfo.comp_info[2].v_samp_factor = 1;
+        }
+
+      jpeg_start_compress(&cinfo, TRUE);
+
+      while (cinfo.next_scanline < cinfo.image_height)
+        {
+           unsigned int i, j;
+
+           ptr = ((const int *)data) + cinfo.next_scanline * w;
+           /* convert scaline from ARGB to RGB packed */
+           for (j = 0, i = 0; i < w; i++)
+             {
+                buf[j++] = ((*ptr) >> 24) & 0xff;
+                ptr++;
+             }
+           jbuf = (JSAMPROW *)(&buf);
+           jpeg_write_scanlines(&cinfo, jbuf, 1);
+        }
+
+      jpeg_finish_compress(&cinfo);
+      jpeg_destroy_compress(&cinfo);
+
+      d2 = dst;
+      sz2 = sz;
+   }
    d = malloc(12 + sz1 + sz2);
    if (!d)
      {
-       free(d1);
-       free(d2);
-       return NULL;
+        free(d1);
+        free(d2);
+        return NULL;
      }
+
    header = (int *)d;
    header[0] = 0xbeeff00d;
    header[1] = sz1;
    header[2] = sz2;
    if (_eet_image_words_bigendian)
      {
-       int i;
+        int i;
 
-       for (i = 0; i < 3; i++) SWAP32(header[i]);
+        for (i = 0; i < 3; i++) SWAP32(header[i]);
      }
-   memcpy(d + 12, d1, sz1);
+
+   memcpy(d + 12,       d1, sz1);
    memcpy(d + 12 + sz1, d2, sz2);
 
    free(d1);
    free(d2);
    *size = 12 + sz1 + sz2;
    return d;
-}
+} /* eet_data_image_jpeg_alpha_convert */
 
 EAPI int
-eet_data_image_write_cipher(Eet_File *ef, const char *name, const char *cipher_key,
-                           const void *data, unsigned int w, unsigned int h, int alpha,
-                           int comp, int quality, int lossy)
+eet_data_image_write_cipher(Eet_File    *ef,
+                            const char  *name,
+                            const char  *cipher_key,
+                            const void  *data,
+                            unsigned int w,
+                            unsigned int h,
+                            int          alpha,
+                            int          comp,
+                            int          quality,
+                            int          lossy)
 {
    void *d = NULL;
    int size = 0;
@@ -919,131 +1061,210 @@ eet_data_image_write_cipher(Eet_File *ef, const char *name, const char *cipher_k
    d = eet_data_image_encode(data, &size, w, h, alpha, comp, quality, lossy);
    if (d)
      {
-       int v;
+        int v;
 
-       v = eet_write_cipher(ef, name, d, size, 0, cipher_key);
-       free(d);
-       return v;
+        v = eet_write_cipher(ef, name, d, size, 0, cipher_key);
+        free(d);
+        return v;
      }
+
    return 0;
-}
+} /* eet_data_image_write_cipher */
 
 EAPI int
-eet_data_image_write(Eet_File *ef, const char *name,
-                    const void *data, unsigned int w, unsigned int h, int alpha,
-                    int comp, int quality, int lossy)
+eet_data_image_write(Eet_File    *ef,
+                     const char  *name,
+                     const void  *data,
+                     unsigned int w,
+                     unsigned int h,
+                     int          alpha,
+                     int          comp,
+                     int          quality,
+                     int          lossy)
 {
-   return eet_data_image_write_cipher(ef, name, NULL, data, w, h, alpha, comp, quality, lossy);
-}
-
+   return eet_data_image_write_cipher(ef,
+                                      name,
+                                      NULL,
+                                      data,
+                                      w,
+                                      h,
+                                      alpha,
+                                      comp,
+                                      quality,
+                                      lossy);
+} /* eet_data_image_write */
 
 EAPI void *
-eet_data_image_read_cipher(Eet_File *ef, const char *name, const char *cipher_key,
-                          unsigned int *w, unsigned int *h, int *alpha,
-                          int *comp, int *quality, int *lossy)
+eet_data_image_read_cipher(Eet_File     *ef,
+                           const char   *name,
+                           const char   *cipher_key,
+                           unsigned int *w,
+                           unsigned int *h,
+                           int          *alpha,
+                           int          *comp,
+                           int          *quality,
+                           int          *lossy)
 {
    unsigned int *d = NULL;
-   void                *data = NULL;
-   int          free_data = 0;
-   int          size;
+   void *data = NULL;
+   int free_data = 0;
+   int size;
 
    if (!cipher_key)
-     data = (void *)eet_read_direct(ef, name, &size);
+      data = (void *)eet_read_direct(ef, name, &size);
+
    if (!data)
      {
         data = eet_read_cipher(ef, name, &size, cipher_key);
-       free_data = 1;
-       if (!data) return NULL;
+        free_data = 1;
+        if (!data)
+           return NULL;
      }
 
    d = eet_data_image_decode(data, size, w, h, alpha, comp, quality, lossy);
 
    if (free_data)
-     free(data);
+      free(data);
 
    return d;
-}
+} /* eet_data_image_read_cipher */
 
 EAPI void *
-eet_data_image_read(Eet_File *ef, const char *name,
-                   unsigned int *w, unsigned int *h, int *alpha,
-                   int *comp, int *quality, int *lossy)
+eet_data_image_read(Eet_File     *ef,
+                    const char   *name,
+                    unsigned int *w,
+                    unsigned int *h,
+                    int          *alpha,
+                    int          *comp,
+                    int          *quality,
+                    int          *lossy)
 {
-   return eet_data_image_read_cipher(ef, name, NULL, w, h, alpha, comp, quality, lossy);
-}
+   return eet_data_image_read_cipher(ef, name, NULL, w, h, alpha,
+                                     comp, quality, lossy);
+} /* eet_data_image_read */
 
 EAPI int
-eet_data_image_read_to_surface_cipher(Eet_File *ef, const char *name, const char *cipher_key, unsigned int src_x, unsigned int src_y,
-                                     unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride,
-                                     int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_read_to_surface_cipher(Eet_File     *ef,
+                                      const char   *name,
+                                      const char   *cipher_key,
+                                      unsigned int  src_x,
+                                      unsigned int  src_y,
+                                      unsigned int *d,
+                                      unsigned int  w,
+                                      unsigned int  h,
+                                      unsigned int  row_stride,
+                                      int          *alpha,
+                                      int          *comp,
+                                      int          *quality,
+                                      int          *lossy)
 {
-   void                *data = NULL;
-   int          free_data = 0;
-   int          res = 1;
-   int          size;
+   void *data = NULL;
+   int free_data = 0;
+   int res = 1;
+   int size;
 
    if (!cipher_key)
-     data = (void *)eet_read_direct(ef, name, &size);
+      data = (void *)eet_read_direct(ef, name, &size);
+
    if (!data)
      {
-       data = eet_read_cipher(ef, name, &size, cipher_key);
-       free_data = 1;
-       if (!data) return 0;
+        data = eet_read_cipher(ef, name, &size, cipher_key);
+        free_data = 1;
+        if (!data)
+           return 0;
      }
 
-   res = eet_data_image_decode_to_surface(data, size, src_x, src_y, d, w, h, row_stride, alpha, comp, quality, lossy);
+   res = eet_data_image_decode_to_surface(data, size, src_x, src_y, d,
+                                          w, h, row_stride, alpha,
+                                          comp, quality, lossy);
 
    if (free_data)
-     free(data);
+      free(data);
 
    return res;
-}
+} /* eet_data_image_read_to_surface_cipher */
 
 EAPI int
-eet_data_image_read_to_surface(Eet_File *ef, const char *name, unsigned int src_x, unsigned int src_y,
-                              unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride,
-                              int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_read_to_surface(Eet_File     *ef,
+                               const char   *name,
+                               unsigned int  src_x,
+                               unsigned int  src_y,
+                               unsigned int *d,
+                               unsigned int  w,
+                               unsigned int  h,
+                               unsigned int  row_stride,
+                               int          *alpha,
+                               int          *comp,
+                               int          *quality,
+                               int          *lossy)
 {
-   return eet_data_image_read_to_surface_cipher(ef, name, NULL, src_x, src_y, d, w, h, row_stride, alpha, comp, quality, lossy);
-}
+   return eet_data_image_read_to_surface_cipher(ef, name, NULL,
+                                                src_x, src_y, d,
+                                                w, h, row_stride,
+                                                alpha, comp, quality,
+                                                lossy);
+} /* eet_data_image_read_to_surface */
 
 EAPI int
-eet_data_image_header_read_cipher(Eet_File *ef, const char *name, const char *cipher_key,
-                                 unsigned int *w, unsigned int *h, int *alpha,
-                                 int *comp, int *quality, int *lossy)
+eet_data_image_header_read_cipher(Eet_File     *ef,
+                                  const char   *name,
+                                  const char   *cipher_key,
+                                  unsigned int *w,
+                                  unsigned int *h,
+                                  int          *alpha,
+                                  int          *comp,
+                                  int          *quality,
+                                  int          *lossy)
 {
-   void        *data = NULL;
-   int size = 0;
-   int free_data = 0;
-   int d;
+   void *data = NULL;
+   int size = 0;
+   int free_data = 0;
+   int d;
 
    if (!cipher_key)
-     data = (void *)eet_read_direct(ef, name, &size);
+      data = (void *)eet_read_direct(ef, name, &size);
+
    if (!data)
      {
         data = eet_read_cipher(ef, name, &size, cipher_key);
-       free_data = 1;
-       if (!data) return 0;
+        free_data = 1;
+        if (!data)
+           return 0;
      }
 
-   d = eet_data_image_header_decode(data, size, w, h, alpha, comp, quality, lossy);
+   d = eet_data_image_header_decode(data, size, w, h, alpha,
+                                    comp, quality, lossy);
    if (free_data)
-     free(data);
+      free(data);
 
    return d;
-}
+} /* eet_data_image_header_read_cipher */
 
 EAPI int
-eet_data_image_header_read(Eet_File *ef, const char *name,
-                          unsigned int *w, unsigned int *h, int *alpha,
-                          int *comp, int *quality, int *lossy)
+eet_data_image_header_read(Eet_File     *ef,
+                           const char   *name,
+                           unsigned int *w,
+                           unsigned int *h,
+                           int          *alpha,
+                           int          *comp,
+                           int          *quality,
+                           int          *lossy)
 {
-   return eet_data_image_header_read_cipher(ef, name, NULL, w, h, alpha, comp, quality, lossy);
-}
-
+   return eet_data_image_header_read_cipher(ef, name, NULL,
+                                            w, h, alpha,
+                                            comp, quality, lossy);
+} /* eet_data_image_header_read */
 
 EAPI void *
-eet_data_image_encode_cipher(const void *data, const char *cipher_key, unsigned int w, unsigned int h, int alpha, int comp, int quality, int lossy, int *size_ret)
+eet_data_image_encode_cipher(const void  *data,
+                             const char  *cipher_key,
+                             unsigned int w,
+                             unsigned int h,
+                             int          alpha,
+                             int          comp,
+                             int          quality,
+                             int          lossy,
+                             int         *size_ret)
 {
    void *d = NULL;
    void *ciphered_d = NULL;
@@ -1052,45 +1273,70 @@ eet_data_image_encode_cipher(const void *data, const char *cipher_key, unsigned
 
    if (lossy == 0)
      {
-       if (comp > 0)
-         d = eet_data_image_lossless_compressed_convert(&size, data, w, h, alpha, comp);
-
-       /* eet_data_image_lossless_compressed_convert will refuse to compress something
-          if the result is bigger than the entry. */
-       if (comp <= 0 || d == NULL)
-         d = eet_data_image_lossless_convert(&size, data, w, h, alpha);
+        if (comp > 0)
+           d = eet_data_image_lossless_compressed_convert(&size, data,
+                                                          w, h, alpha, comp);
+
+        /* eet_data_image_lossless_compressed_convert will refuse to compress something
+           if the result is bigger than the entry. */
+        if (comp <= 0 || d == NULL)
+           d = eet_data_image_lossless_convert(&size, data, w, h, alpha);
      }
    else
      {
-       if (!alpha)
-         d = eet_data_image_jpeg_convert(&size, data, w, h, alpha, quality);
-       else
-         d = eet_data_image_jpeg_alpha_convert(&size, data, w, h, alpha, quality);
+        if (!alpha)
+           d = eet_data_image_jpeg_convert(&size, data, w, h, alpha, quality);
+        else
+           d = eet_data_image_jpeg_alpha_convert(&size, data,
+                                                 w, h, alpha, quality);
      }
+
    if (cipher_key)
      {
-       if(!eet_cipher(d, size, cipher_key, strlen(cipher_key), &ciphered_d, &ciphered_sz))
-        {
-          if (d) free(d);
-          d = ciphered_d;
-          size = ciphered_sz;
-        }
-       else
-        if (ciphered_d) free(ciphered_d);
+        if(!eet_cipher(d, size, cipher_key, strlen(cipher_key), &ciphered_d,
+                       &ciphered_sz))
+          {
+             if (d)
+                free(d);
+
+             d = ciphered_d;
+             size = ciphered_sz;
+          }
+        else
+        if (ciphered_d)
+           free(ciphered_d);
      }
 
-   if (size_ret) *size_ret = size;
+   if (size_ret)
+      *size_ret = size;
+
    return d;
-}
+} /* eet_data_image_encode_cipher */
 
 EAPI void *
-eet_data_image_encode(const void *data, int *size_ret, unsigned int w, unsigned int h, int alpha, int comp, int quality, int lossy)
+eet_data_image_encode(const void  *data,
+                      int         *size_ret,
+                      unsigned int w,
+                      unsigned int h,
+                      int          alpha,
+                      int          comp,
+                      int          quality,
+                      int          lossy)
 {
-   return eet_data_image_encode_cipher(data, NULL, w, h, alpha, comp, quality, lossy, size_ret);
-}
+   return eet_data_image_encode_cipher(data, NULL, w, h, alpha,
+                                       comp, quality, lossy, size_ret);
+} /* eet_data_image_encode */
 
 EAPI int
-eet_data_image_header_decode_cipher(const void *data, const char *cipher_key, int size, unsigned int *w, unsigned int *h, int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_header_decode_cipher(const void   *data,
+                                    const char   *cipher_key,
+                                    int           size,
+                                    unsigned int *w,
+                                    unsigned int *h,
+                                    int          *alpha,
+                                    int          *comp,
+                                    int          *quality,
+                                    int          *lossy)
 {
    int header[8];
    void *deciphered_d = NULL;
@@ -1098,215 +1344,298 @@ eet_data_image_header_decode_cipher(const void *data, const char *cipher_key, in
 
    if (cipher_key)
      {
-       if (!eet_decipher(data, size, cipher_key, strlen(cipher_key), &deciphered_d, &deciphered_sz))
-        {
-          data = deciphered_d;
-          size = deciphered_sz;
-        }
-       else
-        if (deciphered_d) free(deciphered_d);
+        if (!eet_decipher(data, size, cipher_key, strlen(cipher_key),
+                          &deciphered_d, &deciphered_sz))
+          {
+             data = deciphered_d;
+             size = deciphered_sz;
+          }
+        else
+        if (deciphered_d)
+           free(deciphered_d);
      }
 
    if (_eet_image_words_bigendian == -1)
      {
-       unsigned long int v;
+        unsigned long int v;
 
-       v = htonl(0x12345678);
-       if (v == 0x12345678) _eet_image_words_bigendian = 1;
-       else _eet_image_words_bigendian = 0;
+        v = htonl(0x12345678);
+        if (v == 0x12345678)
+           _eet_image_words_bigendian = 1;
+        else
+           _eet_image_words_bigendian = 0;
      }
 
-   if (size < 32) return 0;
+   if (size < 32)
+      return 0;
 
    memcpy(header, data, 32);
    if (_eet_image_words_bigendian)
      {
-       int i;
+        int i;
 
-       for (i = 0; i < 8; i++) SWAP32(header[i]);
+        for (i = 0; i < 8; i++) SWAP32(header[i]);
      }
+
    if ((unsigned)header[0] == 0xac1dfeed)
      {
-       int iw, ih, al, cp;
-
-       iw = header[1];
-       ih = header[2];
-       al = header[3];
-       cp = header[4];
-       if ((iw < 1) || (ih < 1) || (iw > 8192) || (ih > 8192)) return 0;
-       if ((cp == 0) && (size < ((iw * ih * 4) + 32))) return 0;
-       if (w) *w = iw;
-       if (h) *h = ih;
-       if (alpha) *alpha = al ? 1 : 0;
-       if (comp) *comp = cp;
-       if (lossy) *lossy = 0;
-       if (quality) *quality = 100;
-       return 1;
+        int iw, ih, al, cp;
+
+        iw = header[1];
+        ih = header[2];
+        al = header[3];
+        cp = header[4];
+        if ((iw < 1) || (ih < 1) || (iw > 8192) || (ih > 8192))
+           return 0;
+
+        if ((cp == 0) && (size < ((iw * ih * 4) + 32)))
+           return 0;
+
+        if (w)
+           *w = iw;
+
+        if (h)
+           *h = ih;
+
+        if (alpha)
+           *alpha = al ? 1 : 0;
+
+        if (comp)
+           *comp = cp;
+
+        if (lossy)
+           *lossy = 0;
+
+        if (quality)
+           *quality = 100;
+
+        return 1;
      }
    else if ((unsigned)header[0] == 0xbeeff00d)
      {
-       unsigned int iw = 0, ih = 0;
-       unsigned const char *dt;
-       int sz1;
-       int ok;
-
-       sz1 = header[1];
-/*     sz2 = header[2]; */
-       dt = data;
-       dt += 12;
-       ok = eet_data_image_jpeg_header_decode(dt, sz1, &iw, &ih);
-       if (ok)
-         {
-            if (w) *w = iw;
-            if (h) *h = ih;
-            if (alpha) *alpha = 1;
-            if (comp) *comp = 0;
-            if (lossy) *lossy = 1;
-            if (quality) *quality = 75;
-            return 1;
-         }
+        unsigned int iw = 0, ih = 0;
+        unsigned const char *dt;
+        int sz1;
+        int ok;
+
+        sz1 = header[1];
+/*  sz2 = header[2]; */
+        dt = data;
+        dt += 12;
+        ok = eet_data_image_jpeg_header_decode(dt, sz1, &iw, &ih);
+        if (ok)
+          {
+             if (w)
+                *w = iw;
+
+             if (h)
+                *h = ih;
+
+             if (alpha)
+                *alpha = 1;
+
+             if (comp)
+                *comp = 0;
+
+             if (lossy)
+                *lossy = 1;
+
+             if (quality)
+                *quality = 75;
+
+             return 1;
+          }
      }
    else
      {
-       unsigned int iw = 0, ih = 0;
-       int ok;
-
-       ok = eet_data_image_jpeg_header_decode(data, size, &iw, &ih);
-       if (ok)
-         {
-            if (w) *w = iw;
-            if (h) *h = ih;
-            if (alpha) *alpha = 0;
-            if (comp) *comp = 0;
-            if (lossy) *lossy = 1;
-            if (quality) *quality = 75;
-            return 1;
-         }
+        unsigned int iw = 0, ih = 0;
+        int ok;
+
+        ok = eet_data_image_jpeg_header_decode(data, size, &iw, &ih);
+        if (ok)
+          {
+             if (w)
+                *w = iw;
+
+             if (h)
+                *h = ih;
+
+             if (alpha)
+                *alpha = 0;
+
+             if (comp)
+                *comp = 0;
+
+             if (lossy)
+                *lossy = 1;
+
+             if (quality)
+                *quality = 75;
+
+             return 1;
+          }
      }
+
    return 0;
-}
+} /* eet_data_image_header_decode_cipher */
 
 EAPI int
-eet_data_image_header_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_header_decode(const void   *data,
+                             int           size,
+                             unsigned int *w,
+                             unsigned int *h,
+                             int          *alpha,
+                             int          *comp,
+                             int          *quality,
+                             int          *lossy)
 {
-   return eet_data_image_header_decode_cipher(data, NULL, size, w, h, alpha, comp, quality, lossy);
-}
+   return eet_data_image_header_decode_cipher(data,
+                                              NULL,
+                                              size,
+                                              w,
+                                              h,
+                                              alpha,
+                                              comp,
+                                              quality,
+                                              lossy);
+} /* eet_data_image_header_decode */
 
 static void
-_eet_data_image_copy_buffer(const unsigned int *src, unsigned int src_x, unsigned int src_y, unsigned int src_w,
-                           unsigned int *dst, unsigned int w, unsigned int h, unsigned int row_stride)
+_eet_data_image_copy_buffer(const unsigned int *src,
+                            unsigned int        src_x,
+                            unsigned int        src_y,
+                            unsigned int        src_w,
+                            unsigned int       *dst,
+                            unsigned int        w,
+                            unsigned int        h,
+                            unsigned int        row_stride)
 {
    src += src_x + src_y * src_w;
 
    if (row_stride == src_w * 4 && w == src_w)
-     {
-       memcpy(dst, src, row_stride * h);
-     }
+      memcpy(dst, src, row_stride * h);
    else
      {
-       unsigned int *over = dst;
-       unsigned int y;
+        unsigned int *over = dst;
+        unsigned int y;
 
-       for (y = 0; y < h; ++y, src += src_w, over += row_stride)
-         memcpy(over, src, w * 4);
+        for (y = 0; y < h; ++y, src += src_w, over += row_stride)
+           memcpy(over, src, w * 4);
      }
-}
-
+} /* _eet_data_image_copy_buffer */
 
 static int
-_eet_data_image_decode_inside(const void *data, int size, unsigned int src_x, unsigned int src_y,
-                             unsigned int src_w, unsigned int src_h,
-                             unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride,
-                             int alpha, int comp, int quality, int lossy)
+_eet_data_image_decode_inside(const void   *data,
+                              int           size,
+                              unsigned int  src_x,
+                              unsigned int  src_y,
+                              unsigned int  src_w,
+                              unsigned int  src_h,
+                              unsigned int *d,
+                              unsigned int  w,
+                              unsigned int  h,
+                              unsigned int  row_stride,
+                              int           alpha,
+                              int           comp,
+                              int           quality,
+                              int           lossy)
 {
    if (lossy == 0 && quality == 100)
      {
-       unsigned int *body;
-
-       body = ((unsigned int *)data) + 8;
-       if (!comp)
-         {
-            _eet_data_image_copy_buffer(body, src_x, src_y, src_w, d, w, h, row_stride);
-         }
-       else
-         {
-            if (src_h == h && src_w == w && row_stride == src_w * 4)
-              {
-                 uLongf dlen;
-
-                 dlen = w * h * 4;
-                 uncompress((Bytef *)d, &dlen, (Bytef *)body,
-                            (uLongf)(size - 32));
-              }
-            else
-              {
-                 Bytef *dtmp;
-                 uLongf dlen = src_w * src_h * 4;
-
-                 /* FIXME: This could create a huge alloc. So compressed data and tile could not always work. */
-                 dtmp = malloc(dlen);
-                 if (!dtmp) return 0;
-
-                 uncompress(dtmp, &dlen, (Bytef *)body, (uLongf)(size - 32));
-
-                 _eet_data_image_copy_buffer((unsigned int *) dtmp, src_x, src_y, src_w, d, w, h, row_stride);
-
-                 free(dtmp);
-              }
-         }
-
-       /* Fix swapiness. */
-       if (_eet_image_words_bigendian)
-         {
-            unsigned int x;
-
-            for (x = 0; x < (w * h); x++) SWAP32(d[x]);
-         }
+        unsigned int *body;
+
+        body = ((unsigned int *)data) + 8;
+        if (!comp)
+           _eet_data_image_copy_buffer(body, src_x, src_y, src_w, d,
+                                       w, h, row_stride);
+        else
+          {
+             if (src_h == h && src_w == w && row_stride == src_w * 4)
+               {
+                  uLongf dlen;
+
+                  dlen = w * h * 4;
+                  uncompress((Bytef *)d, &dlen, (Bytef *)body,
+                             (uLongf)(size - 32));
+               }
+             else
+               {
+                  Bytef *dtmp;
+                  uLongf dlen = src_w * src_h * 4;
+
+                  /* FIXME: This could create a huge alloc. So compressed data and tile could not always work. */
+                  dtmp = malloc(dlen);
+                  if (!dtmp)
+                     return 0;
+
+                  uncompress(dtmp, &dlen, (Bytef *)body, (uLongf)(size - 32));
+
+                  _eet_data_image_copy_buffer((unsigned int *)dtmp,
+                                              src_x, src_y, src_w, d,
+                                              w, h, row_stride);
+
+                  free(dtmp);
+               }
+          }
+
+        /* Fix swapiness. */
+        if (_eet_image_words_bigendian)
+          {
+             unsigned int x;
+
+             for (x = 0; x < (w * h); x++) SWAP32(d[x]);
+          }
      }
    else if (comp == 0 && lossy == 1)
      {
-       if (alpha)
-         {
-            unsigned const char *dt;
-            int header[8];
-            int sz1, sz2;
-
-            memcpy(header, data, 32);
-            if (_eet_image_words_bigendian)
-              {
-                 int i;
-
-                 for (i = 0; i < 8; i++) SWAP32(header[i]);
-              }
-
-            sz1 = header[1];
-            sz2 = header[2];
-            dt = data;
-            dt += 12;
-
-            if (eet_data_image_jpeg_rgb_decode(dt, sz1, src_x, src_y, d, w, h, row_stride))
-              {
-                 dt += sz1;
-                 if (!eet_data_image_jpeg_alpha_decode(dt, sz2, src_x, src_y, d, w, h, row_stride))
-                   return 0;
-              }
-         }
-       else
-         {
-            if (!eet_data_image_jpeg_rgb_decode(data, size, src_x, src_y, d, w, h, row_stride))
-              return 0;
-         }
+        if (alpha)
+          {
+             unsigned const char *dt;
+             int header[8];
+             int sz1, sz2;
+
+             memcpy(header, data, 32);
+             if (_eet_image_words_bigendian)
+               {
+                  int i;
+
+                  for (i = 0; i < 8; i++) SWAP32(header[i]);
+               }
+
+             sz1 = header[1];
+             sz2 = header[2];
+             dt = data;
+             dt += 12;
+
+             if (eet_data_image_jpeg_rgb_decode(dt, sz1, src_x, src_y, d, w, h,
+                                                row_stride))
+               {
+                  dt += sz1;
+                  if (!eet_data_image_jpeg_alpha_decode(dt, sz2, src_x, src_y,
+                                                        d, w, h, row_stride))
+                     return 0;
+               }
+          }
+        else if (!eet_data_image_jpeg_rgb_decode(data, size, src_x, src_y, d, w,
+                                                 h, row_stride))
+           return 0;
      }
    else
-     {
-       abort();
-     }
+      abort();
 
    return 1;
-}
+} /* _eet_data_image_decode_inside */
 
 EAPI void *
-eet_data_image_decode_cipher(const void *data, const char *cipher_key, int size, unsigned int *w, unsigned int *h, int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_decode_cipher(const void   *data,
+                             const char   *cipher_key,
+                             int           size,
+                             unsigned int *w,
+                             unsigned int *h,
+                             int          *alpha,
+                             int          *comp,
+                             int          *quality,
+                             int          *lossy)
 {
    unsigned int *d = NULL;
    unsigned int iw, ih;
@@ -1316,48 +1645,82 @@ eet_data_image_decode_cipher(const void *data, const char *cipher_key, int size,
 
    if (cipher_key)
      {
-       if (!eet_decipher(data, size, cipher_key, strlen(cipher_key), &deciphered_d, &deciphered_sz))
-        {
-          data = deciphered_d;
-          size = deciphered_sz;
-        }
-       else
-        if (deciphered_d) free(deciphered_d);
+        if (!eet_decipher(data, size, cipher_key, strlen(cipher_key),
+                          &deciphered_d, &deciphered_sz))
+          {
+             data = deciphered_d;
+             size = deciphered_sz;
+          }
+        else
+        if (deciphered_d)
+           free(deciphered_d);
      }
 
    /* All check are done during header decode, this simplify the code a lot. */
-   if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress, &iquality, &ilossy))
-     return NULL;
+   if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress,
+                                     &iquality, &ilossy))
+      return NULL;
 
    d = malloc(iw * ih * 4);
-   if (!d) return NULL;
+   if (!d)
+      return NULL;
 
-   if (!_eet_data_image_decode_inside(data, size, 0, 0, iw, ih, d, iw, ih, iw * 4, ialpha, icompress, iquality, ilossy))
+   if (!_eet_data_image_decode_inside(data, size, 0, 0, iw, ih, d, iw, ih, iw *
+                                      4, ialpha, icompress, iquality, ilossy))
      {
-       if (d) free(d);
-       return NULL;
+        free(d);
+        return NULL;
      }
 
-   if (w) *w = iw;
-   if (h) *h = ih;
-   if (alpha) *alpha = ialpha;
-   if (comp) *comp = icompress;
-   if (quality) *quality = iquality;
-   if (lossy) *lossy = ilossy;
+   if (w)
+      *w = iw;
+
+   if (h)
+      *h = ih;
+
+   if (alpha)
+      *alpha = ialpha;
+
+   if (comp)
+      *comp = icompress;
+
+   if (quality)
+      *quality = iquality;
+
+   if (lossy)
+      *lossy = ilossy;
 
    return d;
-}
+} /* eet_data_image_decode_cipher */
 
 EAPI void *
-eet_data_image_decode(const void *data, int size, unsigned int *w, unsigned int *h, int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_decode(const void   *data,
+                      int           size,
+                      unsigned int *w,
+                      unsigned int *h,
+                      int          *alpha,
+                      int          *comp,
+                      int          *quality,
+                      int          *lossy)
 {
-   return eet_data_image_decode_cipher(data, NULL, size, w, h, alpha, comp, quality, lossy);
-}
+   return eet_data_image_decode_cipher(data, NULL, size, w, h,
+                                       alpha, comp, quality, lossy);
+} /* eet_data_image_decode */
 
 EAPI int
-eet_data_image_decode_to_surface_cipher(const void *data, const char *cipher_key, int size, unsigned int src_x, unsigned int src_y,
-                                       unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride,
-                                       int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_decode_to_surface_cipher(const void   *data,
+                                        const char   *cipher_key,
+                                        int           size,
+                                        unsigned int  src_x,
+                                        unsigned int  src_y,
+                                        unsigned int *d,
+                                        unsigned int  w,
+                                        unsigned int  h,
+                                        unsigned int  row_stride,
+                                        int          *alpha,
+                                        int          *comp,
+                                        int          *quality,
+                                        int          *lossy)
 {
    unsigned int iw, ih;
    int ialpha, icompress, iquality, ilossy;
@@ -1366,38 +1729,69 @@ eet_data_image_decode_to_surface_cipher(const void *data, const char *cipher_key
 
    if (cipher_key)
      {
-       if (!eet_decipher(data, size, cipher_key, strlen(cipher_key), &deciphered_d, &deciphered_sz))
-        {
-          data = deciphered_d;
-          size = deciphered_sz;
-        }
-       else
-        if (deciphered_d) free(deciphered_d);
+        if (!eet_decipher(data, size, cipher_key, strlen(cipher_key),
+                          &deciphered_d, &deciphered_sz))
+          {
+             data = deciphered_d;
+             size = deciphered_sz;
+          }
+        else
+        if (deciphered_d)
+           free(deciphered_d);
      }
 
    /* All check are done during header decode, this simplify the code a lot. */
-   if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress, &iquality, &ilossy))
-     return 0;
+   if (!eet_data_image_header_decode(data, size, &iw, &ih, &ialpha, &icompress,
+                                     &iquality, &ilossy))
+      return 0;
 
-   if (!d) return 0;
-   if (w * 4 > row_stride) return 0;
-   if (w > iw || h > ih) return 0;
+   if (!d)
+      return 0;
 
-   if (!_eet_data_image_decode_inside(data, size, src_x, src_y, iw, ih, d, w, h, row_stride, ialpha, icompress, iquality, ilossy))
-     return 0;
+   if (w * 4 > row_stride)
+      return 0;
 
-   if (alpha) *alpha = ialpha;
-   if (comp) *comp = icompress;
-   if (quality) *quality = iquality;
-   if (lossy) *lossy = ilossy;
+   if (w > iw || h > ih)
+      return 0;
+
+   if (!_eet_data_image_decode_inside(data, size, src_x, src_y, iw, ih, d, w, h,
+                                      row_stride, ialpha, icompress, iquality,
+                                      ilossy))
+      return 0;
+
+   if (alpha)
+      *alpha = ialpha;
+
+   if (comp)
+      *comp = icompress;
+
+   if (quality)
+      *quality = iquality;
+
+   if (lossy)
+      *lossy = ilossy;
 
    return 1;
-}
+} /* eet_data_image_decode_to_surface_cipher */
 
 EAPI int
-eet_data_image_decode_to_surface(const void *data, int size, unsigned int src_x, unsigned int src_y,
-                                unsigned int *d, unsigned int w, unsigned int h, unsigned int row_stride,
-                                int *alpha, int *comp, int *quality, int *lossy)
+eet_data_image_decode_to_surface(const void   *data,
+                                 int           size,
+                                 unsigned int  src_x,
+                                 unsigned int  src_y,
+                                 unsigned int *d,
+                                 unsigned int  w,
+                                 unsigned int  h,
+                                 unsigned int  row_stride,
+                                 int          *alpha,
+                                 int          *comp,
+                                 int          *quality,
+                                 int          *lossy)
 {
-   return eet_data_image_decode_to_surface_cipher(data, NULL, size, src_x, src_y, d, w, h, row_stride, alpha, comp, quality, lossy);
-}
+   return eet_data_image_decode_to_surface_cipher(data, NULL, size,
+                                                  src_x, src_y,  d,
+                                                  w,  h, row_stride,
+                                                  alpha, comp, quality,
+                                                  lossy);
+} /* eet_data_image_decode_to_surface */
+
index 0d4b619..c1ca7fa 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #ifdef HAVE_ALLOCA_H
 # include <alloca.h>
 #elif defined _MSC_VER
 # include <malloc.h>
 # define alloca _alloca
-#else
+#else /* ifdef HAVE_ALLOCA_H */
 # include <stddef.h>
 # ifdef  __cplusplus
 extern "C"
-# endif
-void *alloca (size_t);
-#endif
+# endif /* ifdef  __cplusplus */
+void *    alloca (size_t);
+#endif /* ifdef HAVE_ALLOCA_H */
 
 #ifdef _WIN32
 # include <winsock2.h>
-#endif
+#endif /* ifdef _WIN32 */
 
 #include <stdio.h>
 #include <errno.h>
@@ -40,29 +36,32 @@ void *alloca (size_t);
 
 #ifndef _MSC_VER
 # include <unistd.h>
-#endif
+#endif /* ifndef _MSC_VER */
 
 #ifdef HAVE_NETINET_IN_H
 # include <netinet/in.h>
-#endif
+#endif /* ifdef HAVE_NETINET_IN_H */
 
 #ifdef HAVE_EVIL
 # include <Evil.h>
-#endif
+#endif /* ifdef HAVE_EVIL */
 
 #ifdef HAVE_GNUTLS
 # include <gnutls/gnutls.h>
 # include <gcrypt.h>
-#endif
+#endif /* ifdef HAVE_GNUTLS */
 
 #ifdef HAVE_OPENSSL
 # include <openssl/err.h>
 # include <openssl/evp.h>
-#endif
+#endif /* ifdef HAVE_OPENSSL */
 
-#ifdef EFL_HAVE_PTHREAD
+#ifdef EFL_HAVE_POSIX_THREADS
 # include <pthread.h>
-#endif
+# ifdef HAVE_GNUTLS
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+# endif /* ifdef HAVE_GNUTLS */
+#endif /* ifdef EFL_HAVE_POSIX_THREADS */
 
 #include <Eina.h>
 
@@ -74,47 +73,51 @@ EAPI Eet_Version *eet_version = &_version;
 
 #ifdef HAVE_REALPATH
 # undef HAVE_REALPATH
-#endif
+#endif /* ifdef HAVE_REALPATH */
 
-#define EET_MAGIC_FILE                  0x1ee7ff00
-#define EET_MAGIC_FILE_HEADER           0x1ee7ff01
+#define EET_MAGIC_FILE        0x1ee7ff00
+#define EET_MAGIC_FILE_HEADER 0x1ee7ff01
 
-#define EET_MAGIC_FILE2                 0x1ee70f42
+#define EET_MAGIC_FILE2       0x1ee70f42
 
-typedef struct _Eet_File_Header         Eet_File_Header;
-typedef struct _Eet_File_Node           Eet_File_Node;
-typedef struct _Eet_File_Directory      Eet_File_Directory;
+typedef struct _Eet_File_Header      Eet_File_Header;
+typedef struct _Eet_File_Node        Eet_File_Node;
+typedef struct _Eet_File_Directory   Eet_File_Directory;
 
 struct _Eet_File
 {
-   char                 *path;
-   FILE                        *readfp;
-   Eet_File_Header      *header;
-   Eet_Dictionary       *ed;
-   Eet_Key             *key;
-   const unsigned char  *data;
-   const void           *x509_der;
-   const void           *signature;
-   void                 *sha1;
-
-   Eet_File_Mode         mode;
-
-   int                   magic;
-   int                   references;
-
-   int                   data_size;
-   int                   x509_length;
-   unsigned int          signature_length;
-   int                   sha1_length;
-
-   time_t                mtime;
-
-#ifdef EFL_HAVE_PTHREAD
-   pthread_mutex_t      file_lock;
-#endif
-
-   unsigned char         writes_pending : 1;
-   unsigned char         delete_me_now : 1;
+   char                *path;
+   FILE                *readfp;
+   Eet_File_Header     *header;
+   Eet_Dictionary      *ed;
+   Eet_Key             *key;
+   const unsigned char *data;
+   const void          *x509_der;
+   const void          *signature;
+   void                *sha1;
+
+   Eet_File_Mode        mode;
+
+   int                  magic;
+   int                  references;
+
+   int                  data_size;
+   int                  x509_length;
+   unsigned int         signature_length;
+   int                  sha1_length;
+
+   time_t               mtime;
+
+#ifdef EFL_HAVE_THREADS
+# ifdef EFL_HAVE_POSIX_THREADS
+   pthread_mutex_t      file_lock;
+# else /* ifdef EFL_HAVE_POSIX_THREADS */
+   HANDLE               file_lock;
+# endif /* ifdef EFL_HAVE_POSIX_THREADS */
+#endif /* ifdef EFL_HAVE_THREADS */
+
+   unsigned char        writes_pending : 1;
+   unsigned char        delete_me_now : 1;
 };
 
 struct _Eet_File_Header
@@ -131,21 +134,22 @@ struct _Eet_File_Directory
 
 struct _Eet_File_Node
 {
-   char                 *name;
-   void                 *data;
-   Eet_File_Node        *next; /* FIXME: make buckets linked lists */
-
-   int                   offset;
-   int                   dictionary_offset;
-   int                   name_offset;
-
-   int                   name_size;
-   int                   size;
-   int                   data_size;
-
-   unsigned char         free_name : 1;
-   unsigned char         compression : 1;
-   unsigned char         ciphered : 1;
+   char          *name;
+   void          *data;
+   Eet_File_Node *next;  /* FIXME: make buckets linked lists */
+
+   int            offset;
+   int            dictionary_offset;
+   int            name_offset;
+
+   int            name_size;
+   int            size;
+   int            data_size;
+
+   unsigned char  free_name : 1;
+   unsigned char  compression : 1;
+   unsigned char  ciphered : 1;
+   unsigned char  alias : 1;
 };
 
 #if 0
@@ -157,15 +161,15 @@ int num_directory_entries; /* number of directory entries to follow */
 int bytes_directory_entries; /* bytes of directory entries to follow */
 struct
 {
-   int offset; /* bytes offset into file for data chunk */
-   int flags; /* flags - for now 0 = uncompressed and clear, 1 = compressed and clear, 2 = uncompressed and ciphered, 3 = compressed and ciphered */
-   int size; /* size of the data chunk */
-   int data_size; /* size of the (uncompressed) data chunk */
-   int name_size; /* length in bytes of the name field */
+   int  offset; /* bytes offset into file for data chunk */
+   int  flags; /* flags - for now 0 = uncompressed and clear, 1 = compressed and clear, 2 = uncompressed and ciphered, 3 = compressed and ciphered */
+   int  size; /* size of the data chunk */
+   int  data_size; /* size of the (uncompressed) data chunk */
+   int  name_size; /* length in bytes of the name field */
    char name[name_size]; /* name string (variable length) and \0 terminated */
 } directory[num_directory_entries];
 /* and now startes the data stream... */
-#endif
+#endif /* if 0 */
 
 #if 0
 /* Version 3 */
@@ -176,20 +180,24 @@ int num_directory_entries; /* number of directory entries to follow */
 int num_dictionary_entries; /* number of dictionary entries to follow */
 struct
 {
-  int data_offset; /* bytes offset into file for data chunk */
-  int size; /* size of the data chunk */
-  int data_size; /* size of the (uncompressed) data chunk */
-  int name_offset; /* bytes offset into file for name string */
-  int name_size; /* length in bytes of the name field */
-  int flags; /* flags - for now 0 = uncompressed, 1 = compressed */
+   int data_offset; /* bytes offset into file for data chunk */
+   int size; /* size of the data chunk */
+   int data_size; /* size of the (uncompressed) data chunk */
+   int name_offset; /* bytes offset into file for name string */
+   int name_size; /* length in bytes of the name field */
+   int flags; /* bit flags - for now:
+                 bit 0 => compresion on/off
+                 bit 1 => ciphered on/off
+                 bit 2 => alias
+               */
 } directory[num_directory_entries];
 struct
 {
-  int hash;
-  int offset;
-  int size;
-  int prev;
-  int next;
+   int hash;
+   int offset;
+   int size;
+   int prev;
+   int next;
 } dictionary[num_dictionary_entries];
 /* now start the string stream. */
 /* and right after them the data stream. */
@@ -198,61 +206,92 @@ int signature_length; /* Signature length. */
 int x509_length; /* Public certificate that signed the file. */
 char signature[signature_length]; /* The signature. */
 char x509[x509_length]; /* The public certificate. */
-#endif
+#endif /* if 0 */
 
-#define EET_FILE2_HEADER_COUNT                  3
-#define EET_FILE2_DIRECTORY_ENTRY_COUNT         6
-#define EET_FILE2_DICTIONARY_ENTRY_COUNT        5
+#define EET_FILE2_HEADER_COUNT           3
+#define EET_FILE2_DIRECTORY_ENTRY_COUNT  6
+#define EET_FILE2_DICTIONARY_ENTRY_COUNT 5
 
-#define EET_FILE2_HEADER_SIZE                   (sizeof(int) * EET_FILE2_HEADER_COUNT)
-#define EET_FILE2_DIRECTORY_ENTRY_SIZE          (sizeof(int) * EET_FILE2_DIRECTORY_ENTRY_COUNT)
-#define EET_FILE2_DICTIONARY_ENTRY_SIZE         (sizeof(int) * EET_FILE2_DICTIONARY_ENTRY_COUNT)
+#define EET_FILE2_HEADER_SIZE            (sizeof(int) *\
+                                          EET_FILE2_HEADER_COUNT)
+#define EET_FILE2_DIRECTORY_ENTRY_SIZE   (sizeof(int) *\
+                                          EET_FILE2_DIRECTORY_ENTRY_COUNT)
+#define EET_FILE2_DICTIONARY_ENTRY_SIZE  (sizeof(int) *\
+                                          EET_FILE2_DICTIONARY_ENTRY_COUNT)
 
 /* prototypes of internal calls */
-static Eet_File                *eet_cache_find(const char *path, Eet_File **cache, int cache_num);
-static void            eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc);
-static void            eet_cache_del(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc);
-static int             eet_string_match(const char *s1, const char *s2);
+static Eet_File *         eet_cache_find(const char *path,
+                                         Eet_File  **cache,
+                                         int         cache_num);
+static void               eet_cache_add(Eet_File   *ef,
+                                        Eet_File ***cache,
+                                        int        *cache_num,
+                                        int        *cache_alloc);
+static void               eet_cache_del(Eet_File   *ef,
+                                        Eet_File ***cache,
+                                        int        *cache_num,
+                                        int        *cache_alloc);
+static int                eet_string_match(const char *s1, const char *s2);
 #if 0 /* Unused */
-static Eet_Error       eet_flush(Eet_File *ef);
-#endif
-static Eet_Error       eet_flush2(Eet_File *ef);
-static Eet_File_Node   *find_node_by_name(Eet_File *ef, const char *name);
-static int             read_data_from_disk(Eet_File *ef, Eet_File_Node *efn, void *buf, int len);
+static Eet_Error          eet_flush(Eet_File *ef);
+#endif /* if 0 */
+static Eet_Error          eet_flush2(Eet_File *ef);
+static Eet_File_Node *    find_node_by_name(Eet_File *ef, const char *name);
+static int                read_data_from_disk(Eet_File      *ef,
+                                              Eet_File_Node *efn,
+                                              void          *buf,
+                                              int            len);
+
+static Eet_Error          eet_internal_close(Eet_File *ef, Eina_Bool locked);
 
-static Eet_Error        eet_internal_close(Eet_File *ef, Eina_Bool locked);
+#ifdef EFL_HAVE_THREADS
+
+# ifdef EFL_HAVE_POSIX_THREADS
 
-#ifdef EFL_HAVE_PTHREAD
 static pthread_mutex_t eet_cache_lock = PTHREAD_MUTEX_INITIALIZER;
 
-#define LOCK_CACHE pthread_mutex_lock(&eet_cache_lock);
-#define UNLOCK_CACHE pthread_mutex_unlock(&eet_cache_lock);
+#  define LOCK_CACHE   pthread_mutex_lock(&eet_cache_lock)
+#  define UNLOCK_CACHE pthread_mutex_unlock(&eet_cache_lock)
+
+#  define INIT_FILE(File)    pthread_mutex_init(&File->file_lock, NULL)
+#  define LOCK_FILE(File)    pthread_mutex_lock(&File->file_lock)
+#  define UNLOCK_FILE(File)  pthread_mutex_unlock(&File->file_lock)
+#  define DESTROY_FILE(File) pthread_mutex_destroy(&File->file_lock)
 
-#define INIT_FILE(File) pthread_mutex_init(&File->file_lock, NULL);
-#define LOCK_FILE(File) pthread_mutex_lock(&File->file_lock);
-#define UNLOCK_FILE(File) pthread_mutex_unlock(&File->file_lock);
-#define DESTROY_FILE(File) pthread_mutex_destroy(&File->file_lock);
+# else /* EFL_HAVE_WIN32_THREADS */
 
-#else
+static HANDLE eet_cache_lock = NULL;
 
-#define LOCK_CACHE ;
-#define UNLOCK_CACHE ;
+#  define LOCK_CACHE   WaitForSingleObject(eet_cache_lock, INFINITE)
+#  define UNLOCK_CACHE ReleaseMutex(eet_cache_lock)
 
-#define INIT_FILE(File) ;
-#define LOCK_FILE(File) ;
-#define UNLOCK_FILE(File) ;
-#define DESTROY_FILE(File) ;
+#  define INIT_FILE(File)    File->file_lock = CreateMutex(NULL, FALSE, NULL)
+#  define LOCK_FILE(File)    WaitForSingleObject(File->file_lock, INFINITE)
+#  define UNLOCK_FILE(File)  ReleaseMutex(File->file_lock)
+#  define DESTROY_FILE(File) CloseHandle(File->file_lock)
 
-#endif
+# endif /* EFL_HAVE_WIN32_THREADS */
+
+#else /* ifdef EFL_HAVE_THREADS */
+
+# define LOCK_CACHE   do {} while (0)
+# define UNLOCK_CACHE do {} while (0)
+
+# define INIT_FILE(File)    do {} while (0)
+# define LOCK_FILE(File)    do {} while (0)
+# define UNLOCK_FILE(File)  do {} while (0)
+# define DESTROY_FILE(File) do {} while (0)
+
+#endif /* EFL_HAVE_THREADS */
 
 /* cache. i don't expect this to ever be large, so arrays will do */
-static int        eet_writers_num     = 0;
-static int        eet_writers_alloc   = 0;
-static Eet_File **eet_writers         = NULL;
-static int        eet_readers_num     = 0;
-static int        eet_readers_alloc   = 0;
-static Eet_File **eet_readers         = NULL;
-static int        eet_init_count       = 0;
+static int eet_writers_num = 0;
+static int eet_writers_alloc = 0;
+static Eet_File **eet_writers = NULL;
+static int eet_readers_num = 0;
+static int eet_readers_alloc = 0;
+static Eet_File **eet_readers = NULL;
+static int eet_init_count = 0;
 
 /* log domain variable */
 int _eet_log_dom_global = -1;
@@ -261,83 +300,92 @@ int _eet_log_dom_global = -1;
 static inline int
 eet_check_pointer(const Eet_File *ef)
 {
-  if ((!ef) || (ef->magic != EET_MAGIC_FILE))
-    return 1;
-  return 0;
-}
+   if ((!ef) || (ef->magic != EET_MAGIC_FILE))
+      return 1;
+
+   return 0;
+} /* eet_check_pointer */
 
 static inline int
 eet_check_header(const Eet_File *ef)
 {
    if (!ef->header)
-     return 1;
+      return 1;
+
    if (!ef->header->directory)
-     return 1;
+      return 1;
+
    return 0;
-}
+} /* eet_check_header */
 
 static inline int
-eet_test_close(int test, Eet_File *ef)
+eet_test_close(int       test,
+               Eet_File *ef)
 {
    if (test)
      {
-       ef->delete_me_now = 1;
+        ef->delete_me_now = 1;
         eet_internal_close(ef, EINA_TRUE);
      }
+
    return test;
-}
+} /* eet_test_close */
 
 /* find an eet file in the currently in use cache */
 static Eet_File *
-eet_cache_find(const char *path, Eet_File **cache, int cache_num)
+eet_cache_find(const char *path,
+               Eet_File  **cache,
+               int         cache_num)
 {
    int i;
 
    /* walk list */
    for (i = 0; i < cache_num; i++)
      {
-       /* if matches real path - return it */
-       if (eet_string_match(cache[i]->path, path))
-         {
-            if (!cache[i]->delete_me_now)
-              return cache[i];
-         }
+        /* if matches real path - return it */
+        if (eet_string_match(cache[i]->path, path))
+           if (!cache[i]->delete_me_now)
+              return cache[i];
+
      }
 
    /* not found */
    return NULL;
-}
+} /* eet_cache_find */
 
 /* add to end of cache */
 /* this should only be called when the cache lock is already held */
 static void
-eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
+eet_cache_add(Eet_File   *ef,
+              Eet_File ***cache,
+              int        *cache_num,
+              int        *cache_alloc)
 {
-   Eet_File    **new_cache;
-   int         new_cache_num;
-   int         new_cache_alloc;
+   Eet_File **new_cache;
+   int new_cache_num;
+   int new_cache_alloc;
 
    new_cache_num = *cache_num;
    if (new_cache_num >= 64) /* avoid fd overruns - limit to 128 (most recent) in the cache */
      {
-       Eet_File        *del_ef = NULL;
-       int             i;
-
-       new_cache = *cache;
-       for (i = 0; i < new_cache_num; i++)
-         {
-            if (new_cache[i]->references == 0)
-              {
-                 del_ef = new_cache[i];
-                 break;
-              }
-         }
-
-       if (del_ef)
-         {
-            del_ef->delete_me_now = 1;
+        Eet_File *del_ef = NULL;
+        int i;
+
+        new_cache = *cache;
+        for (i = 0; i < new_cache_num; i++)
+          {
+             if (new_cache[i]->references == 0)
+               {
+                  del_ef = new_cache[i];
+                  break;
+               }
+          }
+
+        if (del_ef)
+          {
+             del_ef->delete_me_now = 1;
              eet_internal_close(del_ef, EINA_TRUE);
-         }
+          }
      }
 
    new_cache = *cache;
@@ -346,24 +394,28 @@ eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
    new_cache_num++;
    if (new_cache_num > new_cache_alloc)
      {
-       new_cache_alloc += 16;
-       new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
-       if (!new_cache)
-         {
-            CRIT("BAD ERROR! Eet realloc of cache list failed. Abort");
-            abort();
-         }
+        new_cache_alloc += 16;
+        new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
+        if (!new_cache)
+          {
+             CRIT("BAD ERROR! Eet realloc of cache list failed. Abort");
+             abort();
+          }
      }
+
    new_cache[new_cache_num - 1] = ef;
    *cache = new_cache;
    *cache_num = new_cache_num;
    *cache_alloc = new_cache_alloc;
-}
+} /* eet_cache_add */
 
 /* delete from cache */
 /* this should only be called when the cache lock is already held */
 static void
-eet_cache_del(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
+eet_cache_del(Eet_File   *ef,
+              Eet_File ***cache,
+              int        *cache_num,
+              int        *cache_alloc)
 {
    Eet_File **new_cache;
    int new_cache_num, new_cache_alloc;
@@ -373,53 +425,59 @@ eet_cache_del(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
    new_cache_num = *cache_num;
    new_cache_alloc = *cache_alloc;
    if (new_cache_num <= 0)
-     return;
+      return;
 
    for (i = 0; i < new_cache_num; i++)
      {
-       if (new_cache[i] == ef)
-         break;
+        if (new_cache[i] == ef)
+           break;
      }
 
    if (i >= new_cache_num)
-     return;
+      return;
 
    new_cache_num--;
    for (j = i; j < new_cache_num; j++)
-     new_cache[j] = new_cache[j + 1];
+      new_cache[j] = new_cache[j + 1];
 
    if (new_cache_num <= (new_cache_alloc - 16))
      {
-       new_cache_alloc -= 16;
-       if (new_cache_num > 0)
-         {
-            new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
-            if (!new_cache)
-              {
-                 CRIT("BAD ERROR! Eet realloc of cache list failed. Abort");
-                 abort();
-              }
-         }
-       else
-         {
-            free(new_cache);
-            new_cache = NULL;
-         }
+        new_cache_alloc -= 16;
+        if (new_cache_num > 0)
+          {
+             new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
+             if (!new_cache)
+               {
+                  CRIT("BAD ERROR! Eet realloc of cache list failed. Abort");
+                  abort();
+               }
+          }
+        else
+          {
+             free(new_cache);
+             new_cache = NULL;
+          }
      }
+
    *cache = new_cache;
    *cache_num = new_cache_num;
    *cache_alloc = new_cache_alloc;
-}
+} /* eet_cache_del */
 
 /* internal string match. null friendly, catches same ptr */
 static int
-eet_string_match(const char *s1, const char *s2)
+eet_string_match(const char *s1,
+                 const char *s2)
 {
    /* both null- no match */
-   if ((!s1) || (!s2)) return 0;
-   if (s1 == s2) return 1;
+   if ((!s1) || (!s2))
+      return 0;
+
+   if (s1 == s2)
+      return 1;
+
    return (!strcmp(s1, s2));
-}
+} /* eet_string_match */
 
 /* flush out writes to a v2 eet file */
 static Eet_Error
@@ -441,26 +499,30 @@ eet_flush2(Eet_File *ef)
    int j;
 
    if (eet_check_pointer(ef))
-     return EET_ERROR_BAD_OBJECT;
+      return EET_ERROR_BAD_OBJECT;
+
    if (eet_check_header(ef))
-     return EET_ERROR_EMPTY;
+      return EET_ERROR_EMPTY;
+
    if (!ef->writes_pending)
-     return EET_ERROR_NONE;
+      return EET_ERROR_NONE;
 
    if ((ef->mode == EET_FILE_MODE_READ_WRITE)
        || (ef->mode == EET_FILE_MODE_WRITE))
      {
-       int fd;
-
-       /* opening for write - delete old copy of file right away */
-       unlink(ef->path);
-       fd = open(ef->path, O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR);
-       fp = fdopen(fd, "wb");
-       if (!fp) return EET_ERROR_NOT_WRITABLE;
-       fcntl(fileno(fp), F_SETFD, FD_CLOEXEC);
+        int fd;
+
+        /* opening for write - delete old copy of file right away */
+        unlink(ef->path);
+        fd = open(ef->path, O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR);
+        fp = fdopen(fd, "wb");
+        if (!fp)
+           return EET_ERROR_NOT_WRITABLE;
+
+        fcntl(fileno(fp), F_SETFD, FD_CLOEXEC);
      }
    else
-     return EET_ERROR_NOT_WRITABLE;
+      return EET_ERROR_NOT_WRITABLE;
 
    /* calculate string base offset and data base offset */
    num = (1 << ef->header->directory->size);
@@ -477,16 +539,19 @@ eet_flush2(Eet_File *ef)
         num_dictionary_entries = ef->ed->count;
 
         for (i = 0; i < num_dictionary_entries; ++i)
-          bytes_strings += ef->ed->all[i].len;
+           bytes_strings += ef->ed->all[i].len;
      }
 
    /* calculate section bytes size */
-   bytes_directory_entries = EET_FILE2_DIRECTORY_ENTRY_SIZE * num_directory_entries + EET_FILE2_HEADER_SIZE;
-   bytes_dictionary_entries = EET_FILE2_DICTIONARY_ENTRY_SIZE * num_dictionary_entries;
+   bytes_directory_entries = EET_FILE2_DIRECTORY_ENTRY_SIZE *
+      num_directory_entries + EET_FILE2_HEADER_SIZE;
+   bytes_dictionary_entries = EET_FILE2_DICTIONARY_ENTRY_SIZE *
+      num_dictionary_entries;
 
    /* calculate per entry offset */
    strings_offset = bytes_directory_entries + bytes_dictionary_entries;
-   data_offset = bytes_directory_entries + bytes_dictionary_entries + bytes_strings;
+   data_offset = bytes_directory_entries + bytes_dictionary_entries +
+      bytes_strings;
 
    for (i = 0; i < num; ++i)
      {
@@ -502,58 +567,58 @@ eet_flush2(Eet_File *ef)
 
    /* calculate dictionary strings offset */
    if (ef->ed)
-     ef->ed->offset = strings_offset;
+      ef->ed->offset = strings_offset;
 
    /* go thru and write the header */
-   head[0] = (int) htonl ((unsigned int) EET_MAGIC_FILE2);
-   head[1] = (int) htonl ((unsigned int) num_directory_entries);
-   head[2] = (int) htonl ((unsigned int) num_dictionary_entries);
+   head[0] = (int)htonl((unsigned int)EET_MAGIC_FILE2);
+   head[1] = (int)htonl((unsigned int)num_directory_entries);
+   head[2] = (int)htonl((unsigned int)num_dictionary_entries);
 
    fseek(fp, 0, SEEK_SET);
    if (fwrite(head, sizeof (head), 1, fp) != 1)
-     goto write_error;
+      goto write_error;
 
    /* write directories entry */
    for (i = 0; i < num; i++)
      {
         for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
           {
-            unsigned int flag;
+             unsigned int flag;
              int ibuf[EET_FILE2_DIRECTORY_ENTRY_COUNT];
 
-            flag = (efn->ciphered << 1) | efn->compression;
+             flag = (efn->alias << 2) | (efn->ciphered << 1) | efn->compression;
 
-             ibuf[0] = (int) htonl ((unsigned int) efn->offset);
-             ibuf[1] = (int) htonl ((unsigned int) efn->size);
-             ibuf[2] = (int) htonl ((unsigned int) efn->data_size);
-             ibuf[3] = (int) htonl ((unsigned int) efn->name_offset);
-             ibuf[4] = (int) htonl ((unsigned int) efn->name_size);
-             ibuf[5] = (int) htonl ((unsigned int) flag);
+             ibuf[0] = (int)htonl((unsigned int)efn->offset);
+             ibuf[1] = (int)htonl((unsigned int)efn->size);
+             ibuf[2] = (int)htonl((unsigned int)efn->data_size);
+             ibuf[3] = (int)htonl((unsigned int)efn->name_offset);
+             ibuf[4] = (int)htonl((unsigned int)efn->name_size);
+             ibuf[5] = (int)htonl((unsigned int)flag);
 
              if (fwrite(ibuf, sizeof(ibuf), 1, fp) != 1)
-               goto write_error;
+                goto write_error;
           }
      }
 
    /* write dictionnary */
    if (ef->ed)
      {
-        int     offset = strings_offset;
+        int offset = strings_offset;
 
         for (j = 0; j < ef->ed->count; ++j)
           {
-             int      sbuf[EET_FILE2_DICTIONARY_ENTRY_COUNT];
+             int sbuf[EET_FILE2_DICTIONARY_ENTRY_COUNT];
 
-             sbuf[0] = (int) htonl ((unsigned int) ef->ed->all[j].hash);
-             sbuf[1] = (int) htonl ((unsigned int) offset);
-             sbuf[2] = (int) htonl ((unsigned int) ef->ed->all[j].len);
-             sbuf[3] = (int) htonl ((unsigned int) ef->ed->all[j].prev);
-             sbuf[4] = (int) htonl ((unsigned int) ef->ed->all[j].next);
+             sbuf[0] = (int)htonl((unsigned int)ef->ed->all[j].hash);
+             sbuf[1] = (int)htonl((unsigned int)offset);
+             sbuf[2] = (int)htonl((unsigned int)ef->ed->all[j].len);
+             sbuf[3] = (int)htonl((unsigned int)ef->ed->all[j].prev);
+             sbuf[4] = (int)htonl((unsigned int)ef->ed->all[j].next);
 
              offset += ef->ed->all[j].len;
 
              if (fwrite(sbuf, sizeof (sbuf), 1, fp) != 1)
-               goto write_error;
+                goto write_error;
           }
      }
 
@@ -563,27 +628,22 @@ eet_flush2(Eet_File *ef)
         for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
           {
              if (fwrite(efn->name, efn->name_size, 1, fp) != 1)
-               goto write_error;
+                goto write_error;
           }
      }
 
    /* write strings */
    if (ef->ed)
-     {
-       for (j = 0; j < ef->ed->count; ++j)
-         {
-            if (ef->ed->all[j].str)
-              {
-                 if (fwrite(ef->ed->all[j].str, ef->ed->all[j].len, 1, fp) != 1)
-                   goto write_error;
-              }
-            else
-              {
-                 if (fwrite(ef->ed->all[j].mmap, ef->ed->all[j].len, 1, fp) != 1)
-                   goto write_error;
-              }
-         }
-     }
+      for (j = 0; j < ef->ed->count; ++j)
+        {
+           if (ef->ed->all[j].str)
+             {
+                if (fwrite(ef->ed->all[j].str, ef->ed->all[j].len, 1, fp) != 1)
+                   goto write_error;
+             }
+           else if (fwrite(ef->ed->all[j].mmap, ef->ed->all[j].len, 1, fp) != 1)
+              goto write_error;
+        }
 
    /* write data */
    for (i = 0; i < num; i++)
@@ -591,7 +651,7 @@ eet_flush2(Eet_File *ef)
         for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
           {
              if (fwrite(efn->data, efn->size, 1, fp) != 1)
-               goto write_error;
+                goto write_error;
           }
      }
 
@@ -609,9 +669,9 @@ eet_flush2(Eet_File *ef)
    /* append signature if required */
    if (ef->key)
      {
-       error = eet_identity_sign(fp, ef->key);
-       if (error != EET_ERROR_NONE)
-         goto sign_error;
+        error = eet_identity_sign(fp, ef->key);
+        if (error != EET_ERROR_NONE)
+           goto sign_error;
      }
 
    /* no more writes pending */
@@ -621,106 +681,121 @@ eet_flush2(Eet_File *ef)
 
    return EET_ERROR_NONE;
 
-   write_error:
+write_error:
    if (ferror(fp))
      {
-       switch (errno)
-         {
-          case EFBIG: error = EET_ERROR_WRITE_ERROR_FILE_TOO_BIG; break;
-          case EIO: error = EET_ERROR_WRITE_ERROR_IO_ERROR; break;
-          case ENOSPC: error = EET_ERROR_WRITE_ERROR_OUT_OF_SPACE; break;
-          case EPIPE: error = EET_ERROR_WRITE_ERROR_FILE_CLOSED; break;
-          default: error = EET_ERROR_WRITE_ERROR; break;
-         }
+        switch (errno)
+          {
+           case EFBIG: error = EET_ERROR_WRITE_ERROR_FILE_TOO_BIG; break;
+
+           case EIO: error = EET_ERROR_WRITE_ERROR_IO_ERROR; break;
+
+           case ENOSPC: error = EET_ERROR_WRITE_ERROR_OUT_OF_SPACE; break;
+
+           case EPIPE: error = EET_ERROR_WRITE_ERROR_FILE_CLOSED; break;
+
+           default: error = EET_ERROR_WRITE_ERROR; break;
+          } /* switch */
      }
-   sign_error:
-   if (fp) fclose(fp);
+
+sign_error:
+   fclose(fp);
    return error;
-}
+} /* eet_flush2 */
 
 EAPI int
 eet_init(void)
 {
    if (++eet_init_count != 1)
-     return eet_init_count;
+      return eet_init_count;
 
    if (!eina_init())
      {
-       fprintf(stderr, "Eet: Eina init failed");
-       return --eet_init_count;
+        fprintf(stderr, "Eet: Eina init failed");
+        return --eet_init_count;
      }
+
    _eet_log_dom_global = eina_log_domain_register("Eet", EET_DEFAULT_LOG_COLOR);
    if (_eet_log_dom_global < 0)
      {
-       EINA_LOG_ERR("Eet Can not create a general log domain.");
-       goto shutdown_eina;
+        EINA_LOG_ERR("Eet Can not create a general log domain.");
+        goto shutdown_eina;
      }
 
    if (!eet_node_init())
      {
-       EINA_LOG_ERR("Eet: Eet_Node mempool creation failed");
-       goto unregister_log_domain;
+        EINA_LOG_ERR("Eet: Eet_Node mempool creation failed");
+        goto unregister_log_domain;
      }
 
 #ifdef HAVE_GNUTLS
    /* Before the library can be used, it must initialize itself if needed. */
-   if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P) == 0)
+   if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
      {
-       gcry_check_version(NULL);
-       /* Disable warning messages about problems with the secure memory subsystem.
-          This command should be run right after gcry_check_version. */
-       if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
-         goto shutdown_eet;
-       /* This command is used to allocate a pool of secure memory and thus
-          enabling the use of secure memory. It also drops all extra privileges the
-          process has (i.e. if it is run as setuid (root)). If the argument nbytes
-          is 0, secure memory will be disabled. The minimum amount of secure memory
-          allocated is currently 16384 bytes; you may thus use a value of 1 to
-          request that default size. */
-       if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0))
-         WRN("BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
+        gcry_check_version(NULL);
+        /* Disable warning messages about problems with the secure memory subsystem.
+           This command should be run right after gcry_check_version. */
+        if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
+           goto shutdown_eet;  /* This command is used to allocate a pool of secure memory and thus
+                                  enabling the use of secure memory. It also drops all extra privileges the
+                                  process has (i.e. if it is run as setuid (root)). If the argument nbytes
+                                  is 0, secure memory will be disabled. The minimum amount of secure memory
+                                  allocated is currently 16384 bytes; you may thus use a value of 1 to
+                                  request that default size. */
+
+        if (gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0))
+           WRN(
+              "BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
      }
+
+#ifdef EFL_HAVE_POSIX_THREADS
+   if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
+      WRN(
+         "YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
+
+#endif /* ifdef EFL_HAVE_POSIX_THREADS */
    if (gnutls_global_init())
-     goto shutdown_eet;
-#endif
+      goto shutdown_eet;
+
+#endif /* ifdef HAVE_GNUTLS */
 #ifdef HAVE_OPENSSL
    ERR_load_crypto_strings();
    OpenSSL_add_all_algorithms();
-#endif
+#endif /* ifdef HAVE_OPENSSL */
 
    return eet_init_count;
 
- shutdown_eet:
+shutdown_eet:
    eet_node_shutdown();
- unregister_log_domain:
+unregister_log_domain:
    eina_log_domain_unregister(_eet_log_dom_global);
    _eet_log_dom_global = -1;
- shutdown_eina:
+shutdown_eina:
    eina_shutdown();
    return --eet_init_count;
-}
+} /* eet_init */
 
 EAPI int
 eet_shutdown(void)
 {
    if (--eet_init_count != 0)
-     return eet_init_count;
+      return eet_init_count;
 
    eet_clearcache();
    eet_node_shutdown();
 #ifdef HAVE_GNUTLS
    gnutls_global_deinit();
-#endif
+#endif /* ifdef HAVE_GNUTLS */
 #ifdef HAVE_OPENSSL
    EVP_cleanup();
    ERR_free_strings();
-#endif
+#endif /* ifdef HAVE_OPENSSL */
    eina_log_domain_unregister(_eet_log_dom_global);
    _eet_log_dom_global = -1;
    eina_shutdown();
 
    return eet_init_count;
-}
+} /* eet_shutdown */
 
 EAPI Eet_Error
 eet_sync(Eet_File *ef)
@@ -728,14 +803,14 @@ eet_sync(Eet_File *ef)
    Eet_Error ret;
 
    if (eet_check_pointer(ef))
-     return EET_ERROR_BAD_OBJECT;
+      return EET_ERROR_BAD_OBJECT;
 
    if ((ef->mode != EET_FILE_MODE_WRITE) &&
        (ef->mode != EET_FILE_MODE_READ_WRITE))
-     return EET_ERROR_NOT_WRITABLE;
+      return EET_ERROR_NOT_WRITABLE;
 
    if (!ef->writes_pending)
-     return EET_ERROR_NONE;
+      return EET_ERROR_NONE;
 
    LOCK_FILE(ef);
 
@@ -743,13 +818,13 @@ eet_sync(Eet_File *ef)
 
    UNLOCK_FILE(ef);
    return ret;
-}
+} /* eet_sync */
 
 EAPI void
 eet_clearcache(void)
 {
-   int num = 0;
-   int i;
+   int num = 0;
+   int i;
 
    /*
     * We need to compute the list of eet file to close separately from the cache,
@@ -758,154 +833,165 @@ eet_clearcache(void)
    LOCK_CACHE;
    for (i = 0; i < eet_writers_num; i++)
      {
-       if (eet_writers[i]->references <= 0) num++;
+        if (eet_writers[i]->references <= 0)
+           num++;
      }
 
    for (i = 0; i < eet_readers_num; i++)
      {
-       if (eet_readers[i]->references <= 0) num++;
+        if (eet_readers[i]->references <= 0)
+           num++;
      }
 
    if (num > 0)
      {
-       Eet_File **closelist = NULL;
-
-       closelist = alloca(num * sizeof(Eet_File *));
-       num = 0;
-       for (i = 0; i < eet_writers_num; i++)
-         {
-            if (eet_writers[i]->references <= 0)
-              {
-                 closelist[num] = eet_writers[i];
-                 eet_writers[i]->delete_me_now = 1;
-                 num++;
-              }
-         }
-
-       for (i = 0; i < eet_readers_num; i++)
-         {
-            if (eet_readers[i]->references <= 0)
-              {
-                 closelist[num] = eet_readers[i];
-                 eet_readers[i]->delete_me_now = 1;
-                 num++;
-              }
-         }
-
-       for (i = 0; i < num; i++)
-         {
-            eet_internal_close(closelist[i], EINA_TRUE);
-         }
+        Eet_File **closelist = NULL;
+
+        closelist = alloca(num * sizeof(Eet_File *));
+        num = 0;
+        for (i = 0; i < eet_writers_num; i++)
+          {
+             if (eet_writers[i]->references <= 0)
+               {
+                  closelist[num] = eet_writers[i];
+                  eet_writers[i]->delete_me_now = 1;
+                  num++;
+               }
+          }
+
+        for (i = 0; i < eet_readers_num; i++)
+          {
+             if (eet_readers[i]->references <= 0)
+               {
+                  closelist[num] = eet_readers[i];
+                  eet_readers[i]->delete_me_now = 1;
+                  num++;
+               }
+          }
+
+        for (i = 0; i < num; i++)
+          {
+             eet_internal_close(closelist[i], EINA_TRUE);
+          }
      }
+
    UNLOCK_CACHE;
-}
+} /* eet_clearcache */
 
 /* FIXME: MMAP race condition in READ_WRITE_MODE */
 static Eet_File *
 eet_internal_read2(Eet_File *ef)
 {
-   const int    *data = (const int*) ef->data;
-   const char   *start = (const char*) ef->data;
-   int           idx = 0;
-   int           num_directory_entries;
-   int           bytes_directory_entries;
-   int           num_dictionary_entries;
-   int           bytes_dictionary_entries;
-   int           signature_base_offset;
-   int           i;
+   const int *data = (const int *)ef->data;
+   const char *start = (const char *)ef->data;
+   int idx = 0;
+   int num_directory_entries;
+   int bytes_directory_entries;
+   int num_dictionary_entries;
+   int bytes_dictionary_entries;
+   int signature_base_offset;
+   int i;
 
    idx += sizeof(int);
-   if (eet_test_close((int) ntohl(*data) != EET_MAGIC_FILE2, ef))
-     return NULL;
+   if (eet_test_close((int)ntohl(*data) != EET_MAGIC_FILE2, ef))
+      return NULL;
+
    data++;
 
-#define GET_INT(Value, Pointer, Index)          \
-   {                                            \
-      Value = ntohl(*Pointer);                  \
-      Pointer++;                                \
-      Index += sizeof(int);                     \
+#define GET_INT(Value, Pointer, Index)\
+   {\
+      Value = ntohl(*Pointer);\
+      Pointer++;\
+      Index += sizeof(int);\
    }
 
    /* get entries count and byte count */
-   GET_INT(num_directory_entries, data, idx);
+   GET_INT(num_directory_entries,  data, idx);
    /* get dictionary count and byte count */
    GET_INT(num_dictionary_entries, data, idx);
 
-   bytes_directory_entries = EET_FILE2_DIRECTORY_ENTRY_SIZE * num_directory_entries + EET_FILE2_HEADER_SIZE;
-   bytes_dictionary_entries = EET_FILE2_DICTIONARY_ENTRY_SIZE * num_dictionary_entries;
+   bytes_directory_entries = EET_FILE2_DIRECTORY_ENTRY_SIZE *
+      num_directory_entries + EET_FILE2_HEADER_SIZE;
+   bytes_dictionary_entries = EET_FILE2_DICTIONARY_ENTRY_SIZE *
+      num_dictionary_entries;
 
    /* we cant have <= 0 values here - invalid */
    if (eet_test_close((num_directory_entries <= 0), ef))
-     return NULL;
+      return NULL;
 
    /* we cant have more bytes directory and bytes in dictionaries than the size of the file */
-   if (eet_test_close((bytes_directory_entries + bytes_dictionary_entries) > ef->data_size, ef))
-     return NULL;
+   if (eet_test_close((bytes_directory_entries + bytes_dictionary_entries) >
+                      ef->data_size, ef))
+      return NULL;
 
    /* allocate header */
    ef->header = calloc(1, sizeof(Eet_File_Header));
    if (eet_test_close(!ef->header, ef))
-     return NULL;
+      return NULL;
 
    ef->header->magic = EET_MAGIC_FILE_HEADER;
 
    /* allocate directory block in ram */
    ef->header->directory = calloc(1, sizeof(Eet_File_Directory));
    if (eet_test_close(!ef->header->directory, ef))
-     return NULL;
+      return NULL;
 
    /* 8 bit hash table (256 buckets) */
    ef->header->directory->size = 8;
    /* allocate base hash table */
-   ef->header->directory->nodes = calloc(1, sizeof(Eet_File_Node *) * (1 << ef->header->directory->size));
+   ef->header->directory->nodes =
+      calloc(1, sizeof(Eet_File_Node *) * (1 << ef->header->directory->size));
    if (eet_test_close(!ef->header->directory->nodes, ef))
-     return NULL;
+      return NULL;
 
    signature_base_offset = 0;
 
    /* actually read the directory block - all of it, into ram */
    for (i = 0; i < num_directory_entries; ++i)
      {
-        const char      *name;
-        Eet_File_Node   *efn;
-        int              name_offset;
-        int              name_size;
-        int              hash;
-       int              flag;
+        const char *name;
+        Eet_File_Node *efn;
+        int name_offset;
+        int name_size;
+        int hash;
+        int flag;
 
         /* out directory block is inconsistent - we have oveerun our */
         /* dynamic block buffer before we finished scanning dir entries */
         efn = malloc (sizeof(Eet_File_Node));
         if (eet_test_close(!efn, ef))
-          return NULL;
+           return NULL;
 
         /* get entrie header */
-        GET_INT(efn->offset, data, idx);
-        GET_INT(efn->size, data, idx);
+        GET_INT(efn->offset,    data, idx);
+        GET_INT(efn->size,      data, idx);
         GET_INT(efn->data_size, data, idx);
-        GET_INT(name_offset, data, idx);
-        GET_INT(name_size, data, idx);
-        GET_INT(flag, data, idx);
-
-       efn->compression = flag & 0x1 ? 1 : 0;
-       efn->ciphered = flag & 0x2 ? 1 : 0;
-
-#define EFN_TEST(Test, Ef, Efn)                 \
-        if (eet_test_close(Test, Ef))           \
-          {                                     \
-             free(Efn);                         \
-             return NULL;                       \
-          }
+        GET_INT(name_offset,    data, idx);
+        GET_INT(name_size,      data, idx);
+        GET_INT(flag,           data, idx);
+
+        efn->compression = flag & 0x1 ? 1 : 0;
+        efn->ciphered = flag & 0x2 ? 1 : 0;
+        efn->alias = flag & 0x4 ? 1 : 0;
+
+#define EFN_TEST(Test, Ef, Efn)\
+   if (eet_test_close(Test, Ef))\
+     {\
+        free(Efn);\
+        return NULL;\
+     }
 
         /* check data pointer position */
         EFN_TEST(!((efn->size > 0)
                    && (efn->offset + efn->size <= ef->data_size)
-                   && (efn->offset > bytes_dictionary_entries + bytes_directory_entries)), ef, efn);
+                   && (efn->offset > bytes_dictionary_entries +
+                       bytes_directory_entries)), ef, efn);
 
         /* check name position */
         EFN_TEST(!((name_size > 0)
                    && (name_offset + name_size < ef->data_size)
-                   && (name_offset >= bytes_dictionary_entries + bytes_directory_entries)), ef, efn);
+                   && (name_offset >= bytes_dictionary_entries +
+                       bytes_directory_entries)), ef, efn);
 
         name = start + name_offset;
 
@@ -913,7 +999,7 @@ eet_internal_read2(Eet_File *ef)
         EFN_TEST(name[name_size - 1] != '\0', ef, efn);
 
         efn->free_name = 0;
-        efn->name = (char*) name;
+        efn->name = (char *)name;
         efn->name_size = name_size;
 
         hash = _eet_hash_gen(efn->name, ef->header->directory->size);
@@ -922,78 +1008,91 @@ eet_internal_read2(Eet_File *ef)
 
         /* read-only mode, so currently we have no data loaded */
         if (ef->mode == EET_FILE_MODE_READ)
-          efn->data = NULL;
-        /* read-write mode - read everything into ram */
+           efn->data = NULL;  /* read-write mode - read everything into ram */
         else
           {
              efn->data = malloc(efn->size);
              if (efn->data)
-               memcpy(efn->data, ef->data + efn->offset, efn->size);
+                memcpy(efn->data, ef->data + efn->offset, efn->size);
           }
 
-       /* compute the possible position of a signature */
-       if (signature_base_offset < efn->offset + efn->size)
-         signature_base_offset = efn->offset + efn->size;
+        /* compute the possible position of a signature */
+        if (signature_base_offset < efn->offset + efn->size)
+           signature_base_offset = efn->offset + efn->size;
      }
 
    ef->ed = NULL;
 
    if (num_dictionary_entries)
      {
-        const int       *dico = (const int*) ef->data + EET_FILE2_DIRECTORY_ENTRY_COUNT * num_directory_entries + EET_FILE2_HEADER_COUNT;
-        int              j;
+        const int *dico = (const int *)ef->data +
+           EET_FILE2_DIRECTORY_ENTRY_COUNT * num_directory_entries +
+           EET_FILE2_HEADER_COUNT;
+        int j;
 
-        if (eet_test_close((num_dictionary_entries * (int) EET_FILE2_DICTIONARY_ENTRY_SIZE + idx) > (bytes_dictionary_entries + bytes_directory_entries), ef))
-            return NULL;
+        if (eet_test_close((num_dictionary_entries *
+                            (int)EET_FILE2_DICTIONARY_ENTRY_SIZE + idx) >
+                           (bytes_dictionary_entries + bytes_directory_entries),
+                           ef))
+           return NULL;
 
         ef->ed = calloc(1, sizeof (Eet_Dictionary));
-        if (eet_test_close(!ef->ed, ef)) return NULL;
+        if (eet_test_close(!ef->ed, ef))
+           return NULL;
 
         ef->ed->all = calloc(num_dictionary_entries, sizeof (Eet_String));
-        if (eet_test_close(!ef->ed->all, ef)) return NULL;
+        if (eet_test_close(!ef->ed->all, ef))
+           return NULL;
 
         ef->ed->count = num_dictionary_entries;
-       ef->ed->total = num_dictionary_entries;
-       ef->ed->start = start + bytes_dictionary_entries + bytes_directory_entries;
-       ef->ed->end = ef->ed->start;
+        ef->ed->total = num_dictionary_entries;
+        ef->ed->start = start + bytes_dictionary_entries +
+           bytes_directory_entries;
+        ef->ed->end = ef->ed->start;
 
         for (j = 0; j < ef->ed->count; ++j)
           {
-             int   hash;
-             int   offset;
+             int hash;
+             int offset;
 
-             GET_INT(hash, dico, idx);
-             GET_INT(offset, dico, idx);
-             GET_INT(ef->ed->all[j].len, dico, idx);
+             GET_INT(hash,                dico, idx);
+             GET_INT(offset,              dico, idx);
+             GET_INT(ef->ed->all[j].len,  dico, idx);
              GET_INT(ef->ed->all[j].prev, dico, idx);
              GET_INT(ef->ed->all[j].next, dico, idx);
 
              /* Hash value could be stored on 8bits data, but this will break alignment of all the others data.
                 So stick to int and check the value. */
-             if (eet_test_close(hash & 0xFFFFFF00, ef)) return NULL;
+             if (eet_test_close(hash & 0xFFFFFF00, ef))
+                return NULL;
 
              /* Check string position */
              if (eet_test_close(!((ef->ed->all[j].len > 0)
-                                  && (offset > (bytes_dictionary_entries + bytes_directory_entries))
-                                  && (offset + ef->ed->all[j].len < ef->data_size)), ef))
-               return NULL;
+                                  && (offset >
+                                      (bytes_dictionary_entries +
+                                       bytes_directory_entries))
+                                  && (offset + ef->ed->all[j].len <
+                                      ef->data_size)), ef))
+                return NULL;
 
              ef->ed->all[j].mmap = start + offset;
              ef->ed->all[j].str = NULL;
 
-            if (ef->ed->all[j].mmap + ef->ed->all[j].len > ef->ed->end)
-              ef->ed->end = ef->ed->all[j].mmap + ef->ed->all[j].len;
+             if (ef->ed->all[j].mmap + ef->ed->all[j].len > ef->ed->end)
+                ef->ed->end = ef->ed->all[j].mmap + ef->ed->all[j].len;
 
              /* Check '\0' at the end of the string */
-             if (eet_test_close(ef->ed->all[j].mmap[ef->ed->all[j].len - 1] != '\0', ef)) return NULL;
+             if (eet_test_close(ef->ed->all[j].mmap[ef->ed->all[j].len - 1] !=
+                                '\0', ef))
+                return NULL;
 
-            ef->ed->all[j].hash = hash;
+             ef->ed->all[j].hash = hash;
              if (ef->ed->all[j].prev == -1)
-               ef->ed->hash[hash] = j;
+                ef->ed->hash[hash] = j;
 
-            /* compute the possible position of a signature */
-            if (signature_base_offset < offset + ef->ed->all[j].len)
-              signature_base_offset = offset + ef->ed->all[j].len;
+             /* compute the possible position of a signature */
+             if (signature_base_offset < offset + ef->ed->all[j].len)
+                signature_base_offset = offset + ef->ed->all[j].len;
           }
      }
 
@@ -1006,83 +1105,95 @@ eet_internal_read2(Eet_File *ef)
    if (signature_base_offset < ef->data_size)
      {
 #ifdef HAVE_SIGNATURE
-       const unsigned char *buffer = ((const unsigned char*) ef->data) + signature_base_offset;
-       ef->x509_der = eet_identity_check(ef->data, signature_base_offset,
-                                         &ef->sha1, &ef->sha1_length,
-                                         buffer, ef->data_size - signature_base_offset,
-                                         &ef->signature, &ef->signature_length,
-                                         &ef->x509_length);
-
-       if (eet_test_close(ef->x509_der == NULL, ef)) return NULL;
-#else
-       ERR("This file could be signed but you didn't compile the necessary code to check the signature.");
-#endif
+        const unsigned char *buffer = ((const unsigned char *)ef->data) +
+           signature_base_offset;
+        ef->x509_der = eet_identity_check(ef->data,
+                                          signature_base_offset,
+                                          &ef->sha1,
+                                          &ef->sha1_length,
+                                          buffer,
+                                          ef->data_size - signature_base_offset,
+                                          &ef->signature,
+                                          &ef->signature_length,
+                                          &ef->x509_length);
+
+        if (eet_test_close(ef->x509_der == NULL, ef))
+           return NULL;
+
+#else /* ifdef HAVE_SIGNATURE */
+        ERR(
+           "This file could be signed but you didn't compile the necessary code to check the signature.");
+#endif /* ifdef HAVE_SIGNATURE */
      }
 
    return ef;
-}
+} /* eet_internal_read2 */
 
 #if EET_OLD_EET_FILE_FORMAT
 static Eet_File *
 eet_internal_read1(Eet_File *ef)
 {
-   const unsigned char *dyn_buf = NULL;
-   const unsigned char *p = NULL;
-   int                  idx = 0;
-   int                  num_entries;
-   int                  byte_entries;
-   int                  i;
+   const unsigned char *dyn_buf = NULL;
+   const unsigned char *p = NULL;
+   int idx = 0;
+   int num_entries;
+   int byte_entries;
+   int i;
 
-   WRN("EET file format of '%s' is deprecated. You should just open it one time with mode == EET_FILE_MODE_READ_WRITE to solve this issue.", ef->path);
+   WRN(
+      "EET file format of '%s' is deprecated. You should just open it one time with mode == EET_FILE_MODE_READ_WRITE to solve this issue.",
+      ef->path);
 
    /* build header table if read mode */
    /* geat header */
    idx += sizeof(int);
    if (eet_test_close((int)ntohl(*((int *)ef->data)) != EET_MAGIC_FILE, ef))
-     return NULL;
-
-#define EXTRACT_INT(Value, Pointer, Index) \
-        { \
-          int tmp; \
-          memcpy(&tmp, Pointer + Index, sizeof(int)); \
-          Value = ntohl(tmp); \
-          Index += sizeof(int); \
-        }
+      return NULL;
+
+#define EXTRACT_INT(Value, Pointer, Index)\
+   {\
+      int tmp;\
+      memcpy(&tmp, Pointer + Index, sizeof(int));\
+      Value = ntohl(tmp);\
+      Index += sizeof(int);\
+   }
 
    /* get entries count and byte count */
-   EXTRACT_INT(num_entries, ef->data, idx);
+   EXTRACT_INT(num_entries,  ef->data, idx);
    EXTRACT_INT(byte_entries, ef->data, idx);
 
    /* we cant have <= 0 values here - invalid */
    if (eet_test_close((num_entries <= 0) || (byte_entries <= 0), ef))
-     return NULL;
+      return NULL;
 
    /* we can't have more entires than minimum bytes for those! invalid! */
    if (eet_test_close((num_entries * 20) > byte_entries, ef))
-     return NULL;
+      return NULL;
 
    /* check we will not outrun the file limit */
-   if (eet_test_close(((byte_entries + (int) sizeof(int) * 3) > ef->data_size), ef))
-     return NULL;
+   if (eet_test_close(((byte_entries + (int)sizeof(int) * 3) > ef->data_size),
+                      ef))
+      return NULL;
 
    /* allocate header */
    ef->header = calloc(1, sizeof(Eet_File_Header));
    if (eet_test_close(!ef->header, ef))
-     return NULL;
+      return NULL;
 
    ef->header->magic = EET_MAGIC_FILE_HEADER;
 
    /* allocate directory block in ram */
    ef->header->directory = calloc(1, sizeof(Eet_File_Directory));
    if (eet_test_close(!ef->header->directory, ef))
-     return NULL;
+      return NULL;
 
    /* 8 bit hash table (256 buckets) */
    ef->header->directory->size = 8;
    /* allocate base hash table */
-   ef->header->directory->nodes = calloc(1, sizeof(Eet_File_Node *) * (1 << ef->header->directory->size));
+   ef->header->directory->nodes =
+      calloc(1, sizeof(Eet_File_Node *) * (1 << ef->header->directory->size));
    if (eet_test_close(!ef->header->directory->nodes, ef))
-     return NULL;
+      return NULL;
 
    /* actually read the directory block - all of it, into ram */
    dyn_buf = ef->data + idx;
@@ -1092,102 +1203,109 @@ eet_internal_read1(Eet_File *ef)
 
    for (i = 0; i < num_entries; i++)
      {
-       Eet_File_Node   *efn;
-       void            *data = NULL;
-       int             indexn = 0;
-       int             name_size;
-       int             hash;
-       int             k;
+        Eet_File_Node *efn;
+        void *data = NULL;
+        int indexn = 0;
+        int name_size;
+        int hash;
+        int k;
 
 #define HEADER_SIZE (sizeof(int) * 5)
 
-       /* out directory block is inconsistent - we have oveerun our */
-       /* dynamic block buffer before we finished scanning dir entries */
-       if (eet_test_close(p + HEADER_SIZE >= (dyn_buf + byte_entries), ef))
-         return NULL;
+        /* out directory block is inconsistent - we have oveerun our */
+        /* dynamic block buffer before we finished scanning dir entries */
+        if (eet_test_close(p + HEADER_SIZE >= (dyn_buf + byte_entries), ef))
+           return NULL;
 
-       /* allocate all the ram needed for this stored node accounting */
-       efn = malloc (sizeof(Eet_File_Node));
-       if (eet_test_close(!efn, ef))
-         return NULL;
+        /* allocate all the ram needed for this stored node accounting */
+        efn = malloc (sizeof(Eet_File_Node));
+        if (eet_test_close(!efn, ef))
+           return NULL;
 
         /* get entrie header */
-       EXTRACT_INT(efn->offset, p, indexn);
-       EXTRACT_INT(efn->compression, p, indexn);
-       EXTRACT_INT(efn->size, p, indexn);
-       EXTRACT_INT(efn->data_size, p, indexn);
-       EXTRACT_INT(name_size, p, indexn);
+        EXTRACT_INT(efn->offset,      p, indexn);
+        EXTRACT_INT(efn->compression, p, indexn);
+        EXTRACT_INT(efn->size,        p, indexn);
+        EXTRACT_INT(efn->data_size,   p, indexn);
+        EXTRACT_INT(name_size,        p, indexn);
 
         efn->name_size = name_size;
-       efn->ciphered = 0;
-
-       /* invalid size */
-       if (eet_test_close(efn->size <= 0, ef))
-         {
-            free (efn);
-            return NULL;
-         }
-
-       /* invalid name_size */
-       if (eet_test_close(name_size <= 0, ef))
-         {
-            free (efn);
-            return NULL;
-         }
-
-       /* reading name would mean falling off end of dyn_buf - invalid */
-       if (eet_test_close((p + 16 + name_size) > (dyn_buf + byte_entries), ef))
-         {
-            free (efn);
-            return NULL;
-         }
-
-       /* This code is useless if we dont want backward compatibility */
-       for (k = name_size; k > 0 && ((unsigned char) * (p + HEADER_SIZE + k)) != 0; --k)
-         ;
-
-       efn->free_name = ((unsigned char) * (p + HEADER_SIZE + k)) != 0;
-
-       if (efn->free_name)
-         {
-            efn->name = malloc(sizeof(char) * name_size + 1);
-            if (eet_test_close(efn->name == NULL, ef))
-              {
-                 free(efn);
-                 return NULL;
-              }
-
-            strncpy(efn->name, (char *)p + HEADER_SIZE, name_size);
-            efn->name[name_size] = 0;
-
-            WRN("File: %s is not up to date for key \"%s\" - needs rebuilding sometime", ef->path, efn->name);
-         }
-       else
-         /* The only really usefull peace of code for efn->name (no backward compatibility) */
-         efn->name = (char*)((unsigned char*)(p + HEADER_SIZE));
-
-       /* get hash bucket it should go in */
-       hash = _eet_hash_gen(efn->name, ef->header->directory->size);
-       efn->next = ef->header->directory->nodes[hash];
-       ef->header->directory->nodes[hash] = efn;
-
-       /* read-only mode, so currently we have no data loaded */
-       if (ef->mode == EET_FILE_MODE_READ)
-         efn->data = NULL;
-       /* read-write mode - read everything into ram */
-       else
-         {
-            data = malloc(efn->size);
-            if (data)
-              memcpy(data, ef->data + efn->offset, efn->size);
-            efn->data = data;
-         }
-       /* advance */
-       p += HEADER_SIZE + name_size;
+        efn->ciphered = 0;
+        efn->alias = 0;
+
+        /* invalid size */
+        if (eet_test_close(efn->size <= 0, ef))
+          {
+             free(efn);
+             return NULL;
+          }
+
+        /* invalid name_size */
+        if (eet_test_close(name_size <= 0, ef))
+          {
+             free(efn);
+             return NULL;
+          }
+
+        /* reading name would mean falling off end of dyn_buf - invalid */
+        if (eet_test_close((p + 16 + name_size) > (dyn_buf + byte_entries), ef))
+          {
+             free(efn);
+             return NULL;
+          }
+
+        /* This code is useless if we dont want backward compatibility */
+        for (k = name_size;
+             k > 0 && ((unsigned char)*(p + HEADER_SIZE + k)) != 0; --k)
+           ;
+
+        efn->free_name = ((unsigned char)*(p + HEADER_SIZE + k)) != 0;
+
+        if (efn->free_name)
+          {
+             efn->name = malloc(sizeof(char) * name_size + 1);
+             if (eet_test_close(efn->name == NULL, ef))
+               {
+                  free(efn);
+                  return NULL;
+               }
+
+             strncpy(efn->name, (char *)p + HEADER_SIZE, name_size);
+             efn->name[name_size] = 0;
+
+             WRN(
+                "File: %s is not up to date for key \"%s\" - needs rebuilding sometime",
+                ef->path,
+                efn->name);
+          }
+        else
+           /* The only really usefull peace of code for efn->name (no backward compatibility) */
+           efn->name = (char *)((unsigned char *)(p + HEADER_SIZE));
+
+        /* get hash bucket it should go in */
+        hash = _eet_hash_gen(efn->name, ef->header->directory->size);
+        efn->next = ef->header->directory->nodes[hash];
+        ef->header->directory->nodes[hash] = efn;
+
+        /* read-only mode, so currently we have no data loaded */
+        if (ef->mode == EET_FILE_MODE_READ)
+           efn->data = NULL;  /* read-write mode - read everything into ram */
+        else
+          {
+             data = malloc(efn->size);
+             if (data)
+                memcpy(data, ef->data + efn->offset, efn->size);
+
+             efn->data = data;
+          }
+
+        /* advance */
+        p += HEADER_SIZE + name_size;
      }
    return ef;
-}
-#endif
+} /* eet_internal_read1 */
+
+#endif /* if EET_OLD_EET_FILE_FORMAT */
 
 /*
  * this should only be called when the cache lock is already held
@@ -1198,47 +1316,52 @@ eet_internal_read1(Eet_File *ef)
 static Eet_File *
 eet_internal_read(Eet_File *ef)
 {
-   const int    *data = (const int*) ef->data;
+   const int *data = (const int *)ef->data;
 
    if (eet_test_close((ef->data == (void *)-1) || (ef->data == NULL), ef))
-     return NULL;
+      return NULL;
 
-   if (eet_test_close(ef->data_size < (int) sizeof(int) * 3, ef))
-     return NULL;
+   if (eet_test_close(ef->data_size < (int)sizeof(int) * 3, ef))
+      return NULL;
 
    switch (ntohl(*data))
      {
 #if EET_OLD_EET_FILE_FORMAT
       case EET_MAGIC_FILE:
-       return eet_internal_read1(ef);
-#endif
+         return eet_internal_read1(ef);
+
+#endif /* if EET_OLD_EET_FILE_FORMAT */
       case EET_MAGIC_FILE2:
-       return eet_internal_read2(ef);
+         return eet_internal_read2(ef);
+
       default:
-       ef->delete_me_now = 1;
-       eet_internal_close(ef, EINA_TRUE);
-       break;
-     }
+         ef->delete_me_now = 1;
+         eet_internal_close(ef, EINA_TRUE);
+         break;
+     } /* switch */
 
    return NULL;
-}
+} /* eet_internal_read */
 
 static Eet_Error
-eet_internal_close(Eet_File *ef, Eina_Bool locked)
+eet_internal_close(Eet_File *ef,
+                   Eina_Bool locked)
 {
    Eet_Error err;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef))
-     return EET_ERROR_BAD_OBJECT;
+      return EET_ERROR_BAD_OBJECT;
 
-   if (!locked) LOCK_CACHE;
+   if (!locked)
+      LOCK_CACHE;
 
    /* deref */
    ef->references--;
    /* if its still referenced - dont go any further */
-   if (ef->references > 0) goto on_error;
-   /* flush any writes */
+   if (ef->references > 0)
+      goto on_error;  /* flush any writes */
+
    err = eet_flush2(ef);
 
    eet_identity_unref(ef->key);
@@ -1246,58 +1369,70 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked)
 
    /* if not urgent to delete it - dont free it - leave it in cache */
    if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ))
-     goto on_error;
+      goto on_error;
 
    /* remove from cache */
    if (ef->mode == EET_FILE_MODE_READ)
-     eet_cache_del(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
-   else if ((ef->mode == EET_FILE_MODE_WRITE) || (ef->mode == EET_FILE_MODE_READ_WRITE))
-     eet_cache_del(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc);
+      eet_cache_del(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
+   else if ((ef->mode == EET_FILE_MODE_WRITE) ||
+            (
+               ef
+               ->
+               mode == EET_FILE_MODE_READ_WRITE))
+      eet_cache_del(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc);
 
    /* we can unlock the cache now */
-   if (!locked) UNLOCK_CACHE;
+   if (!locked)
+      UNLOCK_CACHE;
 
    DESTROY_FILE(ef);
 
    /* free up data */
    if (ef->header)
      {
-       if (ef->header->directory)
-         {
-            if (ef->header->directory->nodes)
-              {
-                 int i, num;
-
-                 num = (1 << ef->header->directory->size);
-                 for (i = 0; i < num; i++)
-                   {
-                      Eet_File_Node *efn;
-
-                      while ((efn = ef->header->directory->nodes[i]))
-                        {
-                           if (efn->data)
-                             free(efn->data);
-
-                           ef->header->directory->nodes[i] = efn->next;
-
-                           if (efn->free_name)
-                             free(efn->name);
-
-                           free(efn);
-                        }
-                   }
-                 free(ef->header->directory->nodes);
-              }
-            free(ef->header->directory);
-         }
-       free(ef->header);
+        if (ef->header->directory)
+          {
+             if (ef->header->directory->nodes)
+               {
+                  int i, num;
+
+                  num = (1 << ef->header->directory->size);
+                  for (i = 0; i < num; i++)
+                    {
+                       Eet_File_Node *efn;
+
+                       while ((efn = ef->header->directory->nodes[i]))
+                         {
+                            if (efn->data)
+                               free(efn->data);
+
+                            ef->header->directory->nodes[i] = efn->next;
+
+                            if (efn->free_name)
+                               free(efn->name);
+
+                            free(efn);
+                         }
+                    }
+                  free(ef->header->directory->nodes);
+               }
+
+             free(ef->header->directory);
+          }
+
+        free(ef->header);
      }
 
    eet_dictionary_free(ef->ed);
 
-   if (ef->sha1) free(ef->sha1);
-   if (ef->data) munmap((void*)ef->data, ef->data_size);
-   if (ef->readfp) fclose(ef->readfp);
+   if (ef->sha1)
+      free(ef->sha1);
+
+   if (ef->data)
+      munmap((void *)ef->data, ef->data_size);
+
+   if (ef->readfp)
+      fclose(ef->readfp);
 
    /* zero out ram for struct - caution tactic against stale memory use */
    memset(ef, 0, sizeof(Eet_File));
@@ -1306,22 +1441,25 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked)
    free(ef);
    return err;
 
- on_error:
-   if (!locked) UNLOCK_CACHE;
+on_error:
+   if (!locked)
+      UNLOCK_CACHE;
+
    return EET_ERROR_NONE;
-}
+} /* eet_internal_close */
 
 EAPI Eet_File *
-eet_memopen_read(const void *data, size_t size)
+eet_memopen_read(const void *data,
+                 size_t      size)
 {
-   Eet_File    *ef;
+   Eet_File *ef;
 
    if (data == NULL || size == 0)
-     return NULL;
+      return NULL;
 
    ef = malloc (sizeof (Eet_File));
    if (!ef)
-     return NULL;
+      return NULL;
 
    INIT_FILE(ef);
    ef->ed = NULL;
@@ -1344,96 +1482,109 @@ eet_memopen_read(const void *data, size_t size)
    ef = eet_internal_read(ef);
    UNLOCK_CACHE;
    return ef;
-}
+} /* eet_memopen_read */
 
 EAPI Eet_File *
-eet_open(const char *file, Eet_File_Mode mode)
+eet_open(const char   *file,
+         Eet_File_Mode mode)
 {
-   FILE         *fp;
-   Eet_File    *ef;
-   int          file_len;
-   struct stat  file_stat;
+   FILE *fp;
+   Eet_File *ef;
+   int file_len;
+   struct stat file_stat;
 
    if (!file)
-     return NULL;
+      return NULL;
 
    /* find the current file handle in cache*/
    ef = NULL;
    LOCK_CACHE;
    if (mode == EET_FILE_MODE_READ)
      {
-       ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
-       if (ef)
-         {
-            eet_sync(ef);
-            ef->references++;
-            ef->delete_me_now = 1;
+        ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
+        if (ef)
+          {
+             eet_sync(ef);
+             ef->references++;
+             ef->delete_me_now = 1;
              eet_internal_close(ef, EINA_TRUE);
-         }
-       ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
+          }
+
+        ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
      }
    else if ((mode == EET_FILE_MODE_WRITE) ||
-           (mode == EET_FILE_MODE_READ_WRITE))
+            (mode == EET_FILE_MODE_READ_WRITE))
      {
-       ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
-       if (ef)
-         {
-            ef->delete_me_now = 1;
-            ef->references++;
+        ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
+        if (ef)
+          {
+             ef->delete_me_now = 1;
+             ef->references++;
              eet_internal_close(ef, EINA_TRUE);
-         }
-       ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
+          }
+
+        ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
      }
 
    /* try open the file based on mode */
    if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_READ_WRITE))
      {
-       /* Prevent garbage in futur comparison. */
-       file_stat.st_mtime = 0;
-
-       fp = fopen(file, "rb");
-       if (!fp) goto open_error;
-       if (fstat(fileno(fp), &file_stat))
-         {
-            fclose(fp);
-            fp = NULL;
-            goto open_error;
-         }
-       if ((mode == EET_FILE_MODE_READ) &&
-           (file_stat.st_size < ((int) sizeof(int) * 3)))
-         {
-            fclose(fp);
-            fp = NULL;
-            goto open_error;
-         }
-
-     open_error:
-       if (fp == NULL && mode == EET_FILE_MODE_READ) goto on_error;
+        /* Prevent garbage in futur comparison. */
+        file_stat.st_mtime = 0;
+
+        fp = fopen(file, "rb");
+        if (!fp)
+           goto open_error;
+
+        if (fstat(fileno(fp), &file_stat))
+          {
+             fclose(fp);
+             fp = NULL;
+             goto open_error;
+          }
+
+        if ((mode == EET_FILE_MODE_READ) &&
+            (file_stat.st_size < ((int)sizeof(int) * 3)))
+          {
+             fclose(fp);
+             fp = NULL;
+             goto open_error;
+          }
+
+open_error:
+        if (fp == NULL && mode == EET_FILE_MODE_READ)
+           goto on_error;
      }
    else
      {
-       if (mode != EET_FILE_MODE_WRITE) return NULL;
-       memset(&file_stat, 0, sizeof(file_stat));
+        if (mode != EET_FILE_MODE_WRITE)
+           return NULL;
+
+        memset(&file_stat, 0, sizeof(file_stat));
 
-       fp = NULL;
+        fp = NULL;
      }
 
    /* We found one */
-   if (ef && (file_stat.st_mtime != ef->mtime))
+   if (ef &&
+       ((file_stat.st_mtime != ef->mtime) ||
+        (file_stat.st_size != ef->data_size)))
      {
-       ef->delete_me_now = 1;
-       ef->references++;
+        ef->delete_me_now = 1;
+        ef->references++;
         eet_internal_close(ef, EINA_TRUE);
-       ef = NULL;
+        ef = NULL;
      }
 
    if (ef)
      {
-       /* reference it up and return it */
-       if (fp != NULL) fclose(fp);
-       ef->references++;
-       UNLOCK_CACHE;
-       return ef;
+        /* reference it up and return it */
+        if (fp != NULL)
+           fclose(fp);
+
+        ef->references++;
+        UNLOCK_CACHE;
+        return ef;
      }
 
    file_len = strlen(file) + 1;
@@ -1441,7 +1592,7 @@ eet_open(const char *file, Eet_File_Mode mode)
    /* Allocate struct for eet file and have it zero'd out */
    ef = malloc(sizeof(Eet_File) + file_len);
    if (!ef)
-     goto on_error;
+      goto on_error;
 
    /* fill some of the members */
    INIT_FILE(ef);
@@ -1462,40 +1613,42 @@ eet_open(const char *file, Eet_File_Mode mode)
    ef->sha1_length = 0;
 
    ef->ed = (mode == EET_FILE_MODE_WRITE)
-     || (ef->readfp == NULL && mode == EET_FILE_MODE_READ_WRITE) ?
-     eet_dictionary_add() : NULL;
+      || (ef->readfp == NULL && mode == EET_FILE_MODE_READ_WRITE) ?
+      eet_dictionary_add() : NULL;
 
    if (ef->readfp == NULL &&
        (mode == EET_FILE_MODE_READ_WRITE || mode == EET_FILE_MODE_WRITE))
-     goto empty_file;
+      goto empty_file;
 
    /* if we can't open - bail out */
    if (eet_test_close(!ef->readfp, ef))
-     goto on_error;
+      goto on_error;
 
    fcntl(fileno(ef->readfp), F_SETFD, FD_CLOEXEC);
    /* if we opened for read or read-write */
    if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_READ_WRITE))
      {
-       ef->data_size = file_stat.st_size;
-       ef->data = mmap(NULL, ef->data_size, PROT_READ,
-                       MAP_SHARED, fileno(ef->readfp), 0);
-       if (eet_test_close((ef->data == MAP_FAILED), ef))
-         goto on_error;
-       ef = eet_internal_read(ef);
-       if (!ef)
-         goto on_error;
+        ef->data_size = file_stat.st_size;
+        ef->data = mmap(NULL, ef->data_size, PROT_READ,
+                        MAP_SHARED, fileno(ef->readfp), 0);
+        if (eet_test_close((ef->data == MAP_FAILED), ef))
+           goto on_error;
+
+        ef = eet_internal_read(ef);
+        if (!ef)
+           goto on_error;
      }
 
- empty_file:
+empty_file:
    /* add to cache */
    if (ef->references == 1)
      {
-       if (ef->mode == EET_FILE_MODE_READ)
-         eet_cache_add(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
-       else
-         if ((ef->mode == EET_FILE_MODE_WRITE) || (ef->mode == EET_FILE_MODE_READ_WRITE))
-           eet_cache_add(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc);
+        if (ef->mode == EET_FILE_MODE_READ)
+           eet_cache_add(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
+        else
+        if ((ef->mode == EET_FILE_MODE_WRITE) ||
+            (ef->mode == EET_FILE_MODE_READ_WRITE))
+           eet_cache_add(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc);
      }
 
    UNLOCK_CACHE;
@@ -1504,52 +1657,67 @@ eet_open(const char *file, Eet_File_Mode mode)
 on_error:
    UNLOCK_CACHE;
    return NULL;
-}
+} /* eet_open */
 
 EAPI Eet_File_Mode
 eet_mode_get(Eet_File *ef)
 {
    /* check to see its' an eet file pointer */
    if ((!ef) || (ef->magic != EET_MAGIC_FILE))
-     return EET_FILE_MODE_INVALID;
+      return EET_FILE_MODE_INVALID;
    else
-     return ef->mode;
-}
+      return ef->mode;
+} /* eet_mode_get */
 
 EAPI const void *
-eet_identity_x509(Eet_File *ef, int *der_length)
+eet_identity_x509(Eet_File *ef,
+                  int      *der_length)
 {
-   if (!ef->x509_der) return NULL;
+   if (!ef->x509_der)
+      return NULL;
+
+   if (der_length)
+      *der_length = ef->x509_length;
 
-   if (der_length) *der_length = ef->x509_length;
    return ef->x509_der;
-}
+} /* eet_identity_x509 */
 
 EAPI const void *
-eet_identity_signature(Eet_File *ef, int *signature_length)
+eet_identity_signature(Eet_File *ef,
+                       int      *signature_length)
 {
-   if (!ef->signature) return NULL;
+   if (!ef->signature)
+      return NULL;
+
+   if (signature_length)
+      *signature_length = ef->signature_length;
 
-   if (signature_length) *signature_length = ef->signature_length;
    return ef->signature;
-}
+} /* eet_identity_signature */
 
 EAPI const void *
-eet_identity_sha1(Eet_File *ef, int *sha1_length)
+eet_identity_sha1(Eet_File *ef,
+                  int      *sha1_length)
 {
    if (!ef->sha1)
-     ef->sha1 = eet_identity_compute_sha1(ef->data, ef->data_size, &ef->sha1_length);
+      ef->sha1 = eet_identity_compute_sha1(ef->data,
+                                           ef->data_size,
+                                           &ef->sha1_length);
+
+   if (sha1_length)
+      *sha1_length = ef->sha1_length;
 
-   if (sha1_length) *sha1_length = ef->sha1_length;
    return ef->sha1;
-}
+} /* eet_identity_sha1 */
 
 EAPI Eet_Error
-eet_identity_set(Eet_File *ef, Eet_Key *key)
+eet_identity_set(Eet_File *ef,
+                 Eet_Key  *key)
 {
    Eet_Key *tmp = ef->key;
 
-   if (!ef) return EET_ERROR_BAD_OBJECT;
+   if (!ef)
+      return EET_ERROR_BAD_OBJECT;
 
    ef->key = key;
    eet_identity_ref(ef->key);
@@ -1559,247 +1727,489 @@ eet_identity_set(Eet_File *ef, Eet_Key *key)
    ef->writes_pending = 1;
 
    return EET_ERROR_NONE;
-}
+} /* eet_identity_set */
 
 EAPI Eet_Error
 eet_close(Eet_File *ef)
 {
    return eet_internal_close(ef, EINA_FALSE);
-}
+} /* eet_close */
 
 EAPI void *
-eet_read_cipher(Eet_File *ef, const char *name, int *size_ret, const char *cipher_key)
+eet_read_cipher(Eet_File   *ef,
+                const char *name,
+                int        *size_ret,
+                const char *cipher_key)
 {
-   void                        *data = NULL;
-   int                 size = 0;
-   Eet_File_Node       *efn;
+   Eet_File_Node *efn;
+   char *data = NULL;
+   int size = 0;
 
    if (size_ret)
-     *size_ret = 0;
+      *size_ret = 0;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef))
-     return NULL;
+      return NULL;
+
    if (!name)
-     return NULL;
+      return NULL;
+
    if ((ef->mode != EET_FILE_MODE_READ) &&
        (ef->mode != EET_FILE_MODE_READ_WRITE))
-     return NULL;
+      return NULL;
 
    /* no header, return NULL */
    if (eet_check_header(ef))
-     return NULL;
+      return NULL;
 
    LOCK_FILE(ef);
 
    /* hunt hash bucket */
    efn = find_node_by_name(ef, name);
-   if (!efn) goto on_error;
+   if (!efn)
+      goto on_error;
 
    /* get size (uncompressed, if compressed at all) */
    size = efn->data_size;
 
    /* allocate data */
    data = malloc(size);
-   if (!data) goto on_error;
+   if (!data)
+      goto on_error;
 
    /* uncompressed data */
    if (efn->compression == 0)
      {
         void *data_deciphered = NULL;
-       unsigned int data_deciphered_sz = 0;
-       /* if we alreayd have the data in ram... copy that */
-       if (efn->data)
-         memcpy(data, efn->data, efn->size);
-       else
-         if (!read_data_from_disk(ef, efn, data, size))
-           goto on_error;
+        unsigned int data_deciphered_sz = 0;
+        /* if we alreayd have the data in ram... copy that */
+
+        if (efn->data)
+           memcpy(data, efn->data, efn->size);
+        else
+        if (!read_data_from_disk(ef, efn, data, size))
+           goto on_error;
+
         if (efn->ciphered && cipher_key)
-         {
-           if (eet_decipher(data, size, cipher_key, strlen(cipher_key), &data_deciphered, &data_deciphered_sz))
-             {
-               if (data_deciphered) free(data_deciphered);
-               goto on_error;
-             }
-           free(data);
-           data = data_deciphered;
-           size = data_deciphered_sz;
-         }
+          {
+             if (eet_decipher(data, size, cipher_key, strlen(cipher_key),
+                              &data_deciphered, &data_deciphered_sz))
+               {
+                  if (data_deciphered)
+                     free(data_deciphered);
+
+                  goto on_error;
+               }
+
+             free(data);
+             data = data_deciphered;
+             size = data_deciphered_sz;
+          }
      }
    /* compressed data */
    else
      {
-       void    *tmp_data;
-       void    *data_deciphered = NULL;
-       unsigned int data_deciphered_sz = 0;
-       int     free_tmp = 0;
-       int     compr_size = efn->size;
-       uLongf  dlen;
-
-       /* if we already have the data in ram... copy that */
-       if (efn->data)
-         tmp_data = efn->data;
-       else
-         {
-            tmp_data = malloc(compr_size);
-            if (!tmp_data)
-              goto on_error;
-
-            free_tmp = 1;
-
-            if (!read_data_from_disk(ef, efn, tmp_data, compr_size))
-              {
-                 free(tmp_data);
-                 goto on_error;
-              }
-         }
-
-       if (efn->ciphered && cipher_key)
-         {
-           if (eet_decipher(tmp_data, compr_size, cipher_key, strlen(cipher_key), &data_deciphered, &data_deciphered_sz))
-             {
-               if (free_tmp) free(tmp_data);
-               if (data_deciphered) free(data_deciphered);
-               goto on_error;
-             }
-           free(tmp_data);
-           tmp_data = data_deciphered;
-           compr_size = data_deciphered_sz;
-         }
-
-       /* decompress it */
-       dlen = size;
-       if (uncompress((Bytef *)data, &dlen,
-                tmp_data, (uLongf)compr_size))
-         goto on_error;
-
-       if (free_tmp)
-         free(tmp_data);
+        void *tmp_data;
+        void *data_deciphered = NULL;
+        unsigned int data_deciphered_sz = 0;
+        int free_tmp = 0;
+        int compr_size = efn->size;
+        uLongf dlen;
+
+        /* if we already have the data in ram... copy that */
+        if (efn->data)
+           tmp_data = efn->data;
+        else
+          {
+             tmp_data = malloc(compr_size);
+             if (!tmp_data)
+                goto on_error;
+
+             free_tmp = 1;
+
+             if (!read_data_from_disk(ef, efn, tmp_data, compr_size))
+               {
+                  free(tmp_data);
+                  goto on_error;
+               }
+          }
+
+        if (efn->ciphered && cipher_key)
+          {
+             if (eet_decipher(tmp_data, compr_size, cipher_key,
+                              strlen(cipher_key), &data_deciphered,
+                              &data_deciphered_sz))
+               {
+                  if (free_tmp)
+                     free(tmp_data);
+
+                  if (data_deciphered)
+                     free(data_deciphered);
+
+                  goto on_error;
+               }
+
+             free(tmp_data);
+             tmp_data = data_deciphered;
+             compr_size = data_deciphered_sz;
+          }
+
+        /* decompress it */
+        dlen = size;
+        if (uncompress((Bytef *)data, &dlen,
+                       tmp_data, (uLongf)compr_size))
+           goto on_error;
+
+        if (free_tmp)
+           free(tmp_data);
      }
 
+   UNLOCK_FILE(ef);
+
+   /* handle alias */
+   if (efn->alias)
+     {
+        void *tmp;
+
+        if (data[size - 1] != '\0')
+           goto on_error;
+
+        tmp = eet_read_cipher(ef, data, size_ret, cipher_key);
+
+        free(data);
+
+        data = tmp;
+     }
+   else
    /* fill in return values */
    if (size_ret)
-     *size_ret = size;
-
-   UNLOCK_FILE(ef);
+      *size_ret = size;
 
    return data;
 
- on_error:
+on_error:
    UNLOCK_FILE(ef);
    free(data);
    return NULL;
-}
+} /* eet_read_cipher */
 
 EAPI void *
-eet_read(Eet_File *ef, const char *name, int *size_ret)
+eet_read(Eet_File   *ef,
+         const char *name,
+         int        *size_ret)
 {
    return eet_read_cipher(ef, name, size_ret, NULL);
-}
+} /* eet_read */
 
 EAPI const void *
-eet_read_direct(Eet_File *ef, const char *name, int *size_ret)
+eet_read_direct(Eet_File   *ef,
+                const char *name,
+                int        *size_ret)
 {
-   const void  *data = NULL;
-   int          size = 0;
    Eet_File_Node *efn;
+   const char *data = NULL;
+   int size = 0;
 
    if (size_ret)
-     *size_ret = 0;
+      *size_ret = 0;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef))
-     return NULL;
+      return NULL;
+
    if (!name)
-     return NULL;
+      return NULL;
+
    if ((ef->mode != EET_FILE_MODE_READ) &&
        (ef->mode != EET_FILE_MODE_READ_WRITE))
-     return NULL;
+      return NULL;
 
    /* no header, return NULL */
    if (eet_check_header(ef))
-     return NULL;
+      return NULL;
 
    LOCK_FILE(ef);
 
    /* hunt hash bucket */
    efn = find_node_by_name(ef, name);
-   if (!efn) goto on_error;
+   if (!efn)
+      goto on_error;
 
    if (efn->offset < 0 && efn->data == NULL)
-     goto on_error;
+      goto on_error;
 
    /* get size (uncompressed, if compressed at all) */
    size = efn->data_size;
 
+   if (efn->alias)
+     {
+        data = efn->data ? efn->data : ef->data + efn->offset;
+
+        /* handle alias case */
+        if (efn->compression)
+          {
+             char *tmp;
+             int compr_size = efn->size;
+             uLongf dlen;
+
+             tmp = alloca(sizeof (compr_size));
+             dlen = size;
+
+             if (uncompress((Bytef *)tmp, &dlen, (Bytef *)data,
+                            (uLongf)compr_size))
+                goto on_error;
+
+             if (tmp[compr_size - 1] != '\0')
+                goto on_error;
+
+            UNLOCK_FILE(ef);
+
+             return eet_read_direct(ef, tmp, size_ret);
+          }
+
+        if (!data)
+           goto on_error;
+
+        if (data[size - 1] != '\0')
+           goto on_error;
+
+       UNLOCK_FILE(ef);
+
+        return eet_read_direct(ef, data, size_ret);
+     }
+   else
    /* uncompressed data */
    if (efn->compression == 0
        && efn->ciphered == 0)
-     data = efn->data ? efn->data : ef->data + efn->offset;
-   /* compressed data */
+      data = efn->data ? efn->data : ef->data + efn->offset;  /* compressed data */
    else
-     data = NULL;
+      data = NULL;
 
    /* fill in return values */
    if (size_ret)
-     *size_ret = size;
+      *size_ret = size;
 
    UNLOCK_FILE(ef);
 
    return data;
 
- on_error:
+on_error:
    UNLOCK_FILE(ef);
    return NULL;
-}
+} /* eet_read_direct */
+
+EAPI Eina_Bool
+eet_alias(Eet_File   *ef,
+          const char *name,
+          const char *destination,
+          int         comp)
+{
+   Eet_File_Node *efn;
+   void *data2;
+   Eina_Bool exists_already = EINA_FALSE;
+   int data_size;
+   int hash;
+
+   /* check to see its' an eet file pointer */
+   if (eet_check_pointer(ef))
+      return EINA_FALSE;
+
+   if ((!name) || (!destination))
+      return EINA_FALSE;
+
+   if ((ef->mode != EET_FILE_MODE_WRITE) &&
+       (ef->mode != EET_FILE_MODE_READ_WRITE))
+      return EINA_FALSE;
+
+   LOCK_FILE(ef);
+
+   if (!ef->header)
+     {
+        /* allocate header */
+        ef->header = calloc(1, sizeof(Eet_File_Header));
+        if (!ef->header)
+           goto on_error;
+
+        ef->header->magic = EET_MAGIC_FILE_HEADER;
+        /* allocate directory block in ram */
+        ef->header->directory = calloc(1, sizeof(Eet_File_Directory));
+        if (!ef->header->directory)
+          {
+             free(ef->header);
+             ef->header = NULL;
+             goto on_error;
+          }
+
+        /* 8 bit hash table (256 buckets) */
+        ef->header->directory->size = 8;
+        /* allocate base hash table */
+        ef->header->directory->nodes =
+           calloc(1, sizeof(Eet_File_Node *) *
+                  (1 << ef->header->directory->size));
+        if (!ef->header->directory->nodes)
+          {
+             free(ef->header->directory);
+             ef->header = NULL;
+             goto on_error;
+          }
+     }
+
+   /* figure hash bucket */
+   hash = _eet_hash_gen(name, ef->header->directory->size);
+
+   data_size = comp ?
+      12 + (((strlen(destination) + 1) * 101) / 100)
+      : strlen(destination) + 1;
+
+   data2 = malloc(data_size);
+   if (!data2)
+      goto on_error;
+
+   /* if we want to compress */
+   if (comp)
+     {
+        uLongf buflen;
+
+        /* compress the data with max compression */
+        buflen = (uLongf)data_size;
+        if (compress2((Bytef *)data2, &buflen, (Bytef *)destination,
+                      (uLong)strlen(destination) + 1,
+                      Z_BEST_COMPRESSION) != Z_OK)
+          {
+             free(data2);
+             goto on_error;
+          }
+
+        /* record compressed chunk size */
+        data_size = (int)buflen;
+        if (data_size < 0 || data_size >= (int)(strlen(destination) + 1))
+          {
+             comp = 0;
+             data_size = strlen(destination) + 1;
+          }
+        else
+          {
+             void *data3;
+
+             data3 = realloc(data2, data_size);
+             if (data3)
+                data2 = data3;
+          }
+     }
+
+   if (!comp)
+      memcpy(data2, destination, data_size);
+
+   /* Does this node already exist? */
+   for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next)
+     {
+        /* if it matches */
+        if ((efn->name) && (eet_string_match(efn->name, name)))
+          {
+             free(efn->data);
+             efn->alias = 1;
+             efn->ciphered = 0;
+             efn->compression = !!comp;
+             efn->size = data_size;
+             efn->data_size = strlen(destination) + 1;
+             efn->data = data2;
+             efn->offset = -1;
+             exists_already = EINA_TRUE;
+             break;
+          }
+     }
+   if (!exists_already)
+     {
+        efn = malloc(sizeof(Eet_File_Node));
+        if (!efn)
+          {
+             free(data2);
+             goto on_error;
+          }
+
+        efn->name = strdup(name);
+        efn->name_size = strlen(efn->name) + 1;
+        efn->free_name = 1;
+
+        efn->next = ef->header->directory->nodes[hash];
+        ef->header->directory->nodes[hash] = efn;
+        efn->offset = -1;
+        efn->alias = 1;
+        efn->ciphered = 0;
+        efn->compression = !!comp;
+        efn->size = data_size;
+        efn->data_size = strlen(destination) + 1;
+        efn->data = data2;
+     }
+
+   /* flags that writes are pending */
+   ef->writes_pending = 1;
+
+   UNLOCK_FILE(ef);
+   return EINA_TRUE;
+
+on_error:
+   UNLOCK_FILE(ef);
+   return EINA_FALSE;
+} /* eet_alias */
 
 EAPI int
-eet_write_cipher(Eet_File *ef, const char *name, const void *data, int size, int comp, const char *cipher_key)
+eet_write_cipher(Eet_File   *ef,
+                 const char *name,
+                 const void *data,
+                 int         size,
+                 int         comp,
+                 const char *cipher_key)
 {
-   Eet_File_Node       *efn;
-   void                        *data2 = NULL;
-   int                 exists_already = 0;
-   int                 data_size;
-   int                 hash;
+   Eet_File_Node *efn;
+   void *data2 = NULL;
+   int exists_already = 0;
+   int data_size;
+   int hash;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef))
-     return 0;
+      return 0;
+
    if ((!name) || (!data) || (size <= 0))
-     return 0;
+      return 0;
+
    if ((ef->mode != EET_FILE_MODE_WRITE) &&
        (ef->mode != EET_FILE_MODE_READ_WRITE))
-     return 0;
+      return 0;
 
    LOCK_FILE(ef);
 
    if (!ef->header)
      {
-       /* allocate header */
-       ef->header = calloc(1, sizeof(Eet_File_Header));
-       if (!ef->header)
-         goto on_error;
-
-       ef->header->magic = EET_MAGIC_FILE_HEADER;
-       /* allocate directory block in ram */
-       ef->header->directory = calloc(1, sizeof(Eet_File_Directory));
-       if (!ef->header->directory)
-         {
-            free(ef->header);
-            ef->header = NULL;
-            goto on_error;
-         }
-
-       /* 8 bit hash table (256 buckets) */
-       ef->header->directory->size = 8;
-       /* allocate base hash table */
-       ef->header->directory->nodes = calloc(1, sizeof(Eet_File_Node *) * (1 << ef->header->directory->size));
-       if (!ef->header->directory->nodes)
-         {
-            free(ef->header->directory);
-            ef->header = NULL;
-            goto on_error;
-         }
+        /* allocate header */
+        ef->header = calloc(1, sizeof(Eet_File_Header));
+        if (!ef->header)
+           goto on_error;
+
+        ef->header->magic = EET_MAGIC_FILE_HEADER;
+        /* allocate directory block in ram */
+        ef->header->directory = calloc(1, sizeof(Eet_File_Directory));
+        if (!ef->header->directory)
+          {
+             free(ef->header);
+             ef->header = NULL;
+             goto on_error;
+          }
+
+        /* 8 bit hash table (256 buckets) */
+        ef->header->directory->size = 8;
+        /* allocate base hash table */
+        ef->header->directory->nodes =
+           calloc(1, sizeof(Eet_File_Node *) *
+                  (1 << ef->header->directory->size));
+        if (!ef->header->directory->nodes)
+          {
+             free(ef->header->directory);
+             ef->header = NULL;
+             goto on_error;
+          }
      }
 
    /* figure hash bucket */
@@ -1809,101 +2219,111 @@ eet_write_cipher(Eet_File *ef, const char *name, const void *data, int size, int
 
    if (comp || !cipher_key)
      {
-       data2 = malloc(data_size);
-       if (!data2) goto on_error;
+        data2 = malloc(data_size);
+        if (!data2)
+           goto on_error;
      }
 
    /* if we want to compress */
    if (comp)
      {
-       uLongf buflen;
-
-       /* compress the data with max compression */
-       buflen = (uLongf)data_size;
-       if (compress2((Bytef *)data2, &buflen, (Bytef *)data,
-                          (uLong)size, Z_BEST_COMPRESSION) != Z_OK)
-         {
-            free(data2);
-            return 0;
-         }
-       /* record compressed chunk size */
-       data_size = (int)buflen;
-       if (data_size < 0 || data_size >= size)
-         {
-            comp = 0;
-            data_size = size;
-         }
-       else
-         {
-            void *data3;
-
-            data3 = realloc(data2, data_size);
-            if (data3)
-              data2 = data3;
-         }
+        uLongf buflen;
+
+        /* compress the data with max compression */
+        buflen = (uLongf)data_size;
+        if (compress2((Bytef *)data2, &buflen, (Bytef *)data,
+                      (uLong)size, Z_BEST_COMPRESSION) != Z_OK)
+          {
+             free(data2);
+             goto on_error;
+          }
+
+        /* record compressed chunk size */
+        data_size = (int)buflen;
+        if (data_size < 0 || data_size >= size)
+          {
+             comp = 0;
+             data_size = size;
+          }
+        else
+          {
+             void *data3;
+
+             data3 = realloc(data2, data_size);
+             if (data3)
+                data2 = data3;
+          }
      }
 
    if (cipher_key)
      {
-       void *data_ciphered = NULL;
-       unsigned int data_ciphered_sz = 0;
-       const void *tmp;
-
-       tmp = data2 ? data2 : data;
-       if (!eet_cipher(tmp, data_size, cipher_key, strlen(cipher_key), &data_ciphered, &data_ciphered_sz))
-        {
-          if (data2) free(data2);
-          data2 = data_ciphered;
-          data_size = data_ciphered_sz;
-          size = (data_size > size) ? data_size : size;
-        }
-       else
-        {
-          if (data_ciphered) free(data_ciphered);
-          cipher_key = NULL;
-        }
+        void *data_ciphered = NULL;
+        unsigned int data_ciphered_sz = 0;
+        const void *tmp;
+
+        tmp = data2 ? data2 : data;
+        if (!eet_cipher(tmp, data_size, cipher_key, strlen(cipher_key),
+                        &data_ciphered, &data_ciphered_sz))
+          {
+             if (data2)
+                free(data2);
+
+             data2 = data_ciphered;
+             data_size = data_ciphered_sz;
+             size = (data_size > size) ? data_size : size;
+          }
+        else
+          {
+             if (data_ciphered)
+                free(data_ciphered);
+
+             cipher_key = NULL;
+          }
      }
    else
-     if (!comp)
-       memcpy(data2, data, size);
+   if (!comp)
+      memcpy(data2, data, size);
 
    /* Does this node already exist? */
    for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next)
      {
-       /* if it matches */
-       if ((efn->name) && (eet_string_match(efn->name, name)))
-         {
-            free(efn->data);
-            efn->ciphered = cipher_key ? 1 : 0;
-            efn->compression = !!comp;
-            efn->size = data_size;
-            efn->data_size = size;
-            efn->data = data2;
-            efn->offset = -1;
-            exists_already = 1;
-            break;
-         }
+        /* if it matches */
+        if ((efn->name) && (eet_string_match(efn->name, name)))
+          {
+             free(efn->data);
+             efn->alias = 0;
+             efn->ciphered = cipher_key ? 1 : 0;
+             efn->compression = !!comp;
+             efn->size = data_size;
+             efn->data_size = size;
+             efn->data = data2;
+             efn->offset = -1;
+             exists_already = 1;
+             break;
+          }
      }
    if (!exists_already)
      {
-       efn = malloc(sizeof(Eet_File_Node));
-       if (!efn)
-         {
-            free(data2);
-            goto on_error;
-         }
-       efn->name = strdup(name);
+        efn = malloc(sizeof(Eet_File_Node));
+        if (!efn)
+          {
+             free(data2);
+             goto on_error;
+          }
+
+        efn->name = strdup(name);
         efn->name_size = strlen(efn->name) + 1;
         efn->free_name = 1;
 
-       efn->next = ef->header->directory->nodes[hash];
-       ef->header->directory->nodes[hash] = efn;
-       efn->offset = -1;
-       efn->ciphered = cipher_key ? 1 : 0;
-       efn->compression = !!comp;
-       efn->size = data_size;
-       efn->data_size = size;
-       efn->data = data2;
+        efn->next = ef->header->directory->nodes[hash];
+        ef->header->directory->nodes[hash] = efn;
+        efn->offset = -1;
+        efn->alias = 0;
+        efn->ciphered = cipher_key ? 1 : 0;
+        efn->compression = !!comp;
+        efn->size = data_size;
+        efn->data_size = size;
+        efn->data = data2;
      }
 
    /* flags that writes are pending */
@@ -1911,37 +2331,43 @@ eet_write_cipher(Eet_File *ef, const char *name, const void *data, int size, int
    UNLOCK_FILE(ef);
    return data_size;
 
- on_error:
+on_error:
    UNLOCK_FILE(ef);
    return 0;
-}
+} /* eet_write_cipher */
 
 EAPI int
-eet_write(Eet_File *ef, const char *name, const void *data, int size, int comp)
+eet_write(Eet_File   *ef,
+          const char *name,
+          const void *data,
+          int         size,
+          int         comp)
 {
    return eet_write_cipher(ef, name, data, size, comp, NULL);
-}
+} /* eet_write */
 
 EAPI int
-eet_delete(Eet_File *ef, const char *name)
+eet_delete(Eet_File   *ef,
+           const char *name)
 {
-   Eet_File_Node       *efn;
-   Eet_File_Node       *pefn;
-   int                 hash;
-   int                 exists_already = 0;
+   Eet_File_Node *efn;
+   Eet_File_Node *pefn;
+   int hash;
+   int exists_already = 0;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef))
-     return 0;
+      return 0;
+
    if (!name)
-     return 0;
+      return 0;
 
    /* deleting keys is only possible in RW or WRITE mode */
    if (ef->mode == EET_FILE_MODE_READ)
-     return 0;
+      return 0;
 
    if (eet_check_header(ef))
-     return 0;
+      return 0;
 
    LOCK_FILE(ef);
 
@@ -1950,53 +2376,57 @@ eet_delete(Eet_File *ef, const char *name)
 
    /* Does this node already exist? */
    for (pefn = NULL, efn = ef->header->directory->nodes[hash];
-       efn;
-       pefn = efn, efn = efn->next)
+        efn;
+        pefn = efn, efn = efn->next)
      {
-       /* if it matches */
-       if (eet_string_match(efn->name, name))
-         {
-            if (efn->data)
-              free(efn->data);
-
-            if (pefn == NULL)
-              ef->header->directory->nodes[hash] = efn->next;
-            else
-              pefn->next = efn->next;
-
-             if (efn->free_name) free(efn->name);
-            free(efn);
-            exists_already = 1;
-            break;
-         }
+        /* if it matches */
+        if (eet_string_match(efn->name, name))
+          {
+             if (efn->data)
+                free(efn->data);
+
+             if (pefn == NULL)
+                ef->header->directory->nodes[hash] = efn->next;
+             else
+                pefn->next = efn->next;
+
+             if (efn->free_name)
+                free(efn->name);
+
+             free(efn);
+             exists_already = 1;
+             break;
+          }
      }
    /* flags that writes are pending */
    if (exists_already)
-     ef->writes_pending = 1;
+      ef->writes_pending = 1;
 
    UNLOCK_FILE(ef);
 
    /* update access time */
    return exists_already;
-}
+} /* eet_delete */
 
 EAPI Eet_Dictionary *
 eet_dictionary_get(Eet_File *ef)
 {
-   if (eet_check_pointer(ef)) return NULL;
+   if (eet_check_pointer(ef))
+      return NULL;
 
    return ef->ed;
-}
-
+} /* eet_dictionary_get */
 
 EAPI char **
-eet_list(Eet_File *ef, const char *glob, int *count_ret)
+eet_list(Eet_File   *ef,
+         const char *glob,
+         int        *count_ret)
 {
-   Eet_File_Node       *efn;
-   char                        **list_ret = NULL;
-   int                 list_count = 0;
-   int                 list_count_alloc = 0;
-   int                 i, num;
+   Eet_File_Node *efn;
+   char **list_ret = NULL;
+   int list_count = 0;
+   int list_count_alloc = 0;
+   int i, num;
 
    /* check to see its' an eet file pointer */
    if (eet_check_pointer(ef) || eet_check_header(ef) ||
@@ -2004,13 +2434,14 @@ eet_list(Eet_File *ef, const char *glob, int *count_ret)
        ((ef->mode != EET_FILE_MODE_READ) &&
         (ef->mode != EET_FILE_MODE_READ_WRITE)))
      {
-       if (count_ret)
-         *count_ret = 0;
+        if (count_ret)
+           *count_ret = 0;
 
-       return NULL;
+        return NULL;
      }
 
-   if (!strcmp(glob, "*")) glob = NULL;
+   if (!strcmp(glob, "*"))
+      glob = NULL;
 
    LOCK_FILE(ef);
 
@@ -2018,55 +2449,57 @@ eet_list(Eet_File *ef, const char *glob, int *count_ret)
    num = (1 << ef->header->directory->size);
    for (i = 0; i < num; i++)
      {
-       for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
-         {
-            /* if the entry matches the input glob
-             * check for * explicitly, because on some systems, * isn't well
-             * supported
-             */
-            if ((!glob) || !fnmatch(glob, efn->name, 0))
-              {
-                 /* add it to our list */
-                 list_count++;
-
-                 /* only realloc in 32 entry chunks */
-                 if (list_count > list_count_alloc)
-                   {
-                      char     **new_list = NULL;
-
-                      list_count_alloc += 64;
-                      new_list = realloc(list_ret, list_count_alloc * (sizeof(char *)));
-                      if (!new_list)
-                        {
-                           free(list_ret);
-
-                           goto on_error;
-                        }
-                      list_ret = new_list;
-                   }
-
-                 /* put pointer of name string in */
-                 list_ret[list_count - 1] = efn->name;
-              }
-         }
+        for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
+          {
+             /* if the entry matches the input glob
+              * check for * explicitly, because on some systems, * isn't well
+              * supported
+              */
+             if ((!glob) || !fnmatch(glob, efn->name, 0))
+               {
+                  /* add it to our list */
+                  list_count++;
+
+                  /* only realloc in 32 entry chunks */
+                  if (list_count > list_count_alloc)
+                    {
+                       char **new_list = NULL;
+
+                       list_count_alloc += 64;
+                       new_list =
+                          realloc(list_ret, list_count_alloc * (sizeof(char *)));
+                       if (!new_list)
+                         {
+                            free(list_ret);
+
+                            goto on_error;
+                         }
+
+                       list_ret = new_list;
+                    }
+
+                  /* put pointer of name string in */
+                  list_ret[list_count - 1] = efn->name;
+               }
+          }
      }
 
    UNLOCK_FILE(ef);
 
    /* return count and list */
    if (count_ret)
-     *count_ret = list_count;
+      *count_ret = list_count;
 
    return list_ret;
 
- on_error:
+on_error:
    UNLOCK_FILE(ef);
 
    if (count_ret)
-     *count_ret = 0;
+      *count_ret = 0;
 
    return NULL;
-}
+} /* eet_list */
 
 EAPI int
 eet_num_entries(Eet_File *ef)
@@ -2078,7 +2511,7 @@ eet_num_entries(Eet_File *ef)
    if (eet_check_pointer(ef) || eet_check_header(ef) ||
        ((ef->mode != EET_FILE_MODE_READ) &&
         (ef->mode != EET_FILE_MODE_READ_WRITE)))
-     return -1;
+      return -1;
 
    LOCK_FILE(ef);
 
@@ -2086,17 +2519,18 @@ eet_num_entries(Eet_File *ef)
    num = (1 << ef->header->directory->size);
    for (i = 0; i < num; i++)
      {
-       for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
-         ret++;
+        for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next)
+           ret++;
      }
 
    UNLOCK_FILE(ef);
 
    return ret;
-}
+} /* eet_num_entries */
 
 static Eet_File_Node *
-find_node_by_name(Eet_File *ef, const char *name)
+find_node_by_name(Eet_File   *ef,
+                  const char *name)
 {
    Eet_File_Node *efn;
    int hash;
@@ -2106,34 +2540,42 @@ find_node_by_name(Eet_File *ef, const char *name)
 
    for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next)
      {
-       if (eet_string_match(efn->name, name))
-         return efn;
+        if (eet_string_match(efn->name, name))
+           return efn;
      }
 
    return NULL;
-}
+} /* find_node_by_name */
 
 static int
-read_data_from_disk(Eet_File *ef, Eet_File_Node *efn, void *buf, int len)
+read_data_from_disk(Eet_File      *ef,
+                    Eet_File_Node *efn,
+                    void          *buf,
+                    int            len)
 {
-   if (efn->offset < 0) return 0;
+   if (efn->offset < 0)
+      return 0;
 
    if (ef->data)
      {
-       if ((efn->offset + len) > ef->data_size) return 0;
-       memcpy(buf, ef->data + efn->offset, len);
+        if ((efn->offset + len) > ef->data_size)
+           return 0;
+
+        memcpy(buf, ef->data + efn->offset, len);
      }
    else
      {
-       if (!ef->readfp)
-         return 0;
+        if (!ef->readfp)
+           return 0;
 
-       /* seek to data location */
-       if (fseek(ef->readfp, efn->offset, SEEK_SET) < 0)
-         return 0;
+        /* seek to data location */
+        if (fseek(ef->readfp, efn->offset, SEEK_SET) < 0)
+           return 0;
 
-       /* read it */
-       len = fread(buf, len, 1, ef->readfp);
+        /* read it */
+        len = fread(buf, len, 1, ef->readfp);
      }
+
    return len;
-}
+} /* read_data_from_disk */
+
index 6f33dda..fd4f07a 100644 (file)
@@ -1,17 +1,13 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #include <string.h>
 #include <stdio.h>
 
 #ifdef HAVE_EVIL
 # include <Evil.h>
-#endif
+#endif /* ifdef HAVE_EVIL */
 
 #include <Eina.h>
 
@@ -27,31 +23,33 @@ eet_node_new(void)
 
    result = eina_mempool_malloc(_eet_node_mp, sizeof (Eet_Node));
    if (!result)
-     return NULL;
+      return NULL;
 
    memset(result, 0, sizeof (Eet_Node));
    return result;
-}
+} /* eet_node_new */
 
 void
 eet_node_free(Eet_Node *node)
 {
    eina_mempool_free(_eet_node_mp, node);
-}
+} /* eet_node_free */
 
 static Eet_Node *
-_eet_node_new(const char *name, int type)
+_eet_node_new(const char *name,
+              int         type)
 {
    Eet_Node *n;
 
    n = eet_node_new();
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    n->type = type;
    n->name = eina_stringshare_add(name);
 
    return n;
-}
+} /* _eet_node_new */
 
 static void
 _eet_node_append(Eet_Node *n, Eina_List *nodes)
@@ -60,51 +58,51 @@ _eet_node_append(Eet_Node *n, Eina_List *nodes)
    Eina_List *l;
 
    EINA_LIST_REVERSE_FOREACH(nodes, l, value)
-     {
-       value->next = n->values;
-       n->values = value;
-     }
-}
-
-#define EET_NODE_NEW(Eet_type, Name, Value, Type)      \
-  EAPI Eet_Node *                                      \
-  eet_node_##Name##_new(const char *name, Type Value)  \
-  {                                                    \
-     Eet_Node *n;                                      \
-                                                       \
-     n = _eet_node_new(name, Eet_type);                        \
-     if (!n) return NULL;                              \
-                                                       \
-     n->data.value.Value = Value;                              \
-                                                       \
-     return n;                                         \
-  }
-
-#define EET_NODE_STR_NEW(Eet_type, Name, Value, Type)  \
-  EAPI Eet_Node *                                      \
-  eet_node_##Name##_new(const char *name, Type Value)  \
-  {                                                    \
-     Eet_Node *n;                                      \
-                                                       \
-     n = _eet_node_new(name, Eet_type);                        \
-     if (!n) return NULL;                              \
-                                                       \
-     n->data.value.Value = eina_stringshare_add(Value);        \
-                                                       \
-     return n;                                         \
-  }
-
-EET_NODE_NEW(EET_T_CHAR, char, c, char)
-EET_NODE_NEW(EET_T_SHORT, short, s, short)
-EET_NODE_NEW(EET_T_INT, int, i, int)
-EET_NODE_NEW(EET_T_LONG_LONG, long_long, l, long long)
-EET_NODE_NEW(EET_T_FLOAT, float, f, float)
-EET_NODE_NEW(EET_T_DOUBLE, double, d, double)
-EET_NODE_NEW(EET_T_UCHAR, unsigned_char, uc, unsigned char)
-EET_NODE_NEW(EET_T_USHORT, unsigned_short, us, unsigned short)
-EET_NODE_NEW(EET_T_UINT, unsigned_int, ui, unsigned int)
+   {
+      value->next = n->values;
+      n->values = value;
+   }
+} /* _eet_node_append */
+
+#define EET_NODE_NEW(Eet_type, Name, Value, Type)\
+   EAPI Eet_Node *\
+   eet_node_ ## Name ## _new(const char *name, Type Value)\
+   {\
+      Eet_Node *n;\
+\
+      n = _eet_node_new(name, Eet_type);\
+      if (!n) { return NULL; }\
+\
+      n->data.value.Value = Value;\
+\
+      return n;\
+   }
+
+#define EET_NODE_STR_NEW(Eet_type, Name, Value, Type)\
+   EAPI Eet_Node *\
+   eet_node_ ## Name ## _new(const char *name, Type Value)\
+   {\
+      Eet_Node *n;\
+\
+      n = _eet_node_new(name, Eet_type);\
+      if (!n) { return NULL; }\
+\
+      n->data.value.Value = eina_stringshare_add(Value);\
+\
+      return n;\
+   }
+
+EET_NODE_NEW(EET_T_CHAR,                     char, c,  char)
+EET_NODE_NEW(EET_T_SHORT,                   short, s,  short)
+EET_NODE_NEW(EET_T_INT,                       int, i,  int)
+EET_NODE_NEW(EET_T_LONG_LONG,           long_long, l,  long long)
+EET_NODE_NEW(EET_T_FLOAT,                   float, f,  float)
+EET_NODE_NEW(EET_T_DOUBLE,                 double, d,  double)
+EET_NODE_NEW(EET_T_UCHAR,           unsigned_char, uc, unsigned char)
+EET_NODE_NEW(EET_T_USHORT,         unsigned_short, us, unsigned short)
+EET_NODE_NEW(EET_T_UINT,             unsigned_int, ui, unsigned int)
 EET_NODE_NEW(EET_T_ULONG_LONG, unsigned_long_long, ul, unsigned long long)
-EET_NODE_STR_NEW(EET_T_STRING, string, str, const char *)
+EET_NODE_STR_NEW(EET_T_STRING,                 string, str, const char *)
 EET_NODE_STR_NEW(EET_T_INLINED_STRING, inlined_string, str, const char *)
 
 Eet_Node *
@@ -113,7 +111,8 @@ eet_node_null_new(const char *name)
    Eet_Node *n;
 
    n = _eet_node_new(name, EET_T_NULL);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    n->data.value.str = NULL;
 
@@ -121,58 +120,69 @@ eet_node_null_new(const char *name)
 }
 
 Eet_Node *
-eet_node_list_new(const char *name, Eina_List *nodes)
+eet_node_list_new(const char *name,
+                  Eina_List  *nodes)
 {
    Eet_Node *n;
 
    n = _eet_node_new(name, EET_G_LIST);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    _eet_node_append(n, nodes);
 
    return n;
-}
+} /* eet_node_list_new */
 
 Eet_Node *
-eet_node_array_new(const char *name, int count, Eina_List *nodes)
+eet_node_array_new(const char *name,
+                   int         count,
+                   Eina_List  *nodes)
 {
    Eet_Node *n;
 
    n = _eet_node_new(name, EET_G_ARRAY);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    n->count = count;
 
    _eet_node_append(n, nodes);
 
    return n;
-}
+} /* eet_node_array_new */
 
 Eet_Node *
-eet_node_var_array_new(const char *name, Eina_List *nodes)
+eet_node_var_array_new(const char *name,
+                       Eina_List  *nodes)
 {
    Eet_Node *n;
 
    n = _eet_node_new(name, EET_G_VAR_ARRAY);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    n->count = eina_list_count(nodes);
 
    _eet_node_append(n, nodes);
 
    return n;
-}
+} /* eet_node_var_array_new */
 
 Eet_Node *
-eet_node_hash_new(const char *name, const char *key, Eet_Node *node)
+eet_node_hash_new(const char *name,
+                  const char *key,
+                  Eet_Node   *node)
 {
    Eina_List *nodes;
    Eet_Node *n;
 
-   if (!node) return NULL;
+   if (!node)
+      return NULL;
 
    n = _eet_node_new(name, EET_G_HASH);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    n->key = eina_stringshare_add(key);
    nodes = eina_list_append(NULL, node);
@@ -180,39 +190,45 @@ eet_node_hash_new(const char *name, const char *key, Eet_Node *node)
    _eet_node_append(n, nodes);
 
    return n;
-}
+} /* eet_node_hash_new */
 
 Eet_Node *
-eet_node_struct_new(const char *name, Eina_List *nodes)
+eet_node_struct_new(const char *name,
+                    Eina_List  *nodes)
 {
    Eet_Node *n;
 
    n = _eet_node_new(name, EET_G_UNKNOWN);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    _eet_node_append(n, nodes);
 
    return n;
-}
+} /* eet_node_struct_new */
 
 Eet_Node *
-eet_node_struct_child_new(const char *parent, Eet_Node *child)
+eet_node_struct_child_new(const char *parent,
+                          Eet_Node   *child)
 {
    Eet_Node *n;
 
    if (child->type != EET_G_UNKNOWN)
-     return child;
+      return child;
 
    n = _eet_node_new(parent, EET_G_UNKNOWN);
-   if (!n) return NULL;
+   if (!n)
+      return NULL;
 
    _eet_node_append(n, eina_list_prepend(NULL, child));
 
    return n;
-}
+} /* eet_node_struct_child_new */
 
 void
-eet_node_list_append(Eet_Node *parent, const char *name, Eet_Node *child)
+eet_node_list_append(Eet_Node   *parent,
+                     const char *name,
+                     Eet_Node   *child)
 {
    const char *tmp;
    Eet_Node *nn;
@@ -220,23 +236,25 @@ eet_node_list_append(Eet_Node *parent, const char *name, Eet_Node *child)
    tmp = eina_stringshare_add(name);
 
    for (nn = parent->values; nn; nn = nn->next)
-     if (nn->name == tmp && nn->type == EET_G_LIST)
-       {
-         Eet_Node *n;
+      if (nn->name == tmp && nn->type == EET_G_LIST)
+        {
+           Eet_Node *n;
+
+           if (!nn->values)
+              nn->values = child;
+           else
+             {
+                for (n = nn->values; n->next; n = n->next)
+                   ;
+                n->next = child;
+             }
 
-         if (!nn->values) nn->values = child;
-         else
-           {
-              for (n = nn->values; n->next; n = n->next)
-                ;
-              n->next = child;
-           }
-         child->next = NULL;
+           child->next = NULL;
 
-         eina_stringshare_del(tmp);
+           eina_stringshare_del(tmp);
 
-         return ;
-       }
+           return;
+        }
 
    /* No list found, so create it. */
    nn = eet_node_list_new(tmp, eina_list_append(NULL, child));
@@ -246,10 +264,12 @@ eet_node_list_append(Eet_Node *parent, const char *name, Eet_Node *child)
    parent->values = nn;
 
    eina_stringshare_del(tmp);
-}
+} /* eet_node_list_append */
 
 void
-eet_node_struct_append(Eet_Node *parent, const char *name, Eet_Node *child)
+eet_node_struct_append(Eet_Node   *parent,
+                       const char *name,
+                       Eet_Node   *child)
 {
    const char *tmp;
    Eet_Node *prev;
@@ -257,41 +277,48 @@ eet_node_struct_append(Eet_Node *parent, const char *name, Eet_Node *child)
 
    if (parent->type != EET_G_UNKNOWN)
      {
-       ERR("[%s] is not a structure. Will not insert [%s] in it", parent->name, name);
-       eet_node_del(child);
-       return ;
+        ERR("[%s] is not a structure. Will not insert [%s] in it",
+            parent->name,
+            name);
+        eet_node_del(child);
+        return;
      }
 
    tmp = eina_stringshare_add(name);
 
    for (prev = NULL, nn = parent->values; nn; prev = nn, nn = nn->next)
-     if (nn->name == tmp && nn->type == child->type)
-       {
-         if (prev) prev->next = nn->next;
-         else parent->values = nn->next;
+      if (nn->name == tmp && nn->type == child->type)
+        {
+           if (prev)
+              prev->next = nn->next;
+           else
+              parent->values = nn->next;
 
-         nn->next = NULL;
-         eet_node_del(nn);
+           nn->next = NULL;
+           eet_node_del(nn);
 
-         break;
-       }
+           break;
+        }
 
    if (prev)
      {
-       prev->next = child;
-       child->next = NULL;
+        prev->next = child;
+        child->next = NULL;
      }
    else
      {
-       child->next = NULL;
-       parent->values = child;
+        child->next = NULL;
+        parent->values = child;
      }
 
    eina_stringshare_del(tmp);
-}
+} /* eet_node_struct_append */
 
 void
-eet_node_hash_add(Eet_Node *parent, const char *name, const char *key, Eet_Node *child)
+eet_node_hash_add(Eet_Node   *parent,
+                  const char *name,
+                  const char *key,
+                  Eet_Node   *child)
 {
    Eet_Node *nn;
 
@@ -301,7 +328,7 @@ eet_node_hash_add(Eet_Node *parent, const char *name, const char *key, Eet_Node
    /* And add it to the parent. */
    nn->next = parent->values;
    parent->values = nn;
-}
+} /* eet_node_hash_add */
 
 void
 eet_node_del(Eet_Node *n)
@@ -309,27 +336,31 @@ eet_node_del(Eet_Node *n)
    Eet_Node *nn;
    Eet_Node *tmp;
 
-   if (!n) return ;
+   if (!n)
+      return;
 
    switch (n->type)
      {
       case EET_G_HASH:
-        eina_stringshare_del(n->key);
+         eina_stringshare_del(n->key);
+
       case EET_G_UNKNOWN:
       case EET_G_VAR_ARRAY:
       case EET_G_ARRAY:
       case EET_G_LIST:
-        for (nn = n->values; nn; )
-          {
-             tmp = nn;
-             nn = nn->next;
-             eet_node_del(tmp);
-          }
-        break;
+         for (nn = n->values; nn; )
+           {
+              tmp = nn;
+              nn = nn->next;
+              eet_node_del(tmp);
+           }
+         break;
+
       case EET_T_STRING:
       case EET_T_INLINED_STRING:
-        eina_stringshare_del(n->data.value.str);
-        break;
+         eina_stringshare_del(n->data.value.str);
+         break;
+
       case EET_T_CHAR:
       case EET_T_SHORT:
       case EET_T_INT:
@@ -339,44 +370,46 @@ eet_node_del(Eet_Node *n)
       case EET_T_UCHAR:
       case EET_T_USHORT:
       case EET_T_UINT:
-        break;
-     }
+         break;
+     } /* switch */
 
    eina_stringshare_del(n->name);
    eet_node_free(n);
-}
+} /* eet_node_del */
 
 static const char *eet_node_dump_g_name[6] = {
-  "struct",
-  "array",
-  "var_array",
-  "list",
-  "hash",
-  "???"
+   "struct",
+   "array",
+   "var_array",
+   "list",
+   "hash",
+   "???"
 };
 
 static const char *eet_node_dump_t_name[14][2] = {
-  { "???: ", "???" },
-  { "char: ", "%hhi" },
-  { "short: ", "%hi" },
-  { "int: ", "%i" },
-  { "long_long: ", "%lli" },
-  { "float: ", "%1.25f" },
-  { "double: ", "%1.25f" },
-  { "uchar: ", "%hhu" },
-  { "ushort: ", "%i" },
-  { "uint: ", "%u" },
-  { "ulong_long: ", "%llu" },
-  { "null", "" }
+   { "???: ", "???" },
+   { "char: ", "%hhi" },
+   { "short: ", "%hi" },
+   { "int: ", "%i" },
+   { "long_long: ", "%lli" },
+   { "float: ", "%1.25f" },
+   { "double: ", "%1.25f" },
+   { "uchar: ", "%hhu" },
+   { "ushort: ", "%i" },
+   { "uint: ", "%u" },
+   { "ulong_long: ", "%llu" },
+   { "null", "" }
 };
 
 static void
-eet_node_dump_level(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata)
+eet_node_dump_level(int level,
+                    void (*dumpfunc)(void *data, const char *str),
+                    void *dumpdata)
 {
    int i;
 
    for (i = 0; i < level; i++) dumpfunc(dumpdata, "  ");
-}
+} /* eet_node_dump_level */
 
 static char *
 eet_node_string_escape(const char *str)
@@ -387,44 +420,57 @@ eet_node_string_escape(const char *str)
 
    for (strp = str; *strp; strp++)
      {
-       if (*strp == '\"') sz += 2;
-       else if (*strp == '\\') sz += 2;
-       else if (*strp == '\n') sz += 2;
-       else sz += 1;
+        if (*strp == '\"')
+           sz += 2;
+        else if (*strp == '\\')
+           sz += 2;
+        else if (*strp == '\n')
+           sz += 2;
+        else
+           sz += 1;
      }
    s = malloc(sz + 1);
-   if (!s) return NULL;
+   if (!s)
+      return NULL;
+
    for (strp = str, sp = s; *strp; strp++, sp++)
      {
-       if (*strp == '\"'
-           || *strp == '\\'
-           || *strp == '\n')
-         {
-            *sp = '\\';
-            sp++;
-         }
-       if (*strp == '\n') *sp = 'n';
-       else *sp = *strp;
+        if (*strp == '\"'
+            || *strp == '\\'
+            || *strp == '\n')
+          {
+             *sp = '\\';
+             sp++;
+          }
+
+        if (*strp == '\n')
+           *sp = 'n';
+        else
+           *sp = *strp;
      }
    *sp = 0;
    return s;
-}
+} /* eet_node_string_escape */
 
 static void
-eet_node_dump_string_escape(void *dumpdata, void dumpfunc(void *data, const char *str), const char *str)
+eet_node_dump_string_escape(void *dumpdata,
+                            void dumpfunc(void *data, const char *str),
+                            const char *str)
 {
    char *s;
 
    s = eet_node_string_escape(str);
-   if (!s) return ;
+   if (!s)
+      return;
 
    dumpfunc(dumpdata, s);
    free(s);
-}
+} /* eet_node_dump_string_escape */
 
 static void
 eet_node_dump_simple_type(Eet_Node *n, int level,
-                         void (*dumpfunc) (void *data, const char *str), void *dumpdata)
+                          void (*dumpfunc)(void *data, const char *str),
+                          void *dumpdata)
 {
    const char *type_name = NULL;
    char tbuf[256];
@@ -436,80 +482,97 @@ eet_node_dump_simple_type(Eet_Node *n, int level,
 
 #ifdef EET_T_TYPE
 # undef EET_T_TYPE
-#endif
-
-#define EET_T_TYPE(Eet_Type, Type)                                     \
-   case Eet_Type:                                                      \
-     {                                                                 \
-       dumpfunc(dumpdata, eet_node_dump_t_name[Eet_Type][0]);          \
-       snprintf(tbuf, sizeof (tbuf), eet_node_dump_t_name[Eet_Type][1], n->data.value.Type); \
-       dumpfunc(dumpdata, tbuf);                                       \
-       break;                                                          \
-     }
+#endif /* ifdef EET_T_TYPE */
+
+#define EET_T_TYPE(Eet_Type, Type)\
+ case Eet_Type:\
+ {\
+    dumpfunc(dumpdata, eet_node_dump_t_name[Eet_Type][0]);\
+    snprintf(tbuf,\
+             sizeof (tbuf),\
+             eet_node_dump_t_name[Eet_Type][1],\
+             n->data.value.Type);\
+    dumpfunc(dumpdata, tbuf);\
+    break;\
+ }
 
    switch (n->type)
      {
-       EET_T_TYPE(EET_T_CHAR, c);
-       EET_T_TYPE(EET_T_SHORT, s);
-       EET_T_TYPE(EET_T_INT, i);
-       EET_T_TYPE(EET_T_LONG_LONG, l);
-       EET_T_TYPE(EET_T_FLOAT, f);
-       EET_T_TYPE(EET_T_DOUBLE, d);
-       EET_T_TYPE(EET_T_UCHAR, uc);
-       EET_T_TYPE(EET_T_USHORT, us);
-       EET_T_TYPE(EET_T_UINT, ui);
-       EET_T_TYPE(EET_T_ULONG_LONG, ul);
+        EET_T_TYPE(EET_T_CHAR,        c);
+        EET_T_TYPE(EET_T_SHORT,       s);
+        EET_T_TYPE(EET_T_INT,         i);
+        EET_T_TYPE(EET_T_LONG_LONG,   l);
+        EET_T_TYPE(EET_T_FLOAT,       f);
+        EET_T_TYPE(EET_T_DOUBLE,      d);
+        EET_T_TYPE(EET_T_UCHAR,      uc);
+        EET_T_TYPE(EET_T_USHORT,     us);
+        EET_T_TYPE(EET_T_UINT,       ui);
+        EET_T_TYPE(EET_T_ULONG_LONG, ul);
+
       case EET_T_INLINED_STRING:
-        type_name = "inlined: \"";
+         type_name = "inlined: \"";
+
       case EET_T_STRING:
-        if (!type_name) type_name = "string: \"";
+         if (!type_name)
+            type_name = "string: \"";
+
+         dumpfunc(dumpdata, type_name);
+         eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.value.str);
+         dumpfunc(dumpdata, "\"");
+         break;
 
-        dumpfunc(dumpdata, type_name);
-        eet_node_dump_string_escape(dumpdata, dumpfunc, n->data.value.str);
-        dumpfunc(dumpdata, "\"");
-        break;
       case EET_T_NULL:
-        dumpfunc(dumpdata, "null");
-        break;
+         dumpfunc(dumpdata, "null");
+         break;
+
       default:
-        dumpfunc(dumpdata, "???: ???");
-        break;
-     }
+         dumpfunc(dumpdata, "???: ???");
+         break;
+     } /* switch */
 
    dumpfunc(dumpdata, ";\n");
-}
+} /* eet_node_dump_simple_type */
 
 static void
-eet_node_dump_group_start(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata,
-                         int group_type, const char *name)
+eet_node_dump_group_start(int level,
+                          void (*dumpfunc)(void *data, const char *str),
+                          void *dumpdata,
+                          int group_type,
+                          const char *name)
 {
    int chnk_type;
 
    chnk_type = (group_type >= EET_G_UNKNOWN && group_type <= EET_G_HASH) ?
-     group_type : EET_G_LAST;
+      group_type : EET_G_LAST;
 
    eet_node_dump_level(level, dumpfunc, dumpdata);
    dumpfunc(dumpdata, "group \"");
    eet_node_dump_string_escape(dumpdata, dumpfunc, name);
-   dumpfunc(dumpdata, "\" ");
+   dumpfunc(dumpdata,                "\" ");
 
    dumpfunc(dumpdata, eet_node_dump_g_name[chnk_type - EET_G_UNKNOWN]);
-   dumpfunc(dumpdata, " {\n");
-}
+   dumpfunc(dumpdata,               " {\n");
+} /* eet_node_dump_group_start */
 
 static void
-eet_node_dump_group_end(int level, void (*dumpfunc) (void *data, const char *str), void *dumpdata)
+eet_node_dump_group_end(int level,
+                        void (*dumpfunc)(void *data, const char *str),
+                        void *dumpdata)
 {
    eet_node_dump_level(level, dumpfunc, dumpdata);
    dumpfunc(dumpdata, "}\n");
-}
+} /* eet_node_dump_group_end */
 
 void
-eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const char *str), void *dumpdata)
+eet_node_dump(Eet_Node *n,
+              int dumplevel,
+              void (*dumpfunc)(void *data, const char *str),
+              void *dumpdata)
 {
    Eet_Node *it;
 
-   if (!n) return ;
+   if (!n)
+      return;
 
    switch (n->type)
      {
@@ -518,32 +581,37 @@ eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const ch
       case EET_G_UNKNOWN:
       case EET_G_HASH:
       case EET_G_LIST:
-        eet_node_dump_group_start(dumplevel, dumpfunc, dumpdata, n->type, n->name);
-
-        if (n->type == EET_G_VAR_ARRAY
-            || n->type == EET_G_ARRAY)
-          {
-             char tbuf[256];
-
-             eet_node_dump_level(dumplevel, dumpfunc, dumpdata);
-             dumpfunc(dumpdata, "    count ");
-             eina_convert_itoa(n->count, tbuf);
-             dumpfunc(dumpdata, tbuf);
-             dumpfunc(dumpdata, ";\n");
-          }
-        else if (n->type == EET_G_HASH)
-          {
-             eet_node_dump_level(dumplevel, dumpfunc, dumpdata);
-             dumpfunc(dumpdata, "    key \"");
-             eet_node_dump_string_escape(dumpdata, dumpfunc, n->key);
-             dumpfunc(dumpdata, "\";\n");
-          }
-
-        for (it = n->values; it != NULL; it = it->next)
-          eet_node_dump(it, dumplevel + 2, dumpfunc, dumpdata);
-
-        eet_node_dump_group_end(dumplevel, dumpfunc, dumpdata);
-        break;
+         eet_node_dump_group_start(dumplevel,
+                                   dumpfunc,
+                                   dumpdata,
+                                   n->type,
+                                   n->name);
+
+         if (n->type == EET_G_VAR_ARRAY
+             || n->type == EET_G_ARRAY)
+           {
+              char tbuf[256];
+
+              eet_node_dump_level(dumplevel, dumpfunc, dumpdata);
+              dumpfunc(dumpdata, "    count ");
+              eina_convert_itoa(n->count, tbuf);
+              dumpfunc(dumpdata,  tbuf);
+              dumpfunc(dumpdata, ";\n");
+           }
+         else if (n->type == EET_G_HASH)
+           {
+              eet_node_dump_level(dumplevel, dumpfunc, dumpdata);
+              dumpfunc(dumpdata, "    key \"");
+              eet_node_dump_string_escape(dumpdata, dumpfunc, n->key);
+              dumpfunc(dumpdata, "\";\n");
+           }
+
+         for (it = n->values; it != NULL; it = it->next)
+            eet_node_dump(it, dumplevel + 2, dumpfunc, dumpdata);
+
+         eet_node_dump_group_end(dumplevel, dumpfunc, dumpdata);
+         break;
+
       case EET_T_STRING:
       case EET_T_INLINED_STRING:
       case EET_T_CHAR:
@@ -556,13 +624,17 @@ eet_node_dump(Eet_Node *n, int dumplevel, void (*dumpfunc) (void *data, const ch
       case EET_T_USHORT:
       case EET_T_UINT:
       case EET_T_ULONG_LONG:
-        eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata);
-        break;
-     }
-}
-
-void*
-eet_node_walk(void *parent, const char *name, Eet_Node *root, Eet_Node_Walk *cb, void *user_data)
+         eet_node_dump_simple_type(n, dumplevel, dumpfunc, dumpdata);
+         break;
+     } /* switch */
+} /* eet_node_dump */
+
+void *
+eet_node_walk(void          *parent,
+              const char    *name,
+              Eet_Node      *root,
+              Eet_Node_Walk *cb,
+              void          *user_data)
 {
    Eet_Node *it;
    void *me = NULL;
@@ -570,39 +642,59 @@ eet_node_walk(void *parent, const char *name, Eet_Node *root, Eet_Node_Walk *cb,
 
    if (!root)
      {
-       if (parent) cb->struct_add(parent, name, NULL, user_data);
-       return NULL;
+        if (parent)
+           cb->struct_add(parent, name, NULL, user_data);
+
+        return NULL;
      }
 
    switch (root->type)
      {
       case EET_G_UNKNOWN:
-        me = cb->struct_alloc(root->name, user_data);
+         me = cb->struct_alloc(root->name, user_data);
+
+         for (it = root->values; it != NULL; it = it->next)
+            eet_node_walk(me, it->name, it, cb, user_data);
 
-        for (it = root->values; it != NULL; it = it->next)
-          eet_node_walk(me, it->name, it, cb, user_data);
+         break;
 
-        break;
       case EET_G_VAR_ARRAY:
       case EET_G_ARRAY:
-        me = cb->array(root->type == EET_G_VAR_ARRAY ? EINA_TRUE : EINA_FALSE,
-                       root->name, root->count, user_data);
+         me = cb->array(root->type == EET_G_VAR_ARRAY ? EINA_TRUE : EINA_FALSE,
+                        root->name, root->count, user_data);
 
-        for (i = 0, it = root->values; it != NULL; it = it->next)
-          cb->insert(me, i++, eet_node_walk(NULL, NULL, it, cb, user_data), user_data);
+         for (i = 0, it = root->values; it != NULL; it = it->next)
+            cb->insert(me, i++, eet_node_walk(NULL,
+                                              NULL,
+                                              it,
+                                              cb,
+                                              user_data), user_data);
+
+         break;
 
-        break;
       case EET_G_LIST:
-        me = cb->list(root->name, user_data);
+         me = cb->list(root->name, user_data);
+
+         for (it = root->values; it != NULL; it = it->next)
+            cb->append(me, eet_node_walk(NULL,
+                                         NULL,
+                                         it,
+                                         cb,
+                                         user_data), user_data);
 
-        for (it = root->values; it != NULL; it = it->next)
-          cb->append(me, eet_node_walk(NULL, NULL, it, cb, user_data), user_data);
+         break;
 
-        break;
       case EET_G_HASH:
-        if (!parent) return NULL;
+         if (!parent)
+            return NULL;
+
+         return cb->hash(parent, root->name, root->key,
+                         eet_node_walk(NULL,
+                                       NULL,
+                                       root->values,
+                                       cb,
+                                       user_data), user_data);
 
-        return cb->hash(parent, root->name, root->key, eet_node_walk(NULL, NULL, root->values, cb, user_data), user_data);
       case EET_T_STRING:
       case EET_T_INLINED_STRING:
       case EET_T_CHAR:
@@ -615,13 +707,15 @@ eet_node_walk(void *parent, const char *name, Eet_Node *root, Eet_Node_Walk *cb,
       case EET_T_USHORT:
       case EET_T_UINT:
       case EET_T_ULONG_LONG:
-        me = cb->simple(root->type, &root->data, user_data);
-        break;
-     }
+         me = cb->simple(root->type, &root->data, user_data);
+         break;
+     } /* switch */
+
+   if (parent)
+      cb->struct_add(parent, name, me, user_data);
 
-   if (parent) cb->struct_add(parent, name, me, user_data);
    return me;
-}
+} /* eet_node_walk */
 
 int
 eet_node_init(void)
@@ -632,16 +726,18 @@ eet_node_init(void)
    choice = "chained_mempool";
    tmp = getenv("EET_MEMPOOL");
    if (tmp && tmp[0])
-     choice = tmp;
+      choice = tmp;
 
-   _eet_node_mp = eina_mempool_add(choice, "eet-node-alloc", NULL, sizeof(Eet_Node), 1024);
+   _eet_node_mp =
+      eina_mempool_add(choice, "eet-node-alloc", NULL, sizeof(Eet_Node), 1024);
 
    return _eet_node_mp ? 1 : 0;
-}
+} /* eet_node_init */
 
 void
 eet_node_shutdown(void)
 {
    eina_mempool_del(_eet_node_mp);
    _eet_node_mp = NULL;
-}
+} /* eet_node_shutdown */
+
index 46fae93..5fcdaf4 100644 (file)
@@ -1,10 +1,6 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
-#endif
+#endif /* ifdef HAVE_CONFIG_H */
 
 #include <stdio.h>
 #include <math.h>
 #include "Eet_private.h"
 
 int
-_eet_hash_gen(const char *key, int hash_size)
+_eet_hash_gen(const char *key,
+              int         hash_size)
 {
-   int                 hash_num = 0;
-   int                 value, i;
-   int                  mask;
-   unsigned char       *ptr;
+   int hash_num = 0;
+   int value, i;
+   int mask;
+   unsigned char *ptr;
 
    /* no string - index 0 */
-   if (!key) return 0;
+   if (!key)
+      return 0;
 
    /* calc hash num */
    for (i = 0, ptr = (unsigned char *)key, value = (int)(*ptr);
-       value;
-       ptr++, i++, value = (int)(*ptr))
-     hash_num ^= (value | (value << 8)) >> (i & 0x7);
+        value;
+        ptr++, i++, value = (int)(*ptr))
+      hash_num ^= (value | (value << 8)) >> (i & 0x7);
 
    /* mask it */
    mask = (1 << hash_size) - 1;
    hash_num &= mask;
    /* return it */
    return hash_num;
-}
+} /* _eet_hash_gen */
 
index 339f0e0..170a3e5 100644 (file)
@@ -10,7 +10,7 @@ if EFL_ENABLE_TESTS
 check_PROGRAMS = eet_suite
 
 eet_suite_SOURCES = eet_suite.c eet_data_suite.c
-eet_suite_LDADD = @EINA_LIBS@ @CHECK_LIBS@ $(top_builddir)/src/lib/libeet.la
+eet_suite_LDADD = $(top_builddir)/src/lib/libeet.la @EINA_LIBS@ @CHECK_LIBS@
 
 endif
 
index c2bbd96..f6fb7f1 100644 (file)
@@ -5,58 +5,65 @@
 
 #include "eet_suite.h"
 
-static char*
-_eet_str_direct_alloc(const char *str)
+static char *
+_eet_str_direct_alloc(const char * str)
 {
-   return (char*) str;
-}
+   return (char *)str;
+} /* _eet_str_direct_alloc */
 
 static void
-_eet_str_direct_free(const char *str)
+_eet_str_direct_free(const char * str)
 {
    /* FIXME: Use attribute unused */
-   (void) str;
-}
+   (void)str;
+} /* _eet_str_direct_free */
 
 static void
-_eet_eina_hash_foreach(void *hash, Eina_Hash_Foreach cb, void *fdata)
+_eet_eina_hash_foreach(void * hash, Eina_Hash_Foreach cb, void * fdata)
 {
-   if (hash) eina_hash_foreach(hash, cb, fdata);
-}
+   if (hash)
+      eina_hash_foreach(hash, cb, fdata);
+} /* _eet_eina_hash_foreach */
 
 /* Internal wrapper for eina_hash */
-static Eina_Hash*
-_eet_eina_hash_add(Eina_Hash *hash, const char *key, const void *data)
+static Eina_Hash *
+_eet_eina_hash_add(Eina_Hash * hash, const char * key, const void * data)
 {
-   if (!hash) hash = eina_hash_string_superfast_new(NULL);
-   if (!hash) return NULL;
+   if (!hash)
+      hash = eina_hash_string_superfast_new(NULL);
+
+   if (!hash)
+      return NULL;
 
    eina_hash_add(hash, key, data);
    return hash;
-}
+} /* _eet_eina_hash_add */
 
 static void
-_eet_eina_hash_free(Eina_Hash *hash)
+_eet_eina_hash_free(Eina_Hash * hash)
 {
-   if (hash) eina_hash_free(hash);
-}
+   if (hash)
+      eina_hash_free(hash);
+} /* _eet_eina_hash_free */
 
 void
-eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc)
+eet_test_setup_eddc(Eet_Data_Descriptor_Class * eddc)
 {
    eddc->version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
    eddc->func.mem_alloc = NULL;
    eddc->func.mem_free = NULL;
    eddc->func.str_alloc = NULL;
    eddc->func.str_free = NULL;
-   eddc->func.list_next = (void*) eina_list_next;
-   eddc->func.list_append = (void*) eina_list_append;
-   eddc->func.list_data = (void*) eina_list_data_get;
-   eddc->func.list_free = (void*) eina_list_free;
-   eddc->func.hash_foreach = (void*) _eet_eina_hash_foreach;
-   eddc->func.hash_add = (void*) _eet_eina_hash_add;
-   eddc->func.hash_free = (void*) _eet_eina_hash_free;
-   eddc->func.str_direct_alloc = (void*) _eet_str_direct_alloc;
-   eddc->func.str_direct_free = (void*) _eet_str_direct_free;
-}
+   eddc->func.list_next = (void *)eina_list_next;
+   eddc->func.list_append = (void *)eina_list_append;
+   eddc->func.list_data = (void *)eina_list_data_get;
+   eddc->func.list_free = (void *)eina_list_free;
+   eddc->func.hash_foreach = (void *)_eet_eina_hash_foreach;
+   eddc->func.hash_add = (void *)_eet_eina_hash_add;
+   eddc->func.hash_free = (void *)_eet_eina_hash_free;
+   eddc->func.str_direct_alloc = (void *)_eet_str_direct_alloc;
+   eddc->func.str_direct_free = (void *)_eet_str_direct_free;
+   eddc->func.array_alloc = NULL;
+   eddc->func.array_free = NULL;
+} /* eet_test_setup_eddc */
 
index d138e25..9c4d5f0 100644 (file)
@@ -1,3 +1,7 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* ifdef HAVE_CONFIG_H */
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include <pthread.h>
 
-#include <check.h>
+#ifdef EFL_HAVE_POSIX_THREADS
+# include <pthread.h>
+#endif /* ifdef EFL_HAVE_POSIX_THREADS */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <check.h>
 
 #include <Eina.h>
 
@@ -30,83 +33,99 @@ START_TEST(eet_test_init)
 }
 END_TEST
 
-typedef struct _Eet_Test_Basic_Type Eet_Test_Basic_Type;
+typedef struct _Eet_Test_Basic_Type   Eet_Test_Basic_Type;
 struct _Eet_Test_Basic_Type
 {
-   char c;
-   short s;
-   int i;
-   long long l;
-   char *str;
-   char *istr;
-   float f1;
-   float f2;
-   double d;
-   unsigned char uc;
-   unsigned short us;
-   unsigned int ui;
-   unsigned long long ul;
-   Eet_Test_Basic_Type *empty;
-   Eet_Test_Basic_Type *with;
+   char                  c;
+   short                 s;
+   int                   i;
+   long long             l;
+   char *                str;
+   char *                istr;
+   float                 f1;
+   float                 f2;
+   double                d;
+   unsigned char         uc;
+   unsigned short        us;
+   unsigned int          ui;
+   unsigned long long    ul;
+   Eet_Test_Basic_Type * empty;
+   Eet_Test_Basic_Type * with;
 };
 
-#define EET_TEST_CHAR 0x42
-#define EET_TEST_SHORT 0x4224
-#define EET_TEST_INT 0x42211224
-#define EET_TEST_LONG_LONG 0x84CB42211224BC48
-#define EET_TEST_STRING "my little test with escape \\\""
-#define EET_TEST_KEY1 "key1"
-#define EET_TEST_KEY2 "key2"
-#define EET_TEST_FLOAT 123.45689
-#define EET_TEST_FLOAT2 1.0
-#define EET_TEST_FLOAT3 0.25
-#define EET_TEST_FLOAT4 0.0001234
-#define EET_TEST_DOUBLE 123456789.9876543210
-#define EET_TEST_DOUBLE2 1.0
-#define EET_TEST_DOUBLE3 0.25
-#define EET_TEST_FILE_KEY1 "keys/data/1"
-#define EET_TEST_FILE_KEY2 "keys/data/2"
+#define EET_TEST_CHAR       0x42
+#define EET_TEST_SHORT      0x4224
+#define EET_TEST_INT        0x42211224
+#define EET_TEST_LONG_LONG  0x84CB42211224BC48
+#define EET_TEST_STRING     "my little test with escape \\\""
+#define EET_TEST_KEY1       "key1"
+#define EET_TEST_KEY2       "key2"
+#define EET_TEST_FLOAT      123.45689
+#define EET_TEST_FLOAT2     1.0
+#define EET_TEST_FLOAT3     0.25
+#define EET_TEST_FLOAT4     0.0001234
+#define EET_TEST_DOUBLE     123456789.9876543210
+#define EET_TEST_DOUBLE2    1.0
+#define EET_TEST_DOUBLE3    0.25
+#define EET_TEST_FILE_KEY1  "keys/data/1"
+#define EET_TEST_FILE_KEY2  "keys/data/2"
 #define EET_TEST_FILE_IMAGE "keys/images/"
 
-typedef struct _Eet_Test_Image Eet_Test_Image;
+typedef struct _Eet_Test_Image   Eet_Test_Image;
 struct _Eet_Test_Image
 {
    unsigned int w;
    unsigned int h;
-   int alpha;
+   int          alpha;
    unsigned int color[64];
 };
 
 static const Eet_Test_Image test_noalpha = {
-  8, 8, 0,
-  {
-    0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-    0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
-    0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
-    0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
-    0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-    0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
-    0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
-    0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA
-  }
+   8, 8, 0,
+   {
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA,
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA
+   }
 };
 
 static const Eet_Test_Image test_alpha = {
-  8, 8, 1,
-  {
-    0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
-    0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000,
-    0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00,
-    0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
-    0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000,
-    0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000,
-    0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00,
-    0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA
-  }
+   8, 8, 1,
+   {
+      0x0FAA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000, 0x0000AA00,
+      0x000000AA, 0x0F110000,
+      0x0000AA00, 0x0F0000AA, 0x00110000, 0x00AA0000, 0x0000AA00, 0x000000AA,
+      0x0F110000, 0x00AA0000,
+      0x000000AA, 0x00110000, 0x0FAA0000, 0x0000AA00, 0x000000AA, 0x0F110000,
+      0x00AA0000, 0x0000AA00,
+      0x00110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA, 0x0F110000, 0x00AA0000,
+      0x0000AA00, 0x000000AA,
+      0x00AA0000, 0x0000AA00, 0x000000AA, 0x0F110000, 0x0FAA0000, 0x0000AA00,
+      0x000000AA, 0x00110000,
+      0x0000AA00, 0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x0F0000AA,
+      0x00110000, 0x00AA0000,
+      0x000000AA, 0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000,
+      0x0FAA0000, 0x0000AA00,
+      0x0F110000, 0x00AA0000, 0x0000AA00, 0x000000AA, 0x00110000, 0x00AA0000,
+      0x0000AA00, 0x0F0000AA
+   }
 };
 
 static void
-_eet_test_basic_set(Eet_Test_Basic_Type *res, int i)
+_eet_test_basic_set(Eet_Test_Basic_Type * res, int i)
 {
    res->c = EET_TEST_CHAR;
    res->s = EET_TEST_SHORT;
@@ -114,8 +133,8 @@ _eet_test_basic_set(Eet_Test_Basic_Type *res, int i)
    res->l = EET_TEST_LONG_LONG;
    res->str = EET_TEST_STRING;
    res->istr = EET_TEST_STRING;
-   res->f1 = - EET_TEST_FLOAT;
-   res->d = - EET_TEST_DOUBLE;
+   res->f1 = -EET_TEST_FLOAT;
+   res->d = -EET_TEST_DOUBLE;
    res->f2 = EET_TEST_FLOAT4;
    res->uc = EET_TEST_CHAR;
    res->us = EET_TEST_SHORT;
@@ -126,39 +145,39 @@ _eet_test_basic_set(Eet_Test_Basic_Type *res, int i)
 
    if (i == 0)
      {
-       Eet_Test_Basic_Type *tmp;
-
-       tmp = malloc(sizeof (Eet_Test_Basic_Type));
-       fail_if(!tmp);
-
-       res->with = tmp;
-       tmp->c = EET_TEST_CHAR;
-       tmp->s = EET_TEST_SHORT;
-       tmp->i = EET_TEST_INT + i + 1;
-       tmp->l = EET_TEST_LONG_LONG;
-       tmp->str = EET_TEST_STRING;
-       tmp->istr = EET_TEST_STRING;
-       tmp->f1 = - EET_TEST_FLOAT;
-       tmp->d = - EET_TEST_DOUBLE;
-       tmp->f2 = EET_TEST_FLOAT4;
-       tmp->uc = EET_TEST_CHAR;
-       tmp->us = EET_TEST_SHORT;
-       tmp->ui = EET_TEST_INT;
-       tmp->ul = EET_TEST_LONG_LONG;
-       tmp->empty = NULL;
-       tmp->with = NULL;
+        Eet_Test_Basic_Type * tmp;
+
+        tmp = malloc(sizeof (Eet_Test_Basic_Type));
+        fail_if(!tmp);
+
+        res->with = tmp;
+        tmp->c = EET_TEST_CHAR;
+        tmp->s = EET_TEST_SHORT;
+        tmp->i = EET_TEST_INT + i + 1;
+        tmp->l = EET_TEST_LONG_LONG;
+        tmp->str = EET_TEST_STRING;
+        tmp->istr = EET_TEST_STRING;
+        tmp->f1 = -EET_TEST_FLOAT;
+        tmp->d = -EET_TEST_DOUBLE;
+        tmp->f2 = EET_TEST_FLOAT4;
+        tmp->uc = EET_TEST_CHAR;
+        tmp->us = EET_TEST_SHORT;
+        tmp->ui = EET_TEST_INT;
+        tmp->ul = EET_TEST_LONG_LONG;
+        tmp->empty = NULL;
+        tmp->with = NULL;
      }
-}
+} /* _eet_test_basic_set */
 
 static void
-_eet_test_basic_check(Eet_Test_Basic_Type *result, int i)
+_eet_test_basic_check(Eet_Test_Basic_Type * result, int i)
 {
    float tmp;
 
    fail_if(result->c != EET_TEST_CHAR);
    fail_if(result->s != EET_TEST_SHORT);
    fail_if(result->i != EET_TEST_INT + i);
-   fail_if(result->l != (long long) EET_TEST_LONG_LONG);
+   fail_if(result->l != (long long)EET_TEST_LONG_LONG);
    fail_if(strcmp(result->str, EET_TEST_STRING) != 0);
    fail_if(strcmp(result->istr, EET_TEST_STRING) != 0);
    fail_if(result->uc != EET_TEST_CHAR);
@@ -167,68 +186,126 @@ _eet_test_basic_check(Eet_Test_Basic_Type *result, int i)
    fail_if(result->ul != EET_TEST_LONG_LONG);
 
    tmp = (result->f1 + EET_TEST_FLOAT);
-   if (tmp < 0) tmp = -tmp;
+   if (tmp < 0)
+      tmp = -tmp;
+
    fail_if(tmp > 0.005);
 
    tmp = (result->f2 - EET_TEST_FLOAT4);
-   if (tmp < 0) tmp = -tmp;
+   if (tmp < 0)
+      tmp = -tmp;
+
    fail_if(tmp > 0.005);
 
    tmp = (result->d + EET_TEST_DOUBLE);
-   if (tmp < 0) tmp = -tmp;
+   if (tmp < 0)
+      tmp = -tmp;
+
    fail_if(tmp > 0.00005);
 
    fail_if(result->empty != NULL);
    if (i == 0)
      {
-       Eet_Test_Basic_Type *tmp;
-
-       tmp = result->with;
-       fail_if(tmp == NULL);
-
-       fail_if(tmp->c != EET_TEST_CHAR);
-       fail_if(tmp->s != EET_TEST_SHORT);
-       fail_if(tmp->i != EET_TEST_INT + i + 1);
-       fail_if(tmp->l != (long long) EET_TEST_LONG_LONG);
-       fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
-       fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
-       fail_if(tmp->uc != EET_TEST_CHAR);
-       fail_if(tmp->us != EET_TEST_SHORT);
-       fail_if(tmp->ui != EET_TEST_INT);
-       fail_if(tmp->ul != EET_TEST_LONG_LONG);
+        Eet_Test_Basic_Type * tmp;
+
+        tmp = result->with;
+        fail_if(tmp == NULL);
+
+        fail_if(tmp->c != EET_TEST_CHAR);
+        fail_if(tmp->s != EET_TEST_SHORT);
+        fail_if(tmp->i != EET_TEST_INT + i + 1);
+        fail_if(tmp->l != (long long)EET_TEST_LONG_LONG);
+        fail_if(strcmp(tmp->str, EET_TEST_STRING) != 0);
+        fail_if(strcmp(tmp->istr, EET_TEST_STRING) != 0);
+        fail_if(tmp->uc != EET_TEST_CHAR);
+        fail_if(tmp->us != EET_TEST_SHORT);
+        fail_if(tmp->ui != EET_TEST_INT);
+        fail_if(tmp->ul != EET_TEST_LONG_LONG);
      }
    else
-     fail_if(result->with != NULL);
-}
+      fail_if(result->with != NULL);
+} /* _eet_test_basic_check */
 
 static void
-_eet_build_basic_descriptor(Eet_Data_Descriptor *edd)
-{
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "c", c, EET_T_CHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "s", s, EET_T_SHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "i", i, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "l", l, EET_T_LONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "str", str, EET_T_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "istr", istr, EET_T_INLINED_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f1", f1, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "f2", f2, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "d", d, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "uc", uc, EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "us", us, EET_T_USHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ui", ui, EET_T_UINT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Basic_Type, "ul", ul, EET_T_ULONG_LONG);
+_eet_build_basic_descriptor(Eet_Data_Descriptor * edd)
+{
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "c",
+                                 c,
+                                 EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "s",
+                                 s,
+                                 EET_T_SHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "i",
+                                 i,
+                                 EET_T_INT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "l",
+                                 l,
+                                 EET_T_LONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "str",
+                                 str,
+                                 EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "istr",
+                                 istr,
+                                 EET_T_INLINED_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "f1",
+                                 f1,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "f2",
+                                 f2,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "d",
+                                 d,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "uc",
+                                 uc,
+                                 EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "us",
+                                 us,
+                                 EET_T_USHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "ui",
+                                 ui,
+                                 EET_T_UINT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Basic_Type,
+                                 "ul",
+                                 ul,
+                                 EET_T_ULONG_LONG);
 
    EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "empty", empty, edd);
-   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with", with, edd);
-}
+   EET_DATA_DESCRIPTOR_ADD_SUB(edd, Eet_Test_Basic_Type, "with",  with,  edd);
+} /* _eet_build_basic_descriptor */
 
 START_TEST(eet_test_basic_data_type_encoding_decoding)
 {
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Basic_Type *result;
+   Eet_Data_Descriptor * edd;
+   Eet_Test_Basic_Type * result;
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Basic_Type etbt;
-   void *transfert;
+   void * transfert;
    int size;
 
    eet_init();
@@ -261,52 +338,51 @@ START_TEST(eet_test_basic_data_type_encoding_decoding)
 }
 END_TEST
 
-typedef struct _Eet_Test_Ex_Type Eet_Test_Ex_Type;
+typedef struct _Eet_Test_Ex_Type   Eet_Test_Ex_Type;
 struct _Eet_Test_Ex_Type
 {
-   char c;
-   short s;
-   int i;
-   unsigned long long l;
-   char *str;
-   char *istr;
-   float f1;
-   float f2;
-   float f3;
-   float f4;
-   double d1;
-   double d2;
-   double d3;
-   double d4;
-   Eina_List *list;
-   Eina_Hash *hash;
-   Eina_List *ilist;
-   Eina_List *slist;
-   Eina_Hash *ihash;
-   Eina_Hash *shash;
-   Eet_Test_Basic_Type sarray1[10];
-   unsigned int sarray2[5];
-   unsigned int varray1_count;
-   unsigned int *varray1;
-   unsigned int varray2_count;
-   Eet_Test_Basic_Type *varray2;
-   unsigned char uc;
-   unsigned short us;
-   unsigned int ui;
-   unsigned long long ul;
-   char *charray[10];
+   char                  c;
+   short                 s;
+   int                   i;
+   unsigned long long    l;
+   char *                str;
+   char *                istr;
+   float                 f1;
+   float                 f2;
+   float                 f3;
+   float                 f4;
+   double                d1;
+   double                d2;
+   double                d3;
+   double                d4;
+   Eina_List *           list;
+   Eina_Hash *           hash;
+   Eina_List *           ilist;
+   Eina_List *           slist;
+   Eina_Hash *           ihash;
+   Eina_Hash *           shash;
+   Eet_Test_Basic_Type   sarray1[10];
+   unsigned int          sarray2[5];
+   unsigned int          varray1_count;
+   unsigned int *        varray1;
+   unsigned int          varray2_count;
+   Eet_Test_Basic_Type * varray2;
+   unsigned char         uc;
+   unsigned short        us;
+   unsigned int          ui;
+   unsigned long long    ul;
+   char *                charray[10];
 };
 
 static int i42 = 42;
 static int i7 = 7;
 
-
 static void
-_eet_build_ex_descriptor(Eet_Data_Descriptor *edd)
+_eet_build_ex_descriptor(Eet_Data_Descriptor * edd)
 {
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Ex_Type etbt;
-   Eet_Data_Descriptor *eddb;
+   Eet_Data_Descriptor * eddb;
 
    eet_test_setup_eddc(&eddc);
    eddc.name = "Eet_Test_Basic_Type";
@@ -316,58 +392,145 @@ _eet_build_ex_descriptor(Eet_Data_Descriptor *edd)
 
    _eet_build_basic_descriptor(eddb);
 
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "c", c, EET_T_CHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "s", s, EET_T_SHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "c",
+                                 c,
+                                 EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "s",
+                                 s,
+                                 EET_T_SHORT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "i", i, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "l", l, EET_T_LONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "str", str, EET_T_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "istr", istr, EET_T_INLINED_STRING);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f1", f1, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f2", f2, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f3", f3, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "f4", f4, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d1", d1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d2", d2, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d3", d3, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "d4", d4, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "uc", uc, EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "us", us, EET_T_USHORT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ui", ui, EET_T_UINT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Eet_Test_Ex_Type, "ul", ul, EET_T_ULONG_LONG);
-   EET_DATA_DESCRIPTOR_ADD_ARRAY(edd, Eet_Test_Ex_Type, "sarray1", sarray1, eddb);
-   EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd, Eet_Test_Ex_Type, "varray2", varray2, eddb);
-   eet_data_descriptor_element_add(edd, "varray1", EET_T_INT, EET_G_VAR_ARRAY,
-                                  (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
-                                  (char *)(&(etbt.varray1_count)) - (char *)(&(etbt)), /* 0,  */NULL, NULL);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "l",
+                                 l,
+                                 EET_T_LONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "str",
+                                 str,
+                                 EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "istr",
+                                 istr,
+                                 EET_T_INLINED_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f1",
+                                 f1,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f2",
+                                 f2,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f3",
+                                 f3,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "f4",
+                                 f4,
+                                 EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d1",
+                                 d1,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d2",
+                                 d2,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d3",
+                                 d3,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "d4",
+                                 d4,
+                                 EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "uc",
+                                 uc,
+                                 EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "us",
+                                 us,
+                                 EET_T_USHORT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "ui",
+                                 ui,
+                                 EET_T_UINT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd,
+                                 Eet_Test_Ex_Type,
+                                 "ul",
+                                 ul,
+                                 EET_T_ULONG_LONG);
+   EET_DATA_DESCRIPTOR_ADD_ARRAY(edd,
+                                 Eet_Test_Ex_Type,
+                                 "sarray1",
+                                 sarray1,
+                                 eddb);
+   EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(edd,
+                                     Eet_Test_Ex_Type,
+                                     "varray2",
+                                     varray2,
+                                     eddb);
+   eet_data_descriptor_element_add(edd,
+                                   "varray1",
+                                   EET_T_INT,
+                                   EET_G_VAR_ARRAY,
+                                   (char *)(&(etbt.varray1)) - (char *)(&(etbt)),
+                                   (char *)(&(etbt.varray1_count)) -
+                                   (char *)(&(etbt)),
+                                   /* 0,  */ NULL,
+                                   NULL);
    eet_data_descriptor_element_add(edd, "sarray2", EET_T_INT, EET_G_ARRAY,
-                                  (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
-                                  /* 0,  */sizeof(etbt.sarray2)/sizeof(etbt.sarray2[0]), NULL, NULL);
+                                   (char *)(&(etbt.sarray2)) - (char *)(&(etbt)),
+                                   /* 0,  */ sizeof(etbt.sarray2) /
+                                   sizeof(etbt.sarray2[0]), NULL, NULL);
    eet_data_descriptor_element_add(edd, "charray", EET_T_STRING, EET_G_ARRAY,
-                                  (char *)(&(etbt.charray)) - (char *)(&(etbt)),
-                                  /* 0,  */sizeof(etbt.charray)/sizeof(etbt.charray[0]), NULL, NULL);
+                                   (char *)(&(etbt.charray)) - (char *)(&(etbt)),
+                                   /* 0,  */ sizeof(etbt.charray) /
+                                   sizeof(etbt.charray[0]), NULL, NULL);
    EET_DATA_DESCRIPTOR_ADD_LIST(edd, Eet_Test_Ex_Type, "list", list, edd);
    EET_DATA_DESCRIPTOR_ADD_HASH(edd, Eet_Test_Ex_Type, "hash", hash, edd);
-   eet_data_descriptor_element_add(edd, "ilist", EET_T_INT, EET_G_LIST,
-                                  (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
-                                  0, /* 0,  */NULL, NULL);
-   eet_data_descriptor_element_add(edd, "ihash", EET_T_INT, EET_G_HASH,
-                                  (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
-                                  0, /* 0,  */NULL, NULL);
+   eet_data_descriptor_element_add(edd, "ilist", EET_T_INT,    EET_G_LIST,
+                                   (char *)(&(etbt.ilist)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+   eet_data_descriptor_element_add(edd, "ihash", EET_T_INT,    EET_G_HASH,
+                                   (char *)(&(etbt.ihash)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
    eet_data_descriptor_element_add(edd, "slist", EET_T_STRING, EET_G_LIST,
-                                  (char *)(&(etbt.slist)) - (char *)(&(etbt)),
-                                  0, /* 0,  */NULL, NULL);
+                                   (char *)(&(etbt.slist)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
    eet_data_descriptor_element_add(edd, "shash", EET_T_STRING, EET_G_HASH,
-                                  (char *)(&(etbt.shash)) - (char *)(&(etbt)),
-                                  0, /* 0,  */NULL, NULL);
-}
+                                   (char *)(&(etbt.shash)) - (char *)(&(etbt)),
+                                   0, /* 0,  */ NULL, NULL);
+} /* _eet_build_ex_descriptor */
 
-static Eet_Test_Ex_Type*
-_eet_test_ex_set(Eet_Test_Ex_Type *res, int offset)
+static Eet_Test_Ex_Type *
+_eet_test_ex_set(Eet_Test_Ex_Type * res, int offset)
 {
-   int i;
+   unsigned int i;
 
-   if (!res) res = malloc( sizeof(Eet_Test_Ex_Type));
-   if (!res) return NULL;
+   if (!res)
+      res = malloc( sizeof(Eet_Test_Ex_Type));
+
+   if (!res)
+      return NULL;
 
    res->c = EET_TEST_CHAR + offset;
    res->s = EET_TEST_SHORT + offset;
@@ -389,22 +552,22 @@ _eet_test_ex_set(Eet_Test_Ex_Type *res, int offset)
    res->ihash = NULL;
    res->slist = NULL;
    res->shash = NULL;
-   for (i = 0; i < sizeof(res->charray)/sizeof(res->charray[0]); ++i)
-     res->charray[i] = NULL;
+   for (i = 0; i < sizeof(res->charray) / sizeof(res->charray[0]); ++i)
+      res->charray[i] = NULL;
 
    res->varray2 = malloc(sizeof (Eet_Test_Basic_Type) * 10);
    res->varray1 = malloc(sizeof (int) * 5);
    fail_if(!res->varray1 || !res->varray2);
    for (i = 0; i < 10; ++i)
      {
-       _eet_test_basic_set(res->sarray1 + i, i);
-       _eet_test_basic_set(res->varray2 + i, i);
+        _eet_test_basic_set(res->sarray1 + i, i);
+        _eet_test_basic_set(res->varray2 + i, i);
      }
    res->varray2_count = 10;
    for (i = 0; i < 5; ++i)
      {
-       res->sarray2[i] = i * 42 + 1;
-       res->varray1[i] = i * 42 + 1;
+        res->sarray2[i] = i * 42 + 1;
+        res->varray1[i] = i * 42 + 1;
      }
    res->varray1_count = 5;
 
@@ -414,91 +577,137 @@ _eet_test_ex_set(Eet_Test_Ex_Type *res, int offset)
    res->ul = EET_TEST_LONG_LONG + offset;
 
    return res;
-}
+} /* _eet_test_ex_set */
 
 static int
-_eet_test_ex_check(Eet_Test_Ex_Type *stuff, int offset)
+_eet_test_ex_check(Eet_Test_Ex_Type * stuff, int offset)
 {
    double tmp;
    unsigned int i;
 
-   if (!stuff) return 1;
+   if (!stuff)
+      return 1;
+
+   if (stuff->c != EET_TEST_CHAR + offset)
+      return 1;
+
+   if (stuff->s != EET_TEST_SHORT + offset)
+      return 1;
 
-   if (stuff->c != EET_TEST_CHAR + offset) return 1;
-   if (stuff->s != EET_TEST_SHORT + offset) return 1;
-   if (stuff->i != EET_TEST_INT + offset) return 1;
-   if (stuff->l != EET_TEST_LONG_LONG + offset) return 1;
-   if (strcmp(stuff->str, EET_TEST_STRING) != 0) return 1;
-   if (strcmp(stuff->istr, EET_TEST_STRING) != 0) return 1;
+   if (stuff->i != EET_TEST_INT + offset)
+      return 1;
+
+   if (stuff->l != EET_TEST_LONG_LONG + offset)
+      return 1;
+
+   if (strcmp(stuff->str, EET_TEST_STRING) != 0)
+      return 1;
+
+   if (strcmp(stuff->istr, EET_TEST_STRING) != 0)
+      return 1;
 
    tmp = stuff->f1 - (EET_TEST_FLOAT + offset);
-   if (tmp < 0) tmp = -tmp;
-   if (tmp > 0.005) return 1;
+   if (tmp < 0)
+      tmp = -tmp;
+
+   if (tmp > 0.005)
+      return 1;
 
    tmp = stuff->d1 - (EET_TEST_DOUBLE + offset);
-   if (tmp < 0) tmp = -tmp;
-   if (tmp > 0.00005) return 1;
+   if (tmp < 0)
+      tmp = -tmp;
+
+   if (tmp > 0.00005)
+      return 1;
+
+   if (stuff->f2 != -(EET_TEST_FLOAT2 + offset))
+      return 1;
+
+   if (stuff->d2 != -(EET_TEST_DOUBLE2 + offset))
+      return 1;
+
+   if (stuff->f3 != EET_TEST_FLOAT3 + offset)
+      return 1;
 
-   if (stuff->f2 != - (EET_TEST_FLOAT2 + offset)) return 1;
-   if (stuff->d2 != - (EET_TEST_DOUBLE2 + offset)) return 1;
+   if (stuff->d3 != EET_TEST_DOUBLE3 + offset)
+      return 1;
 
-   if (stuff->f3 != EET_TEST_FLOAT3 + offset) return 1;
-   if (stuff->d3 != EET_TEST_DOUBLE3 + offset) return 1;
+   if (stuff->f4 != EET_TEST_FLOAT2 + offset)
+      return 1;
 
-   if (stuff->f4 != EET_TEST_FLOAT2 + offset) return 1;
-   if (stuff->d4 != EET_TEST_DOUBLE2 + offset) return 1;
+   if (stuff->d4 != EET_TEST_DOUBLE2 + offset)
+      return 1;
 
-   if (stuff->uc != EET_TEST_CHAR + offset) return 1;
-   if (stuff->us != EET_TEST_SHORT + offset) return 1;
-   if (stuff->ui != (unsigned int) EET_TEST_INT + offset) return 1;
-   if (stuff->ul != EET_TEST_LONG_LONG + offset) return 1;
+   if (stuff->uc != EET_TEST_CHAR + offset)
+      return 1;
 
-   if (stuff->varray1_count != 5) return 1;
-   if (stuff->varray2_count != 10) return 1;
+   if (stuff->us != EET_TEST_SHORT + offset)
+      return 1;
+
+   if (stuff->ui != (unsigned int)EET_TEST_INT + offset)
+      return 1;
+
+   if (stuff->ul != EET_TEST_LONG_LONG + offset)
+      return 1;
+
+   if (stuff->varray1_count != 5)
+      return 1;
+
+   if (stuff->varray2_count != 10)
+      return 1;
 
    for (i = 0; i < 5; ++i)
-     if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
-       return 1;
+      if (stuff->sarray2[i] != i * 42 + 1 && stuff->varray1[i] != i * 42 + 1)
+         return 1;
 
    for (i = 0; i < 10; ++i)
      {
-       _eet_test_basic_check(stuff->sarray1 + i, i);
-       _eet_test_basic_check(stuff->varray2 + i, i);
+        _eet_test_basic_check(stuff->sarray1 + i, i);
+        _eet_test_basic_check(stuff->varray2 + i, i);
      }
 
    return 0;
-}
+} /* _eet_test_ex_check */
 
 static Eina_Bool
-func(__UNUSED__ const Eina_Hash *hash, const void *key, void *data, void *fdata)
+func(__UNUSED__ const Eina_Hash * hash, const void * key, void * data, void * fdata)
 {
-   int *res = fdata;
+   int * res = fdata;
 
    if (strcmp(key, EET_TEST_KEY1) != 0
-       && strcmp(key, EET_TEST_KEY2) != 0) *res = 1;
-   if (_eet_test_ex_check(data, 2)) *res = 1;
+       && strcmp(key, EET_TEST_KEY2) != 0)
+      *res = 1;
+
+   if (_eet_test_ex_check(data, 2))
+      *res = 1;
 
    return EINA_TRUE;
-}
+} /* func */
 
 static Eina_Bool
-func7(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
+func7(__UNUSED__ const Eina_Hash * hash,
+      __UNUSED__ const void *      key,
+      void *                       data,
+      void *                       fdata)
 {
-   int *res = fdata;
-   int *val;
+   int * res = fdata;
+   int * val;
 
    val = data;
-   if (!val) *res = 1;
-   if (*val != 7) *res = 1;
+   if (!val)
+      *res = 1;
+
+   if (*val != 7)
+      *res = 1;
 
    return EINA_TRUE;
-}
+} /* func7 */
 
 START_TEST(eet_test_data_type_encoding_decoding)
 {
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   void *transfert;
+   Eet_Data_Descriptor * edd;
+   Eet_Test_Ex_Type * result;
+   void * transfert;
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Ex_Type etbt;
    int size;
@@ -509,7 +718,7 @@ START_TEST(eet_test_data_type_encoding_decoding)
    _eet_test_ex_set(&etbt, 0);
    etbt.list = eina_list_prepend(etbt.list, _eet_test_ex_set(NULL, 1));
    etbt.hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_add(etbt.hash, EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
+   eina_hash_add(etbt.hash,  EET_TEST_KEY1, _eet_test_ex_set(NULL, 2));
    etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
    etbt.ihash = eina_hash_string_superfast_new(NULL);
    eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
@@ -538,7 +747,7 @@ START_TEST(eet_test_data_type_encoding_decoding)
    fail_if(_eet_test_ex_check(result, 0) != 0);
    fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
    fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
    fail_if(eina_list_data_get(result->slist) == NULL);
    fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
    fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
@@ -547,9 +756,13 @@ START_TEST(eet_test_data_type_encoding_decoding)
    fail_if(strcmp(result->charray[5], "plouf") != 0);
 
    test = 0;
-   if (result->hash) eina_hash_foreach(result->hash, func, &test);
+   if (result->hash)
+      eina_hash_foreach(result->hash, func, &test);
+
    fail_if(test != 0);
-   if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
+   if (result->ihash)
+      eina_hash_foreach(result->ihash, func7, &test);
+
    fail_if(test != 0);
 
    eet_shutdown();
@@ -557,29 +770,30 @@ START_TEST(eet_test_data_type_encoding_decoding)
 END_TEST
 
 static void
-append_string(void *data, const char *str)
+append_string(void * data, const char * str)
 {
-   char **string = data;
+   char ** string = data;
    int length;
 
-   if (!data) return ;
+   if (!data)
+      return;
 
    length = *string ? strlen(*string) : 0;
    *string = realloc(*string, strlen(str) + length + 1);
 
    memcpy((*string) + length, str, strlen(str) + 1);
-}
+} /* append_string */
 
 START_TEST(eet_test_data_type_dump_undump)
 {
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
+   Eet_Data_Descriptor * edd;
+   Eet_Test_Ex_Type * result;
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Ex_Type etbt;
-   char *transfert1;
-   char *transfert2;
-   char *string1;
-   char *string2;
+   char * transfert1;
+   char * transfert2;
+   char * string1;
+   char * string2;
    int size1;
    int size2;
    int test;
@@ -621,7 +835,8 @@ START_TEST(eet_test_data_type_dump_undump)
    eet_data_text_dump(transfert1, size1, append_string, &string1);
    fail_if(!string1);
 
-   transfert2 = eet_data_text_undump(string1, string1 ? strlen(string1) : 0, &size2);
+   transfert2 = eet_data_text_undump(string1, string1 ? strlen(
+                                        string1) : 0, &size2);
    fail_if(!transfert2 && size2 <= 0);
 
    string2 = NULL;
@@ -636,7 +851,7 @@ START_TEST(eet_test_data_type_dump_undump)
    fail_if(_eet_test_ex_check(result, 0) != 0);
    fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
    fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
    fail_if(eina_list_data_get(result->slist) == NULL);
    fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
    fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
@@ -644,9 +859,13 @@ START_TEST(eet_test_data_type_dump_undump)
    fail_if(strcmp(result->charray[0], "test") != 0);
 
    test = 0;
-   if (result->hash) eina_hash_foreach(result->hash, func, &test);
+   if (result->hash)
+      eina_hash_foreach(result->hash, func, &test);
+
    fail_if(test != 0);
-   if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
+   if (result->ihash)
+      eina_hash_foreach(result->ihash, func7, &test);
+
    fail_if(test != 0);
 
    eet_shutdown();
@@ -655,10 +874,10 @@ END_TEST
 
 START_TEST(eet_file_simple_write)
 {
-   const char *buffer = "Here is a string of data to save !";
-   Eet_File *ef;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   const char * buffer = "Here is a string of data to save !";
+   Eet_File * ef;
+   char * test;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    int size;
 
    eet_init();
@@ -671,6 +890,8 @@ START_TEST(eet_file_simple_write)
    fail_if(!ef);
 
    fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 1));
+   fail_if(!eet_alias(ef, "keys/alias", "keys/tests", 0));
+   fail_if(!eet_alias(ef, "keys/alias2", "keys/alias", 1));
 
    fail_if(eet_mode_get(ef) != EET_FILE_MODE_WRITE);
 
@@ -685,12 +906,18 @@ START_TEST(eet_file_simple_write)
 
    test = eet_read(ef, "keys/tests", &size);
    fail_if(!test);
-   fail_if(size != (int) strlen(buffer) + 1);
+   fail_if(size != (int)strlen(buffer) + 1);
 
    fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
 
+   test = eet_read(ef, "keys/alias2", &size);
+   fail_if(!test);
+   fail_if(size != (int)strlen(buffer) + 1);
+
+   fail_if(eet_read_direct(ef, "key/alias2", &size));
+
    fail_if(eet_mode_get(ef) != EET_FILE_MODE_READ);
-   fail_if(eet_num_entries(ef) != 1);
+   fail_if(eet_num_entries(ef) != 3);
 
    eet_close(ef);
 
@@ -700,7 +927,7 @@ START_TEST(eet_file_simple_write)
 
    test = eet_read(ef, "keys/tests", &size);
    fail_if(!test);
-   fail_if(size != (int) strlen(buffer) + 1);
+   fail_if(size != (int)strlen(buffer) + 1);
 
    fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
 
@@ -709,17 +936,18 @@ START_TEST(eet_file_simple_write)
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_file_data_test)
 {
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
-   Eet_Dictionary *ed;
-   Eet_File *ef;
-   char **list;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   Eet_Data_Descriptor * edd;
+   Eet_Test_Ex_Type * result;
+   Eet_Dictionary * ed;
+   Eet_File * ef;
+   char ** list;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Ex_Type etbt;
    int size;
@@ -809,7 +1037,7 @@ START_TEST(eet_file_data_test)
    fail_if(_eet_test_ex_check(result, 0) != 0);
    fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
    fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
    fail_if(eina_list_data_get(result->slist) == NULL);
    fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
    fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
@@ -817,16 +1045,24 @@ START_TEST(eet_file_data_test)
    fail_if(strcmp(result->charray[0], "test") != 0);
 
    test = 0;
-   if (result->hash) eina_hash_foreach(result->hash, func, &test);
+   if (result->hash)
+      eina_hash_foreach(result->hash, func, &test);
+
    fail_if(test != 0);
-   if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
+   if (result->ihash)
+      eina_hash_foreach(result->ihash, func7, &test);
+
    fail_if(test != 0);
 
    list = eet_list(ef, "keys/*", &size);
    fail_if(eet_num_entries(ef) != 2);
    fail_if(size != 2);
-   fail_if(!(strcmp(list[0], EET_TEST_FILE_KEY1) == 0 && strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
-          && !(strcmp(list[0], EET_TEST_FILE_KEY2) == 0 && strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
+   fail_if(!(strcmp(list[0],
+                    EET_TEST_FILE_KEY1) == 0 &&
+             strcmp(list[1], EET_TEST_FILE_KEY2) == 0)
+           && !(strcmp(list[0],
+                       EET_TEST_FILE_KEY2) == 0 &&
+                strcmp(list[1], EET_TEST_FILE_KEY1) == 0));
    free(list);
 
    fail_if(eet_delete(ef, NULL) != 0);
@@ -851,18 +1087,19 @@ START_TEST(eet_file_data_test)
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_file_data_dump_test)
 {
-   Eet_Data_Descriptor *edd;
-   Eet_Test_Ex_Type *result;
+   Eet_Data_Descriptor * edd;
+   Eet_Test_Ex_Type * result;
    Eet_Data_Descriptor_Class eddc;
    Eet_Test_Ex_Type etbt;
-   Eet_File *ef;
-   char *string1;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   Eet_File * ef;
+   char * string1;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    int test;
 
    eet_init();
@@ -884,7 +1121,9 @@ START_TEST(eet_file_data_dump_test)
    memset(&etbt.charray, 0, sizeof(etbt.charray));
    etbt.charray[0] = "test";
 
-   eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
+   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
+                                          "Eet_Test_Ex_Type",
+                                           sizeof(Eet_Test_Ex_Type));
 
    edd = eet_data_descriptor_file_new(&eddc);
    fail_if(!edd);
@@ -925,7 +1164,7 @@ START_TEST(eet_file_data_dump_test)
    fail_if(_eet_test_ex_check(result, 0) != 0);
    fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
    fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
    fail_if(eina_list_data_get(result->slist) == NULL);
    fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
    fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
@@ -933,22 +1172,27 @@ START_TEST(eet_file_data_dump_test)
    fail_if(strcmp(result->charray[0], "test") != 0);
 
    test = 0;
-   if (result->hash) eina_hash_foreach(result->hash, func, &test);
+   if (result->hash)
+      eina_hash_foreach(result->hash, func, &test);
+
    fail_if(test != 0);
-   if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
+   if (result->ihash)
+      eina_hash_foreach(result->ihash, func7, &test);
+
    fail_if(test != 0);
 
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_image)
 {
-   Eet_File *ef;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   unsigned int *data;
+   Eet_File * ef;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
+   unsigned int * data;
    int compress;
    int quality;
    int result;
@@ -963,57 +1207,106 @@ START_TEST(eet_image)
    ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
    fail_if(!ef);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "0", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                0, 100, 0);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "0",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 100,
+                                 0);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "1", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                5, 100, 0);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "1",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 5,
+                                 100,
+                                 0);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "2", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                9, 100, 0);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "2",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 9,
+                                 100,
+                                 0);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "3", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                0, 100, 1);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "3",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 100,
+                                 1);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "4", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                0, 60, 1);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "4",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 60,
+                                 1);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "5", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                0, 10, 1);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "5",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 10,
+                                 1);
    fail_if(result == 0);
 
-   result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "6", test_noalpha.color,
-                                test_noalpha.w, test_noalpha.h, test_noalpha.alpha,
-                                0, 0, 1);
+   result = eet_data_image_write(ef,
+                                 EET_TEST_FILE_IMAGE "6",
+                                 test_noalpha.color,
+                                 test_noalpha.w,
+                                 test_noalpha.h,
+                                 test_noalpha.alpha,
+                                 0,
+                                 0,
+                                 1);
    fail_if(result == 0);
 
    result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "7", test_alpha.color,
-                                test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                9, 100, 0);
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 9, 100, 0);
    fail_if(result == 0);
 
    result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "8", test_alpha.color,
-                                test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                0, 80, 1);
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 0, 80, 1);
    fail_if(result == 0);
 
    result = eet_data_image_write(ef, EET_TEST_FILE_IMAGE "9", test_alpha.color,
-                                test_alpha.w, test_alpha.h, test_alpha.alpha,
-                                0, 100, 1);
+                                 test_alpha.w, test_alpha.h, test_alpha.alpha,
+                                 0, 100, 1);
    fail_if(result == 0);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "2",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1023,7 +1316,14 @@ START_TEST(eet_image)
    fail_if(data[0] != test_noalpha.color[0]);
    free(data);
 
-   result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "2",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
    fail_if(result == 0);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1037,7 +1337,14 @@ START_TEST(eet_image)
    ef = eet_open(file, EET_FILE_MODE_READ);
    fail_if(!ef);
 
-   result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "0", &w, &h, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "0",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
    fail_if(result == 0);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1047,7 +1354,18 @@ START_TEST(eet_image)
 
    data = malloc(w * h * 4);
    fail_if(data == NULL);
-   result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 4, 4, data, 2, 2, w * 4, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_read_to_surface(ef,
+                                           EET_TEST_FILE_IMAGE "0",
+                                           4,
+                                           4,
+                                           data,
+                                           2,
+                                           2,
+                                           w * 4,
+                                           &alpha,
+                                           &compress,
+                                           &quality,
+                                           &lossy);
    fail_if(result != 1);
    fail_if(alpha != test_noalpha.alpha);
    fail_if(compress != 0);
@@ -1058,7 +1376,18 @@ START_TEST(eet_image)
 
    data = malloc(w * h * 4);
    fail_if(data == NULL);
-   result = eet_data_image_read_to_surface(ef, EET_TEST_FILE_IMAGE "0", 0, 0, data, w, h, w * 4, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_read_to_surface(ef,
+                                           EET_TEST_FILE_IMAGE "0",
+                                           0,
+                                           0,
+                                           data,
+                                           w,
+                                           h,
+                                           w * 4,
+                                           &alpha,
+                                           &compress,
+                                           &quality,
+                                           &lossy);
    fail_if(result != 1);
    fail_if(alpha != test_noalpha.alpha);
    fail_if(compress != 0);
@@ -1067,7 +1396,14 @@ START_TEST(eet_image)
    fail_if(data[0] != test_noalpha.color[0]);
    free(data);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "1", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "1",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1078,7 +1414,14 @@ START_TEST(eet_image)
    fail_if(data[0] != test_noalpha.color[0]);
    free(data);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "2", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "2",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1088,7 +1431,14 @@ START_TEST(eet_image)
    fail_if(data[0] != test_noalpha.color[0]);
    free(data);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "3", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "3",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1096,7 +1446,14 @@ START_TEST(eet_image)
    fail_if(lossy != 1);
    free(data);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "5", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "5",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1104,7 +1461,14 @@ START_TEST(eet_image)
    fail_if(lossy != 1);
    free(data);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "6", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "6",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_noalpha.w);
    fail_if(h != test_noalpha.h);
@@ -1112,7 +1476,14 @@ START_TEST(eet_image)
    fail_if(lossy != 1);
    free(data);
 
-   result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "7",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
    fail_if(result == 0);
    fail_if(w != test_alpha.w);
    fail_if(h != test_alpha.h);
@@ -1120,7 +1491,14 @@ START_TEST(eet_image)
    fail_if(compress != 9);
    fail_if(lossy != 0);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "7", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "7",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_alpha.w);
    fail_if(h != test_alpha.h);
@@ -1130,14 +1508,28 @@ START_TEST(eet_image)
    fail_if(data[0] != test_alpha.color[0]);
    free(data);
 
-   result = eet_data_image_header_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
+   result = eet_data_image_header_read(ef,
+                                       EET_TEST_FILE_IMAGE "9",
+                                       &w,
+                                       &h,
+                                       &alpha,
+                                       &compress,
+                                       &quality,
+                                       &lossy);
    fail_if(result == 0);
    fail_if(w != test_alpha.w);
    fail_if(h != test_alpha.h);
    fail_if(alpha != test_alpha.alpha);
    fail_if(lossy != 1);
 
-   data = eet_data_image_read(ef, EET_TEST_FILE_IMAGE "9", &w, &h, &alpha, &compress, &quality, &lossy);
+   data = eet_data_image_read(ef,
+                              EET_TEST_FILE_IMAGE "9",
+                              &w,
+                              &h,
+                              &alpha,
+                              &compress,
+                              &quality,
+                              &lossy);
    fail_if(data == NULL);
    fail_if(w != test_alpha.w);
    fail_if(h != test_alpha.h);
@@ -1150,7 +1542,8 @@ START_TEST(eet_image)
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 #define IM0 0x00112233
@@ -1160,10 +1553,10 @@ END_TEST
 
 START_TEST(eet_small_image)
 {
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    unsigned int image[4];
-   unsigned int *data;
-   Eet_File *ef;
+   unsigned int * data;
+   Eet_File * ef;
    unsigned int w;
    unsigned int h;
    int alpha;
@@ -1192,7 +1585,14 @@ START_TEST(eet_small_image)
    ef = eet_open(file, EET_FILE_MODE_READ);
    fail_if(!ef);
 
-   data = (unsigned int*) eet_data_image_read(ef, "/images/test", &w, &h, &alpha, &compression, &quality, &lossy);
+   data = (unsigned int *)eet_data_image_read(ef,
+                                              "/images/test",
+                                              &w,
+                                              &h,
+                                              &alpha,
+                                              &compression,
+                                              &quality,
+                                              &lossy);
    fail_if(data == NULL);
 
    eet_close(ef);
@@ -1207,18 +1607,19 @@ START_TEST(eet_small_image)
    free(data);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_identity_simple)
 {
-   const char *buffer = "Here is a string of data to save !";
-   const void *tmp;
-   Eet_File *ef;
-   Eet_Key *k;
-   FILE *noread;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   const char * buffer = "Here is a string of data to save !";
+   const void * tmp;
+   Eet_File * ef;
+   Eet_Key * k;
+   FILE * noread;
+   char * test;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    int size;
    int fd;
 
@@ -1248,7 +1649,7 @@ START_TEST(eet_identity_simple)
 
    test = eet_read(ef, "keys/tests", &size);
    fail_if(!test);
-   fail_if(size != (int) strlen(buffer) + 1);
+   fail_if(size != (int)strlen(buffer) + 1);
 
    fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
 
@@ -1283,12 +1684,13 @@ START_TEST(eet_identity_simple)
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_identity_open_simple)
 {
-   Eet_Key *k = NULL;
+   Eet_Key * k = NULL;
 
    eet_init();
 
@@ -1297,15 +1699,17 @@ START_TEST(eet_identity_open_simple)
    k = eet_identity_open("cert.pem", "key.pem", NULL);
    fail_if(!k);
 
-   if (k) eet_identity_close(k);
+   if (k)
+      eet_identity_close(k);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 START_TEST(eet_identity_open_pkcs8)
 {
-   Eet_Key *k = NULL;
+   Eet_Key * k = NULL;
 
    eet_init();
 
@@ -1314,36 +1718,45 @@ START_TEST(eet_identity_open_pkcs8)
    k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL);
    fail_if(!k);
 
-   if (k) eet_identity_close(k);
+   if (k)
+      eet_identity_close(k);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
-static int pass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
+static int pass_get(char *            pass,
+                    int               size,
+                    __UNUSED__ int    rwflags,
+                    __UNUSED__ void * u)
 {
    memset(pass, 0, size);
 
-   if (strlen("password") > size)
-     return 0;
+   if ((int)strlen("password") > size)
+      return 0;
+
    snprintf(pass, size, "%s", "password");
    return strlen(pass);
-}
+} /* pass_get */
 
-static int badpass_get(char *pass, int size, __UNUSED__ int rwflags, __UNUSED__ void *u)
+static int badpass_get(char *            pass,
+                       int               size,
+                       __UNUSED__ int    rwflags,
+                       __UNUSED__ void * u)
 {
    memset(pass, 0, size);
 
-   if (strlen("bad password") > size)
-     return 0;
+   if ((int)strlen("bad password") > size)
+      return 0;
+
    snprintf(pass, size, "%s", "bad password");
    return strlen(pass);
-}
-
+} /* badpass_get */
 
 START_TEST(eet_identity_open_pkcs8_enc)
 {
-   Eet_Key *k = NULL;
+   Eet_Key * k = NULL;
 
    eet_init();
 
@@ -1352,17 +1765,20 @@ START_TEST(eet_identity_open_pkcs8_enc)
    k = eet_identity_open("cert.pem", "key_enc.pem", NULL);
    fail_if(k);
 
-   if (k) eet_identity_close(k);
+   if (k)
+      eet_identity_close(k);
 
    k = eet_identity_open("cert.pem", "key_enc.pem", &badpass_get);
    fail_if(k);
 
-   if (k) eet_identity_close(k);
+   if (k)
+      eet_identity_close(k);
 
    k = eet_identity_open("cert.pem", "key_enc.pem", &pass_get);
    fail_if(!k);
 
-   if (k) eet_identity_close(k);
+   if (k)
+      eet_identity_close(k);
 
    eet_shutdown();
 }
@@ -1370,12 +1786,12 @@ END_TEST
 
 START_TEST(eet_cipher_decipher_simple)
 {
-   const char *buffer = "Here is a string of data to save !";
-   const char *key = "This is a crypto key";
-   const char *key_bad = "This is another crypto key";
-   Eet_File *ef;
-   char *test;
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   const char * buffer = "Here is a string of data to save !";
+   const char * key = "This is a crypto key";
+   const char * key_bad = "This is another crypto key";
+   Eet_File * ef;
+   char * test;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    int size;
 
    eet_init();
@@ -1387,7 +1803,8 @@ START_TEST(eet_cipher_decipher_simple)
    ef = eet_open(file, EET_FILE_MODE_WRITE);
    fail_if(!ef);
 
-   fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0, key));
+   fail_if(!eet_write_cipher(ef, "keys/tests", buffer, strlen(buffer) + 1, 0,
+                             key));
 
    eet_close(ef);
 
@@ -1397,7 +1814,7 @@ START_TEST(eet_cipher_decipher_simple)
 
    test = eet_read_cipher(ef, "keys/tests", &size, key);
    fail_if(!test);
-   fail_if(size != (int) strlen(buffer) + 1);
+   fail_if(size != (int)strlen(buffer) + 1);
 
    fail_if(memcmp(test, buffer, strlen(buffer) + 1) != 0);
 
@@ -1409,46 +1826,80 @@ START_TEST(eet_cipher_decipher_simple)
 
    test = eet_read_cipher(ef, "keys/tests", &size, key_bad);
 
-   if (size == (int) strlen(buffer) + 1)
-     fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
+   if (size == (int)strlen(buffer) + 1)
+      fail_if(memcmp(test, buffer, strlen(buffer) + 1) == 0);
 
    eet_close(ef);
 
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
+#ifdef EFL_HAVE_THREADS
+
 static Eina_Bool open_worker_stop;
-static void*
-open_close_worker(void* path)
+
+# ifdef EFL_HAVE_POSIX_THREADS
+
+static void *
+open_close_worker(void * path)
 {
    while (!open_worker_stop)
      {
-       Eet_File* ef = eet_open((char const*)path, EET_FILE_MODE_READ);
-       if (ef == NULL)
-         {
-            pthread_exit("eet_open() failed");
-         }
-       else
-         {
-            Eet_Error err_code = eet_close(ef);
-            if (err_code != EET_ERROR_NONE)
-              pthread_exit("eet_close() failed");
-         }
+        Eet_File * ef = eet_open((char const *)path, EET_FILE_MODE_READ);
+        if (ef == NULL)
+           pthread_exit("eet_open() failed");
+        else
+          {
+             Eet_Error err_code = eet_close(ef);
+             if (err_code != EET_ERROR_NONE)
+                pthread_exit("eet_close() failed");
+          }
      }
 
    pthread_exit(NULL);
-}
+} /* open_close_worker */
+
+# else /* ifdef EFL_HAVE_POSIX_THREADS */
+
+static unsigned int __stdcall
+open_close_worker(void * path)
+{
+   while (!open_worker_stop)
+     {
+        Eet_File * ef = eet_open((char const *)path, EET_FILE_MODE_READ);
+        if (ef == NULL)
+           _endthreadex(-1);
+        else
+          {
+             Eet_Error err_code = eet_close(ef);
+             if (err_code != EET_ERROR_NONE)
+                _endthreadex(-2);
+          }
+     }
+
+   _endthreadex(0);
+} /* open_close_worker */
+
+# endif /* ifdef EFL_HAVE_POSIX_THREADS */
 
 START_TEST(eet_cache_concurrency)
 {
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
-   const char *buffer = "test data";
-   Eet_File *ef;
-   void *thread_ret;
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
+   const char * buffer = "test data";
+   Eet_File * ef;
+   void * thread_ret;
    unsigned int n;
+# ifdef EFL_HAVE_POSIX_THREADS
+   pthread_t thread;
+# else /* ifdef EFL_HAVE_POSIX_THREADS */
+   uintptr_t thread;
+   unsigned int thread_id;
+   DWORD ret;
+# endif /* ifdef EFL_HAVE_POSIX_THREADS */
 
    eet_init();
 
@@ -1460,39 +1911,50 @@ START_TEST(eet_cache_concurrency)
 
    /* start a thread that repeatedly opens and closes a file */
    open_worker_stop = 0;
-   pthread_t thread;
+# ifdef EFL_HAVE_POSIX_THREADS
    pthread_create(&thread, NULL, open_close_worker, file);
-
+# else /* ifdef EFL_HAVE_POSIX_THREADS */
+   thread = _beginthreadex(NULL, 0, open_close_worker, file, 0, &thread_id);
+# endif /* ifdef EFL_HAVE_POSIX_THREADS */
    /* clear the cache repeatedly in this thread */
    for (n = 0; n < 50000; ++n)
      {
-       eet_clearcache();
+        eet_clearcache();
      }
 
    /* join the other thread, and fail if it returned an error message */
    open_worker_stop = 1;
+# ifdef EFL_HAVE_POSIX_THREADS
    fail_if(pthread_join(thread, &thread_ret) != 0);
-   fail_unless(thread_ret == NULL, (char const*)thread_ret);
+   fail_unless(thread_ret == NULL, (char const *)thread_ret);
+# else /* ifdef EFL_HAVE_POSIX_THREADS */
+   ret = WaitForSingleObject((HANDLE)thread, INFINITE);
+   fail_if(ret != WAIT_OBJECT_0);
+   fail_if(GetExitCodeThread((HANDLE)thread, &ret) == FALSE);
+   fail_if(ret != 0);
+# endif /* ifdef EFL_HAVE_POSIX_THREADS */
 
    fail_if(unlink(file) != 0);
    eet_shutdown();
 }
 END_TEST
 
-typedef struct _Eet_Connection_Data Eet_Connection_Data;
+#endif /* EFL_HAVE_THREADS */
+
+typedef struct _Eet_Connection_Data   Eet_Connection_Data;
 struct _Eet_Connection_Data
 {
-   Eet_Connection *conn;
-   Eet_Data_Descriptor *edd;
-   Eina_Bool test;
+   Eet_Connection *      conn;
+   Eet_Data_Descriptor * edd;
+   Eina_Bool             test;
 };
 
 static Eina_Bool
-_eet_connection_read(const void *eet_data, size_t size, void *user_data)
+_eet_connection_read(const void * eet_data, size_t size, void * user_data)
 {
-   Eet_Connection_Data *dt = user_data;
-   Eet_Test_Ex_Type *result;
-   Eet_Node *node;
+   Eet_Connection_Data * dt = user_data;
+   Eet_Test_Ex_Type * result;
+   Eet_Node * node;
    int test;
 
    result = eet_data_descriptor_decode(dt->edd, eet_data, size);
@@ -1503,7 +1965,7 @@ _eet_connection_read(const void *eet_data, size_t size, void *user_data)
    fail_if(_eet_test_ex_check(result, 0) != 0);
    fail_if(_eet_test_ex_check(eina_list_data_get(result->list), 1) != 0);
    fail_if(eina_list_data_get(result->ilist) == NULL);
-   fail_if(*((int*)eina_list_data_get(result->ilist)) != 42);
+   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
    fail_if(eina_list_data_get(result->slist) == NULL);
    fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
    fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
@@ -1511,46 +1973,51 @@ _eet_connection_read(const void *eet_data, size_t size, void *user_data)
    fail_if(strcmp(result->charray[0], "test") != 0);
 
    test = 0;
-   if (result->hash) eina_hash_foreach(result->hash, func, &test);
+   if (result->hash)
+      eina_hash_foreach(result->hash, func, &test);
+
    fail_if(test != 0);
-   if (result->ihash) eina_hash_foreach(result->ihash, func7, &test);
+   if (result->ihash)
+      eina_hash_foreach(result->ihash, func7, &test);
+
    fail_if(test != 0);
 
    if (!dt->test)
      {
-       dt->test = EINA_TRUE;
-       fail_if(!eet_connection_node_send(dt->conn, node, NULL));
+        dt->test = EINA_TRUE;
+        fail_if(!eet_connection_node_send(dt->conn, node, NULL));
      }
 
    return EINA_TRUE;
-}
+} /* _eet_connection_read */
 
 static Eina_Bool
-_eet_connection_write(const void *data, size_t size, void *user_data)
+_eet_connection_write(const void * data, size_t size, void * user_data)
 {
-   Eet_Connection_Data *dt = user_data;
+   Eet_Connection_Data * dt = user_data;
    int still;
 
    if (!dt->test)
      {
-       int step = size / 3;
+        int step = size / 3;
 
-       eet_connection_received(dt->conn, data, step);
-       eet_connection_received(dt->conn, (char*) data + step, step);
-       size -= 2 * step;
-       still = eet_connection_received(dt->conn, (char*) data + 2 * step, size);
+        eet_connection_received(dt->conn, data,                step);
+        eet_connection_received(dt->conn, (char *)data + step, step);
+        size -= 2 * step;
+        still = eet_connection_received(dt->conn, (char *)data + 2 * step, size);
      }
    else
-     still = eet_connection_received(dt->conn, data, size);
+      still = eet_connection_received(dt->conn, data, size);
+
    fail_if(still);
 
    return EINA_TRUE;
-}
+} /* _eet_connection_write */
 
 START_TEST(eet_connection_check)
 {
-   Eet_Connection *conn;
-   Eet_Data_Descriptor *edd;
+   Eet_Connection * conn;
+   Eet_Data_Descriptor * edd;
    Eet_Data_Descriptor_Class eddc;
    Eet_Connection_Data ecd;
    Eet_Test_Ex_Type etbt;
@@ -1575,7 +2042,9 @@ START_TEST(eet_connection_check)
    memset(&etbt.charray, 0, sizeof(etbt.charray));
    etbt.charray[0] = "test";
 
-   eet_eina_file_data_descriptor_class_set(&eddc, "Eet_Test_Ex_Type", sizeof(Eet_Test_Ex_Type));
+   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
+                                          "Eet_Test_Ex_Type",
+                                           sizeof(Eet_Test_Ex_Type));
 
    edd = eet_data_descriptor_file_new(&eddc);
    fail_if(!edd);
@@ -1612,7 +2081,7 @@ struct _Eet_5FP
    Eina_F32p32 f1;
    Eina_F32p32 f0;
 };
-typedef struct _Eet_5FP Eet_5FP;
+typedef struct _Eet_5FP   Eet_5FP;
 
 struct _Eet_5DBL
 {
@@ -1622,17 +2091,17 @@ struct _Eet_5DBL
    double f1;
    double f0;
 };
-typedef struct _Eet_5DBL Eet_5DBL;
+typedef struct _Eet_5DBL   Eet_5DBL;
 
 START_TEST(eet_fp)
 {
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd_5FP;
-   Eet_Data_Descriptor *edd_5DBL;
+   Eet_Data_Descriptor * edd_5FP;
+   Eet_Data_Descriptor * edd_5DBL;
    Eet_5FP origin;
-   Eet_5DBL *convert;
-   Eet_5FP *build;
-   void *blob;
+   Eet_5DBL * convert;
+   Eet_5FP * build;
+   void * blob;
    int size;
 
    eet_init();
@@ -1642,18 +2111,18 @@ START_TEST(eet_fp)
 
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8",  fp8,  EET_T_F8P24);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1",   f1,   EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0",   f0,   EET_T_F32P32);
 
-   eet_eina_stream_data_descriptor_class_set(&eddc, "Eet_5FP", sizeof (Eet_5DBL));
+   eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
    edd_5DBL = eet_data_descriptor_stream_new(&eddc);
 
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8",  fp8,  EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1",   f1,   EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0",   f0,   EET_T_DOUBLE);
 
    origin.fp32 = eina_f32p32_double_from(1.125);
    origin.fp16 = eina_f16p16_int_from(2000);
@@ -1688,14 +2157,14 @@ END_TEST
 
 START_TEST(eet_file_fp)
 {
-   char *file = strdup("/tmp/eet_suite_testXXXXXX");
+   char * file = strdup("/tmp/eet_suite_testXXXXXX");
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd_5FP;
-   Eet_Data_Descriptor *edd_5DBL;
-   Eet_File *ef;
+   Eet_Data_Descriptor * edd_5FP;
+   Eet_Data_Descriptor * edd_5DBL;
+   Eet_File * ef;
    Eet_5FP origin;
-   Eet_5DBL *convert;
-   Eet_5FP *build;
+   Eet_5DBL * convert;
+   Eet_5FP * build;
 
    eet_init();
 
@@ -1704,18 +2173,18 @@ START_TEST(eet_file_fp)
 
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp32", fp32, EET_T_F32P32);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp16", fp16, EET_T_F16P16);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8", fp8, EET_T_F8P24);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1", f1, EET_T_F32P32);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0", f0, EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "fp8",  fp8,  EET_T_F8P24);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f1",   f1,   EET_T_F32P32);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5FP, Eet_5FP, "f0",   f0,   EET_T_F32P32);
 
-   eet_eina_file_data_descriptor_class_set(&eddc, "Eet_5FP", sizeof (Eet_5DBL));
+   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "Eet_5FP", sizeof (Eet_5DBL));
    edd_5DBL = eet_data_descriptor_file_new(&eddc);
 
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp32", fp32, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp16", fp16, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8", fp8, EET_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1", f1, EET_T_DOUBLE);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0", f0, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "fp8",  fp8,  EET_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f1",   f1,   EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_5DBL, Eet_5DBL, "f0",   f0,   EET_T_DOUBLE);
 
    origin.fp32 = eina_f32p32_double_from(1.125);
    origin.fp16 = eina_f16p16_int_from(2000);
@@ -1753,48 +2222,50 @@ START_TEST(eet_file_fp)
    fail_if(unlink(file) != 0);
 
    eet_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
-typedef struct _Eet_Union_Test Eet_Union_Test;
-typedef struct _Eet_Variant_Test Eet_Variant_Test;
-typedef struct _Eet_Variant_Type Eet_Variant_Type;
-typedef struct _Eet_Inherit_Test1 Eet_Inherit_Test1;
-typedef struct _Eet_Inherit_Test2 Eet_Inherit_Test2;
-typedef struct _Eet_Inherit_Test3 Eet_Inherit_Test3;
-typedef struct _Eet_St1 Eet_St1;
-typedef struct _Eet_St2 Eet_St2;
-typedef struct _Eet_St3 Eet_St3;
-typedef struct _Eet_List Eet_List;
+typedef struct _Eet_Union_Test      Eet_Union_Test;
+typedef struct _Eet_Variant_Test    Eet_Variant_Test;
+typedef struct _Eet_Variant_Type    Eet_Variant_Type;
+typedef struct _Eet_Inherit_Test1   Eet_Inherit_Test1;
+typedef struct _Eet_Inherit_Test2   Eet_Inherit_Test2;
+typedef struct _Eet_Inherit_Test3   Eet_Inherit_Test3;
+typedef struct _Eet_St1             Eet_St1;
+typedef struct _Eet_St2             Eet_St2;
+typedef struct _Eet_St3             Eet_St3;
+typedef struct _Eet_List            Eet_List;
 
 typedef enum _Eet_Union
 {
-  EET_UNKNOWN,
-  EET_ST1,
-  EET_ST2,
-  EET_ST3
+   EET_UNKNOWN,
+   EET_ST1,
+   EET_ST2,
+   EET_ST3
 } Eet_Union;
 
-struct {
-   Eet_Union u;
-   const char *name;
+struct
+{
+   Eet_Union    u;
+   const char * name;
 } eet_mapping[] = {
-  { EET_ST1, "ST1" },
-  { EET_ST2, "ST2" },
-  { EET_ST3, "ST3" },
-  { EET_UNKNOWN, NULL }
+   { EET_ST1, "ST1" },
+   { EET_ST2, "ST2" },
+   { EET_ST3, "ST3" },
+   { EET_UNKNOWN, NULL }
 };
 
 struct _Eet_St1
 {
    double val1;
-   int stuff;
-   char *s1;
+   int    stuff;
+   char * s1;
 };
 
 struct _Eet_St2
 {
-   Eina_Bool b1;
+   Eina_Bool          b1;
    unsigned long long v1;
 };
 
@@ -1816,139 +2287,150 @@ struct _Eet_Union_Test
 
 struct _Eet_Variant_Type
 {
-   const char *type;
-   Eina_Bool unknow : 1;
+   const char * type;
+   Eina_Bool    unknow : 1;
 };
 
 struct _Eet_Variant_Test
 {
    Eet_Variant_Type t;
 
-   void *data;
-   Eina_List *data_list;
+   void *           data;
+   Eina_List *      data_list;
 };
 
 struct _Eet_Inherit_Test1
 {
    Eet_Union type;
-   Eet_St1 st1;
+   Eet_St1   st1;
 };
 struct _Eet_Inherit_Test2
 {
    Eet_Union type;
-   Eet_St2 st2;
+   Eet_St2   st2;
 };
 struct _Eet_Inherit_Test3
 {
    Eet_Union type;
-   Eet_St3 st3;
+   Eet_St3   st3;
 };
 
 struct _Eet_List
 {
-   Eina_List *list;
+   Eina_List * list;
 };
 
 static const char *
-_eet_union_type_get(const void *data, Eina_Bool *unknow)
+_eet_union_type_get(const void * data, Eina_Bool * unknow)
 {
-   const Eet_Union *u = data;
+   const Eet_Union * u = data;
    int i;
 
-   if (unknow) *unknow = EINA_FALSE;
+   if (unknow)
+      *unknow = EINA_FALSE;
+
    for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (*u == eet_mapping[i].u)
-       return eet_mapping[i].name;
+      if (*u == eet_mapping[i].u)
+         return eet_mapping[i].name;
+
+   if (unknow)
+      *unknow = EINA_TRUE;
 
-   if (unknow) *unknow = EINA_TRUE;
    return NULL;
-}
+} /* _eet_union_type_get */
 
 static Eina_Bool
-_eet_union_type_set(const char *type, void *data, Eina_Bool unknow)
+_eet_union_type_set(const char * type, void * data, Eina_Bool unknow)
 {
-   Eet_Union *u = data;
+   Eet_Union * u = data;
    int i;
 
-   if (unknow) return EINA_FALSE;
+   if (unknow)
+      return EINA_FALSE;
 
    for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (strcmp(eet_mapping[i].name, type) == 0)
-       {
-         *u = eet_mapping[i].u;
-         return EINA_TRUE;
-       }
+      if (strcmp(eet_mapping[i].name, type) == 0)
+        {
+           *u = eet_mapping[i].u;
+           return EINA_TRUE;
+        }
 
    return EINA_FALSE;
-}
+} /* _eet_union_type_set */
 
 static const char *
-_eet_variant_type_get(const void *data, Eina_Bool *unknow)
+_eet_variant_type_get(const void * data, Eina_Bool * unknow)
 {
-   const Eet_Variant_Type *type = data;
+   const Eet_Variant_Type * type = data;
    int i;
 
-   if (unknow) *unknow = type->unknow;
+   if (unknow)
+      *unknow = type->unknow;
+
    for (i = 0; eet_mapping[i].name != NULL; ++i)
-     if (strcmp(type->type, eet_mapping[i].name) == 0)
-       return eet_mapping[i].name;
+      if (strcmp(type->type, eet_mapping[i].name) == 0)
+         return eet_mapping[i].name;
+
+   if (unknow)
+      *unknow = EINA_FALSE;
 
-   if (unknow) *unknow = EINA_FALSE;
    return type->type;
-}
+} /* _eet_variant_type_get */
 
 static Eina_Bool
-_eet_variant_type_set(const char *type, void *data, Eina_Bool unknow)
+_eet_variant_type_set(const char * type, void * data, Eina_Bool unknow)
 {
-   Eet_Variant_Type *vt = data;
+   Eet_Variant_Type * vt = data;
 
    vt->type = type;
    vt->unknow = unknow;
    return EINA_TRUE;
-}
+} /* _eet_variant_type_set */
 
-static Eet_Data_Descriptor*
+static Eet_Data_Descriptor *
 _eet_st1_dd(void)
 {
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
+   Eet_Data_Descriptor * res;
 
    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St1);
    res = eet_data_descriptor_stream_new(&eddc);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1", val1, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "val1",  val1,  EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "stuff", stuff, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1", s1, EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St1, "s1",    s1,    EET_T_STRING);
 
    return res;
-}
+} /* _eet_st1_dd */
 
 static void
-_eet_st1_set(Eet_St1 *st1, int i)
+_eet_st1_set(Eet_St1 * st1, int i)
 {
    st1->val1 = EET_TEST_DOUBLE;
    st1->stuff = EET_TEST_INT + i;
    st1->s1 = EET_TEST_STRING;
-}
+} /* _eet_st1_set */
 
 static void
-_eet_st1_cmp(Eet_St1 *st1, int i)
+_eet_st1_cmp(Eet_St1 * st1, int i)
 {
    double tmp;
 
    fail_if(!st1);
 
    tmp = st1->val1 - EET_TEST_DOUBLE;
-   if (tmp < 0) tmp = -tmp;
+   if (tmp < 0)
+      tmp = -tmp;
+
    fail_if(tmp > 0.005);
    fail_if(st1->stuff != EET_TEST_INT + i);
    fail_if(strcmp(st1->s1, EET_TEST_STRING));
-}
+} /* _eet_st1_cmp */
 
-static Eet_Data_Descriptor*
+static Eet_Data_Descriptor *
 _eet_st2_dd(void)
 {
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
+   Eet_Data_Descriptor * res;
 
    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St2);
    res = eet_data_descriptor_stream_new(&eddc);
@@ -1956,56 +2438,56 @@ _eet_st2_dd(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St2, "v1", v1, EET_T_ULONG_LONG);
 
    return res;
-}
+} /* _eet_st2_dd */
 
 static void
-_eet_st2_set(Eet_St2 *st2, int i)
+_eet_st2_set(Eet_St2 * st2, int i)
 {
    st2->b1 = EINA_TRUE;
    st2->v1 = EET_TEST_LONG_LONG + i;
-}
+} /* _eet_st2_set */
 
 static void
-_eet_st2_cmp(Eet_St2 *st2, int i)
+_eet_st2_cmp(Eet_St2 * st2, int i)
 {
    fail_if(!st2->b1);
    fail_if(st2->v1 != EET_TEST_LONG_LONG + i);
-}
+} /* _eet_st2_cmp */
 
-static Eet_Data_Descriptor*
+static Eet_Data_Descriptor *
 _eet_st3_dd(void)
 {
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *res;
+   Eet_Data_Descriptor * res;
 
    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Eet_St3);
    res = eet_data_descriptor_stream_new(&eddc);
    EET_DATA_DESCRIPTOR_ADD_BASIC(res, Eet_St3, "boby", boby, EET_T_INT);
 
    return res;
-}
+} /* _eet_st3_dd */
 
 static void
-_eet_st3_set(Eet_St3 *st3, int i)
+_eet_st3_set(Eet_St3 * st3, int i)
 {
    st3->boby = EET_TEST_INT + i;
-}
+} /* _eet_st3_set */
 
 static void
-_eet_st3_cmp(Eet_St3 *st3, int i)
+_eet_st3_cmp(Eet_St3 * st3, int i)
 {
    fail_if(st3->boby != EET_TEST_INT + i);
-}
+} /* _eet_st3_cmp */
 
 START_TEST(eet_test_union)
 {
-   Eet_Union_Test *eut;
-   Eet_List *l;
+   Eet_Union_Test * eut;
+   Eet_List * l;
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd;
-   Eet_Data_Descriptor *unified;
-   Eet_Data_Descriptor *m;
-   void *blob;
+   Eet_Data_Descriptor * edd;
+   Eet_Data_Descriptor * unified;
+   Eet_Data_Descriptor * m;
+   void * blob;
    int size;
    int i;
 
@@ -2033,21 +2515,21 @@ START_TEST(eet_test_union)
 
    l = calloc(1, sizeof (Eet_List));
 
-#define EUT_NEW(Type_Index)                    \
-   eut = calloc(1, sizeof (Eet_Union_Test));   \
-   eut->type = EET_ST##Type_Index;             \
-   _eet_st##Type_Index##_set(&(eut->u.st##Type_Index), i);
+#define EUT_NEW(Type_Index)\
+   eut = calloc(1, sizeof (Eet_Union_Test));\
+   eut->type = EET_ST ## Type_Index;\
+   _eet_st ## Type_Index ## _set(&(eut->u.st ## Type_Index), i);
 
    for (i = 0; i < 3; ++i)
      {
-       EUT_NEW(1);
-       l->list = eina_list_append(l->list, eut);
+        EUT_NEW(1);
+        l->list = eina_list_append(l->list, eut);
 
-       EUT_NEW(2);
-       l->list = eina_list_append(l->list, eut);
+        EUT_NEW(2);
+        l->list = eina_list_append(l->list, eut);
 
-       EUT_NEW(3);
-       l->list = eina_list_append(l->list, eut);
+        EUT_NEW(3);
+        l->list = eina_list_append(l->list, eut);
      }
 
    blob = eet_data_descriptor_encode(m, l, &size);
@@ -2058,16 +2540,16 @@ START_TEST(eet_test_union)
 
    fail_if(eina_list_count(l->list) != 9);
 
-#define EUT_CMP(Type_Index)                                    \
-   eut = eina_list_nth(l->list, i * 3 + Type_Index - 1);       \
-   fail_if(eut->type != EET_ST##Type_Index);                   \
-   _eet_st##Type_Index##_cmp(&(eut->u.st##Type_Index), i);
+#define EUT_CMP(Type_Index)\
+   eut = eina_list_nth(l->list, i * 3 + Type_Index - 1);\
+   fail_if(eut->type != EET_ST ## Type_Index);\
+   _eet_st ## Type_Index ## _cmp(&(eut->u.st ## Type_Index), i);
 
    for (i = 0; i < 3; ++i)
      {
-       EUT_CMP(1);
-       EUT_CMP(2);
-       EUT_CMP(3);
+        EUT_CMP(1);
+        EUT_CMP(2);
+        EUT_CMP(3);
      }
 
    eet_shutdown();
@@ -2077,16 +2559,16 @@ END_TEST
 
 START_TEST(eet_test_variant)
 {
-   Eet_Variant_Test *evt;
-   Eet_List *l;
-   Eet_St1 *st1;
-   Eet_St2 *st2;
-   Eet_St3 *st3;
+   Eet_Variant_Test * evt;
+   Eet_List * l;
+   Eet_St1 * st1;
+   Eet_St2 * st2;
+   Eet_St3 * st3;
    Eet_Data_Descriptor_Class eddc;
-   Eet_Data_Descriptor *edd;
-   Eet_Data_Descriptor *unified;
-   Eet_Data_Descriptor *m;
-   void *blob;
+   Eet_Data_Descriptor * edd;
+   Eet_Data_Descriptor * unified;
+   Eet_Data_Descriptor * m;
+   void * blob;
    int size;
    int i;
 
@@ -2108,44 +2590,49 @@ START_TEST(eet_test_variant)
    EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST2", _eet_st2_dd());
    EET_DATA_DESCRIPTOR_ADD_MAPPING(unified, "ST3", _eet_st3_dd());
 
-   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test, "data", data, t, unified);
+   EET_DATA_DESCRIPTOR_ADD_VARIANT(edd,
+                                   Eet_Variant_Test,
+                                   "data",
+                                   data,
+                                   t,
+                                   unified);
 
    unified = eet_data_descriptor_stream_new(&eddc);
    eet_data_descriptor_element_add(unified, "ST1",
-                                  EET_T_UNKNOW, EET_G_LIST,
-                                  0, 0, NULL, _eet_st1_dd());
+                                   EET_T_UNKNOW, EET_G_LIST,
+                                   0, 0, NULL, _eet_st1_dd());
    eet_data_descriptor_element_add(unified, "ST2",
-                                  EET_T_UNKNOW, EET_G_LIST,
-                                  0, 0, NULL, _eet_st2_dd());
+                                   EET_T_UNKNOW, EET_G_LIST,
+                                   0, 0, NULL, _eet_st2_dd());
 
    EET_DATA_DESCRIPTOR_ADD_VARIANT(edd, Eet_Variant_Test,
-                                  "data_list", data_list, t, unified);
+                                   "data_list", data_list, t, unified);
 
    EET_DATA_DESCRIPTOR_ADD_LIST(m, Eet_List, "list", list, edd);
 
    l = calloc(1, sizeof (Eet_List));
 
-#define EVT_NEW(Type_Index)                                    \
-   evt = calloc(1, sizeof (Eet_Variant_Test));                 \
-   evt->t.type = eet_mapping[Type_Index - 1].name;             \
-   st##Type_Index = calloc(1, sizeof (Eet_St##Type_Index));    \
-   _eet_st##Type_Index##_set(st##Type_Index, i);               \
-   evt->data = st##Type_Index;
+#define EVT_NEW(Type_Index)\
+   evt = calloc(1, sizeof (Eet_Variant_Test));\
+   evt->t.type = eet_mapping[Type_Index - 1].name;\
+   st ## Type_Index = calloc(1, sizeof (Eet_St ## Type_Index));\
+   _eet_st ## Type_Index ## _set(st ## Type_Index, i);\
+   evt->data = st ## Type_Index;
 
    for (i = 0; i < 3; ++i)
      {
-       EVT_NEW(1);
-       l->list = eina_list_append(l->list, evt);
+        EVT_NEW(1);
+        l->list = eina_list_append(l->list, evt);
 
-       st1 = calloc(1, sizeof (Eet_St1));
-       _eet_st1_set(st1, i);
-       evt->data_list = eina_list_append(evt->data_list, st1);
+        st1 = calloc(1, sizeof (Eet_St1));
+        _eet_st1_set(st1, i);
+        evt->data_list = eina_list_append(evt->data_list, st1);
 
-       EVT_NEW(2);
-       l->list = eina_list_append(l->list, evt);
+        EVT_NEW(2);
+        l->list = eina_list_append(l->list, evt);
 
-       EVT_NEW(3);
-       l->list = eina_list_append(l->list, evt);
+        EVT_NEW(3);
+        l->list = eina_list_append(l->list, evt);
      }
 
    blob = eet_data_descriptor_encode(m, l, &size);
@@ -2156,35 +2643,36 @@ START_TEST(eet_test_variant)
 
    fail_if(eina_list_count(l->list) != 9);
 
-#define EVT_CMP(Type_Index)                                            \
-   evt = eina_list_nth(l->list, i * 3 + Type_Index - 1);               \
-   fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0);        \
-   _eet_st##Type_Index##_cmp(evt->data, i);
+#define EVT_CMP(Type_Index)\
+   evt = eina_list_nth(l->list, i * 3 + Type_Index - 1);\
+   fail_if(strcmp(evt->t.type, eet_mapping[Type_Index - 1].name) != 0);\
+   _eet_st ## Type_Index ## _cmp(evt->data, i);
 
    for (i = 0; i < 3; ++i)
      {
-       EVT_CMP(1);
+        EVT_CMP(1);
 
-       fail_if(!evt->data_list);
-       fail_if(eina_list_count(evt->data_list) != 1);
+        fail_if(!evt->data_list);
+        fail_if(eina_list_count(evt->data_list) != 1);
 
-       st1 = eina_list_data_get(evt->data_list);
-       _eet_st1_cmp(st1, i);
+        st1 = eina_list_data_get(evt->data_list);
+        _eet_st1_cmp(st1, i);
 
-       EVT_CMP(2);
-       EVT_CMP(3);
+        EVT_CMP(2);
+        EVT_CMP(3);
      }
 
    eet_shutdown();
    eina_shutdown();
-}
+} /* START_TEST */
+
 END_TEST
 
 Suite *
 eet_suite(void)
 {
-   Suite *s;
-   TCase *tc;
+   Suite * s;
+   TCase * tc;
 
    s = suite_create("Eet");
 
@@ -2220,31 +2708,33 @@ eet_suite(void)
    tcase_add_test(tc, eet_identity_open_pkcs8);
    tcase_add_test(tc, eet_identity_open_pkcs8_enc);
    suite_add_tcase(s, tc);
-#endif
+#endif /* ifdef HAVE_SIGNATURE */
 
 #ifdef HAVE_CIPHER
    tc = tcase_create("Eet Cipher");
    tcase_add_test(tc, eet_cipher_decipher_simple);
    suite_add_tcase(s, tc);
-#endif
+#endif /* ifdef HAVE_CIPHER */
 
+#ifdef EFL_HAVE_THREADS
    tc = tcase_create("Eet Cache");
    tcase_add_test(tc, eet_cache_concurrency);
    suite_add_tcase(s, tc);
+#endif /* ifdef EFL_HAVE_THREADS */
 
    tc = tcase_create("Eet Connection");
    tcase_add_test(tc, eet_connection_check);
    suite_add_tcase(s, tc);
 
    return s;
-}
+} /* eet_suite */
 
 int
 main(void)
 {
-   Suite   *s;
-   SRunner *sr;
-   int      failed_count;
+   Suite s;
+   SRunner * sr;
+   int failed_count;
 
    s = eet_suite();
    sr = srunner_create(s);
@@ -2253,4 +2743,5 @@ main(void)
    srunner_free(sr);
 
    return (failed_count == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
+} /* main */
+
index 85b7542..a0f5ed3 100644 (file)
@@ -3,7 +3,6 @@
 
 #include "Eet.h"
 
-void eet_test_setup_eddc(Eet_Data_Descriptor_Class *eddc);
-
+void      eet_test_setup_eddc(Eet_Data_Descriptor_Class * eddc);
 
 #endif /* _EET_SUITE_H */