1 /************************************************************************/
4 /************************************************************************/
11 /****************************************************************************
13 ****************************************************************************/
14 void *xy_malloc( int i_size
, int align_shift
)
16 const int ALIGNMENT
= 16;
17 const int MASK
= ALIGNMENT
- 1;
21 buf
= (uint8_t *) malloc( i_size
+ MASK
+ sizeof( void ** ) +
23 align_buf
= buf
+ MASK
+ sizeof( void ** ) + sizeof( int );
24 align_buf
-= (ALIGNMENT
+ ((intptr_t) align_buf
& MASK
) - align_shift
) & MASK
;
25 *( (void **) ( align_buf
- sizeof( void ** ) ) ) = buf
;
26 *( (int *) ( align_buf
- sizeof( void ** ) - sizeof( int ) ) ) = i_size
;
30 /****************************************************************************
32 ****************************************************************************/
33 void xy_free( void *p
)
37 free( *( ( ( void **) p
) - 1 ) );
41 /****************************************************************************
43 ****************************************************************************/
44 void *xy_realloc( void *p
, int i_size
, int align_shift
)
50 i_old_size
= *( (int*) ( (uint8_t*) p
- sizeof( void ** ) -
53 p_new
= (uint8_t*)xy_malloc( i_size
, align_shift
);
54 if( i_old_size
> 0 && i_size
> 0 )
56 memcpy( p_new
, p
, ( i_old_size
< i_size
) ? i_old_size
: i_size
);