return m << 3;
}
+VG_STATIC u32 vg_align4( u32 s )
+{
+ u32 m = (s + 3) >> 2;
+ return m << 2;
+}
+
/* Returns allocator structure from data pointer */
static vg_linear_allocator *vg_linear_header( void *data )
{
{
if( size % 8 )
{
- vg_error( "Requested size: %u\n", size );
- vg_fatal_exit_loop( "8 byte alignment required" );
+ vg_error( "alloc(%u) is not 8 byte aligned\n", size );
+ size = vg_align8( size );
}
vg_linear_allocator *alloc = vg_linear_header( buffer );
__attribute__((warn_unused_result))
VG_STATIC void *vg_linear_extend( void *buffer, void *data, u32 extra )
{
+ if( !data )
+ return vg_linear_alloc( buffer, extra );
+
vg_linear_allocator *alloc = vg_linear_header( buffer );
if( alloc->last_alloc != data )