eina: restore ABI compatibility.

NOTE: if you did update the EFL during the last 3 hours, you will need to 
      recompile them all at once.


SVN revision: 58561
This commit is contained in:
Cedric BAIL 2011-04-11 17:45:01 +00:00
parent 90801855db
commit 6ffb3b8d9f
2 changed files with 36 additions and 4 deletions

View File

@ -26,6 +26,9 @@
*/
/* Memory Pool */
typedef struct _Eina_Mempool_Backend_ABI1 Eina_Mempool_Backend_ABI1;
typedef struct _Eina_Mempool_Backend_ABI2 Eina_Mempool_Backend_ABI2;
struct _Eina_Mempool_Backend
{
const char *name;
@ -39,10 +42,28 @@ struct _Eina_Mempool_Backend
void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
};
struct _Eina_Mempool_Backend_ABI1
{
const char *name;
void *(*init)(const char *context, const char *options, va_list args);
void (*free)(void *data, void *element);
void *(*alloc)(void *data, unsigned int size);
void *(*realloc)(void *data, void *element, unsigned int size);
void (*garbage_collect)(void *data);
void (*statistics)(void *data);
void (*shutdown)(void *data);
};
struct _Eina_Mempool_Backend_ABI2
{
void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
};
struct _Eina_Mempool
{
Eina_Mempool_Backend backend;
Eina_Mempool_Backend_ABI1 backend;
void *backend_data;
Eina_Mempool_Backend_ABI2 backend2;
};
/**

View File

@ -80,8 +80,19 @@ _new_va(const char *name,
if (!mp)
goto on_error;
/* FIXME why backend is not a pointer? */
mp->backend = *be;
/* Work around ABI incompability introduced in Eina 1.1 */
#define SBP(Property) mp->backend.Property = be->Property;
SBP(name);
SBP(init);
SBP(free);
SBP(alloc);
SBP(realloc);
SBP(garbage_collect);
SBP(statistics);
SBP(shutdown);
#undef SBP
mp->backend2.repack = be->repack;
mp->backend_data = mp->backend.init(context, options, args);
return mp;
@ -324,7 +335,7 @@ EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void
EINA_SAFETY_ON_NULL_RETURN(mp);
EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
DBG("mp=%p", mp);
mp->backend.repack(mp->backend_data, cb, data);
mp->backend2.repack(mp->backend_data, cb, data);
}
EAPI void eina_mempool_gc(Eina_Mempool *mp)