Exemplo n.º 1
0
_WCRTLINK void _WCHUGE * halloc( unsigned long n, unsigned size )
{
    unsigned long len;
    USHORT      error, tseg;
    SEL         seg;
    USHORT      number_segments, remaining_bytes;
    USHORT      increment;

    len = n * size;
    if( len == 0 ) return( (void _WCHUGE *)0 );
    if( n > 65536 && ! only_one_bit( size ) ) return( (void _WCHUGE *)0 );
    error = DosGetHugeShift( &increment );
    if( error ) {
        __set_errno_dos( error );
        return( ( void _WCHUGE *)0 );
    }
    number_segments = len >> 16;
    remaining_bytes = len & 0xffff;
    error = DosAllocHuge( number_segments, remaining_bytes, &seg, 0, 0 );
    if( error ) {
        __set_errno_dos( error );
        return( (void _WCHUGE *)0 );  /* allocation failed */
    }
    tseg = seg;
    increment = 1 << increment;
    while( number_segments-- ) {
        _os2zero64k( 0, 0x8000, tseg, 0 );
        tseg += increment;
    }
    if( remaining_bytes != 0 ) {                        /* 30-apr-91 */
        _os2zero_rest( 0, remaining_bytes, tseg, 0 );
    }
    return( (void _WCHUGE *)((unsigned long )seg << 16) );
}
Exemplo n.º 2
0
_WCRTLINK void _WCHUGE *halloc( long numb, unsigned size )
{
    unsigned long   amount;
#if defined(__WINDOWS__)
    HANDLE          hmem;
    LPSTR           p;

    amount = (unsigned long)numb * size;
    if( amount == 0 )
        return( HUGE_NULL );
    if( amount > 65536 && ! only_one_bit( size ) )
        return( HUGE_NULL );
    hmem = GlobalAlloc( GMEM_MOVEABLE|GMEM_ZEROINIT, amount );
    if( hmem == NULL )
        return( HUGE_NULL );
    p = GlobalLock( hmem );
    return( p );
#else
    long            seg;
    unsigned int    num_of_paras;
    char            _WCHUGE *hp;

    amount = (unsigned long)numb * size;
    if( amount == 0  || amount >= 0x100000 )
        return( HUGE_NULL );
    if( amount > 65536 && ! only_one_bit( size ) )
        return( HUGE_NULL );
    num_of_paras = __ROUND_UP_SIZE_TO_PARA( amount );
    seg = _dosalloc( num_of_paras );
    if( seg < 0 )
        return( HUGE_NULL );  /* allocation failed */
    hp = (char _WCHUGE *)MK_FP( (unsigned short)seg, 0 );
    for( ;; ) {
        size = 0x8000;
        if( num_of_paras < 0x0800 )
            size = num_of_paras << 4;
        _fmemset( hp, 0, size );
        if( num_of_paras < 0x0800 )
            break;
        hp = hp + size;
        num_of_paras -= 0x0800;
    }
    return( (void _WCHUGE *)MK_FP( (unsigned short)seg, 0 ) );
#endif
}
Exemplo n.º 3
0
_WCRTLINK void _WCHUGE *halloc( long n, unsigned size )
    {
        unsigned long len;
#if defined(__WINDOWS__)
        HANDLE hmem;
        LPSTR p;

        len = (unsigned long)n * size;
        if( len == 0 ) return( HUGE_NULL );
        if( len > 65536 && ! only_one_bit( size ) ) return( HUGE_NULL );
        hmem = GlobalAlloc( GMEM_MOVEABLE|GMEM_ZEROINIT, len );
        if( hmem == NULL ) return( HUGE_NULL );
        p = GlobalLock( hmem );
        return( p );
#else
        long seg;
        unsigned int paras;
        char _WCHUGE *hp;

        len = (unsigned long)n * size;
        if( len == 0  || len >= 0x100000 ) return( HUGE_NULL );
        if( len > 65536 && ! only_one_bit( size ) ) return( HUGE_NULL );
        paras = (len + 15) >> 4;
        seg = _dosalloc( paras );
        if( seg < 0 ) return( HUGE_NULL );  /* allocation failed */
        hp = (char _WCHUGE *)MK_FP( (unsigned short)seg, 0 );
        for( ;; ) {
            size = 0x8000;
            if( paras < 0x0800 )
                size = paras << 4;
            _fmemset( hp, 0, size );
            if( paras < 0x0800 )
                break;
            hp = hp + size;
            paras -= 0x0800;
        }
        return( (void _WCHUGE *)MK_FP( (unsigned short)seg, 0 ) );
#endif
    }
Exemplo n.º 4
0
_WCRTLINK void_hptr (halloc)( long n, size_t size )
{
    short           seg;
    unsigned long   len;

    len = (unsigned long)n * size;
    if( len == 0 )
        return( NULL );
    if( len > 65536 && !only_one_bit( size ) )
        return( NULL );
    seg = qnx_segment_huge( len );
    if( seg == -1 )
        seg = 0;
    return( (void_hptr)MK_FP( seg , 0 ) );
}
Exemplo n.º 5
0
_WCRTLINK void_hptr (halloc)( long n, size_t size )
{
    short           seg;
    unsigned long   amount;

    amount = (unsigned long)n * size;
    if( amount == 0 )
        return( NULL );
    if( OVERFLOW_64K( amount ) && !only_one_bit( size ) )
        return( NULL );
    seg = qnx_segment_huge( amount );
    if( seg == -1 )
        seg = 0;
    return( (void_hptr)MK_FP( seg , 0 ) );
}