gdataset: extract helper function for struct size

This commit is contained in:
Thomas Haller 2024-02-05 21:24:26 +01:00
parent 2900575283
commit 9a8e2ab263

View File

@ -158,6 +158,13 @@ g_datalist_unlock_and_set (GData **datalist, gpointer ptr)
g_pointer_bit_unlock_and_set ((void **) datalist, DATALIST_LOCK_BIT, ptr, G_DATALIST_FLAGS_MASK_INTERNAL); g_pointer_bit_unlock_and_set ((void **) datalist, DATALIST_LOCK_BIT, ptr, G_DATALIST_FLAGS_MASK_INTERNAL);
} }
static gsize
datalist_alloc_size (guint32 alloc)
{
return G_STRUCT_OFFSET (GData, data) +
(((gsize) alloc) * sizeof (GDataElt));
}
static gboolean static gboolean
datalist_append (GData **data, GQuark key_id, gpointer new_data, GDestroyNotify destroy_func) datalist_append (GData **data, GQuark key_id, gpointer new_data, GDestroyNotify destroy_func)
{ {
@ -167,7 +174,7 @@ datalist_append (GData **data, GQuark key_id, gpointer new_data, GDestroyNotify
d = *data; d = *data;
if (!d) if (!d)
{ {
d = g_malloc (G_STRUCT_OFFSET (GData, data) + 2u * sizeof (GDataElt)); d = g_malloc (datalist_alloc_size (2u));
d->len = 0; d->len = 0;
d->alloc = 2u; d->alloc = 2u;
*data = d; *data = d;
@ -185,7 +192,7 @@ datalist_append (GData **data, GQuark key_id, gpointer new_data, GDestroyNotify
* Don't ever try to do that. */ * Don't ever try to do that. */
g_assert (d->alloc > d->len); g_assert (d->alloc > d->len);
#endif #endif
d = g_realloc (d, G_STRUCT_OFFSET (GData, data) + d->alloc * sizeof (GDataElt)); d = g_realloc (d, datalist_alloc_size (d->alloc));
*data = d; *data = d;
reallocated = TRUE; reallocated = TRUE;
} }
@ -268,7 +275,7 @@ datalist_shrink (GData **data, GData **d_to_free)
#endif #endif
d->alloc = v; d->alloc = v;
d = g_realloc (d, G_STRUCT_OFFSET (GData, data) + (v * sizeof (GDataElt))); d = g_realloc (d, datalist_alloc_size (v));
*d_to_free = NULL; *d_to_free = NULL;
*data = d; *data = d;
return TRUE; return TRUE;