1 /************************************************************************/
4 /************************************************************************/
11 /****************************************************************************
13 ****************************************************************************/
14 void *xy_malloc( int i_size
)
17 /* Mac OS X always returns 16 bytes aligned memory */
18 return malloc( i_size
);
19 #elif defined( HAVE_MALLOC_H )
20 return memalign( 16, i_size
);
24 buf
= (uint8_t *) malloc( i_size
+ 15 + sizeof( void ** ) +
26 align_buf
= buf
+ 15 + sizeof( void ** ) + sizeof( int );
27 align_buf
-= (intptr_t) align_buf
& 15;
28 *( (void **) ( align_buf
- sizeof( void ** ) ) ) = buf
;
29 *( (int *) ( align_buf
- sizeof( void ** ) - sizeof( int ) ) ) = i_size
;
34 /****************************************************************************
36 ****************************************************************************/
37 void xy_free( void *p
)
41 #if defined( HAVE_MALLOC_H ) || defined( SYS_MACOSX )
44 free( *( ( ( void **) p
) - 1 ) );
49 /****************************************************************************
51 ****************************************************************************/
52 void *xy_realloc( void *p
, int i_size
)
55 return realloc( p
, i_size
);
61 i_old_size
= *( (int*) ( (uint8_t*) p
- sizeof( void ** ) -
64 p_new
= (uint8_t*)xy_malloc( i_size
);
65 if( i_old_size
> 0 && i_size
> 0 )
67 memcpy( p_new
, p
, ( i_old_size
< i_size
) ? i_old_size
: i_size
);