forked from enlightenment/efl
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:
parent
90801855db
commit
6ffb3b8d9f
|
@ -26,6 +26,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Memory Pool */
|
/* 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
|
struct _Eina_Mempool_Backend
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -39,10 +42,28 @@ struct _Eina_Mempool_Backend
|
||||||
void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
|
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
|
struct _Eina_Mempool
|
||||||
{
|
{
|
||||||
Eina_Mempool_Backend backend;
|
Eina_Mempool_Backend_ABI1 backend;
|
||||||
void *backend_data;
|
void *backend_data;
|
||||||
|
Eina_Mempool_Backend_ABI2 backend2;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -80,8 +80,19 @@ _new_va(const char *name,
|
||||||
if (!mp)
|
if (!mp)
|
||||||
goto on_error;
|
goto on_error;
|
||||||
|
|
||||||
/* FIXME why backend is not a pointer? */
|
/* Work around ABI incompability introduced in Eina 1.1 */
|
||||||
mp->backend = *be;
|
#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);
|
mp->backend_data = mp->backend.init(context, options, args);
|
||||||
|
|
||||||
return mp;
|
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);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
|
EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
|
||||||
DBG("mp=%p", mp);
|
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)
|
EAPI void eina_mempool_gc(Eina_Mempool *mp)
|
||||||
|
|
Loading…
Reference in New Issue