#endif
+static void
+add_block (struct block *block)
+{
+ int i;
+
+ for (i = 0; i < sizeof (blocks)/sizeof(*blocks); i++)
+ {
+ if (blocks[i] == NULL)
+ {
+ blocks[i] = block;
+ break;
+ }
+ }
+}
+
+static void
+remove_block (struct block *block)
+{
+ int i;
+
+ for (i = 0; i < sizeof(blocks)/sizeof(*blocks); i++)
+ {
+ if (blocks[i] == block)
+ {
+ blocks[i] = NULL;
+ break;
+ }
+ }
+}
+
/** @} */ /* End of internals docs */
else
{
struct block *block;
- int i;
void *mem;
block = malloc (sizeof (struct block) + bytes + 256);
block->size = bytes;
if (mem)
_dbus_atomic_inc (&n_blocks_outstanding);
#endif
- for (i = 0; i < sizeof (blocks)/sizeof(*blocks); i++)
- {
- if (blocks[i] == NULL)
- {
- blocks[i] = block;
- break;
- }
- }
-
+ add_block (block);
return mem;
}
}
else
{
struct block *block;
- int i;
void *mem;
block = calloc (sizeof (struct block) + bytes + 256, 1);
_dbus_atomic_inc (&n_blocks_outstanding);
#endif
- for (i = 0; i < sizeof(blocks)/sizeof(*blocks); i++)
- {
- if (blocks[i] == NULL)
- {
- blocks[i] = block;
- break;
- }
- }
+ add_block (block);
return mem;
}
else
{
struct block *block;
- int i;
void *mem;
if (memory != NULL)
{
block = (struct block *) (((char *) memory) - offsetof (struct block, memory));
- for (i = 0; i < sizeof(blocks)/sizeof(*blocks); i++)
- {
- if (blocks[i] == block)
- {
- blocks[i] = NULL;
- break;
- }
- }
+ remove_block (block);
} else block = NULL;
block = realloc (block, bytes + sizeof (struct block) + 256);
_dbus_atomic_inc (&n_blocks_outstanding);
#endif
- for (i = 0; i < sizeof(blocks)/sizeof(*blocks); i++)
- {
- if (blocks[i] == NULL)
- {
- blocks[i] = block;
- break;
- }
- }
+ add_block (block);
return mem;
}
}
if (memory) /* we guarantee it's safe to free (NULL) */
{
- int i;
struct block *block;
#ifdef DBUS_BUILD_TESTS
_dbus_atomic_dec (&n_blocks_outstanding);
block = (struct block *) (((char *) memory) - offsetof (struct block, memory));
- for (i = 0; i < sizeof(blocks)/sizeof(*blocks); i++)
- {
- if (blocks[i] == block)
- {
- blocks[i] = NULL;
- break;
- }
- }
+ remove_block (block);
free (block);
}