示例#1
0
文件: ph.c 项目: Rayerd/dmd
void ph_newheap(size_t nbytes)
{   unsigned newsize;
    Heap *h;

    h = (Heap *) malloc(sizeof(Heap));
    if (!h)
        err_nomem();

    newsize = (nbytes > 0xFF00) ? nbytes : 0xFF00;
    h->buf = (unsigned char *) malloc(newsize);
    if (!h->buf)
    {
        free(h);
        err_nomem();
    }
    h->nleft = newsize;
    h->p = h->buf;
    h->prev = heap;
    heap = h;
}
示例#2
0
err_t herc_make(struct herc **h_res, int argc, char **argv) {
	err_t err;
	struct herc *h;
	*h_res = NULL;

	h = calloc(1, sizeof(struct herc));
	if (h==NULL) {
		err = err_nomem();
	} else if ( (err = parse_cdm_args(h, argc, argv)) ) {
		free(h);
	} else if ( (err = herc_make_default_rbe(&(h->rbe), h)) ) {
		free(h);
	} else {
		*h_res = h;
	}

	return err;
}
/*
 * memory allocator for tokens
 */
static Token *
_token_alloc()
{
    Token  *tp;
    char  *blk;
    int  i;

    if( !(blk = malloc(TOKEN_SIZE * TOK_BLOCK_SIZE)) ) {
	err_nomem("token_alloc");
    }
    for( i = 0; i < TOK_BLOCK_SIZE; i++ ) {
	tp = (Token *) (blk + i * TOKEN_SIZE);
	tp->next = free_list;
	free_list = tp;
    }
    
    tp = free_list;
    free_list = free_list->next;
    return tp;
}
示例#4
0
object *
newmappingobject()
{
	register mappingobject *mp;
	if (dummy == NULL) { /* Auto-initialize dummy */
		dummy = newstringobject("<dummy key>");
		if (dummy == NULL)
			return NULL;
	}
	mp = NEWOBJ(mappingobject, &Mappingtype);
	if (mp == NULL)
		return NULL;
	mp->ma_size = primes[0];
	mp->ma_table = (mappingentry *) calloc(sizeof(mappingentry), mp->ma_size);
	if (mp->ma_table == NULL) {
		DEL(mp);
		return err_nomem();
	}
	mp->ma_fill = 0;
	mp->ma_used = 0;
	return (object *)mp;
}