Ejemplo n.º 1
0
_WCRTLINK int _bfreeseg( __segment seg )
{
    __segment           heap_seg;
    __segment           prev_seg;
    struct heapblk _WCFAR *heap;
    struct heapblk _WCFAR *next_heap;
    struct heapblk _WCFAR *prev_heap;

    _AccessFHeap();
    heap = MK_FP( seg, 0 );
    heap_seg = seg;
    seg = heap->nextseg;
    /* unlink from heap list */
    prev_seg = heap->prevseg;
    if( seg != 0 ) {
        next_heap = MK_FP( seg, 0 );
        next_heap->prevseg = prev_seg;
    }
    if( prev_seg == 0 ) {
        __bheap = seg;
    } else {
        prev_heap = MK_FP( prev_seg, 0 );
        prev_heap->nextseg = seg;
    }
    _ReleaseFHeap();
    return( __FreeSeg( heap_seg ) );
}
Ejemplo n.º 2
0
_WCRTLINK void hfree( void _WCHUGE *ptr )
    {
#if defined(__WINDOWS__)
        __FreeSeg( FP_SEG( ptr ) );
#else
        _dosfree( ptr );
#endif
    }
Ejemplo n.º 3
0
_WCRTLINK unsigned _dos_freemem( mem_id mem )
{
#if defined(__386__) || defined(__PPC__)
    APIRET      rc;
    rc = DosFreeMem( mem );
    if( rc ) {
        return( __set_errno_dos_reterr( rc ) );
    }
    return( 0 );
#elif defined( _M_I86 )
    // defined inside heap
    return( __FreeSeg( mem ) );
#else
    #error platform not supported
#endif
}
Ejemplo n.º 4
0
_WCRTLINK int _bfreeseg( __segment seg )
{
    __segment       next_seg;
    __segment       prev_seg;

    _AccessFHeap();
    /* unlink from heap list */
    prev_seg = HEAP( seg )->prevseg;
    next_seg = HEAP( seg )->nextseg;
    if( next_seg != _NULLSEG ) {
        HEAP( next_seg )->prevseg = prev_seg;
    }
    if( prev_seg == _NULLSEG ) {
        __bheapbeg = next_seg;
    } else {
        HEAP( prev_seg )->nextseg = next_seg;
    }
    _ReleaseFHeap();
    return( __FreeSeg( seg ) );
}
Ejemplo n.º 5
0
_WCRTLINK void hfree( void _WCHUGE *ptr )
    {
        __FreeSeg( FP_SEG( ptr ) );
    }