mt_calloc.c 1.35 KB
/*
=============================================================================
        Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
        
        $RCSfile: mt_calloc.c,v $
        $Revision: 1.1.1.1 $
        $Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:mt_calloc
-----------------------------------------------------------------------------
書式:  #include <malloc.h>
        void *mt_calloc(size_t num, size_t size);
説明: マルチスレッド対応の calloc()。
       引数や戻り値、その他の説明については、calloc() と同じなので、そ
       ちらの説明を参照すること。
-----------------------------------------------------------------------------
*/
#include    <ultra64.h>
#include    "string.h"
#include    "malloc.h"
#include    "_malloc.h"

void *mt_calloc(size_t num, size_t size)
{
    size_t i ;
    char *ret, *dmy ;
    OSIntMask svintmask ;

    if( (int)malloc_ptr == -1 ){
	return  NULL ;
    }

    svintmask = osSetIntMask( OS_IM_NONE ) ; /* 全ての割り込みを不許可 */

    if( (ret = _malloc(malloc_ptr, num * size)) == NULL ){
	osSetIntMask( svintmask ) ; /* 割り込みマスクを復帰 */
	return  NULL;
    }

    /* 確保した領域を 0 で埋める */
    i = num * size ;
    dmy = ret ;
    while( i-- ){
	*dmy++ = 0 ;
    }

    osSetIntMask( svintmask ) ; /* 割り込みマスクを復帰 */

    return ret ;
}