예제 #1
0
static mapping_t *
        get_stats (const char * str, mudlib_stats_t * list)
{
    mudlib_stats_t *dl;
    mapping_t *m;
    svalue_t lv, *s;

    if (str) {
	for (dl = list; dl; dl = dl->next) {
	    if (!strcmp(str, dl->name))	/* are these both shared strings? */
		break;
	}
	if (dl) {
	    mapping_t *tmp;

	    tmp = get_info(dl);
	    tmp->ref--;
	    return tmp;
	} else {
	    return 0;
	}
    }
    m = allocate_mapping(8);
    for (dl = list; dl; dl = dl->next) {
	lv.type = T_STRING;
	lv.subtype = STRING_SHARED;
	lv.u.string = dl->name;  /* find_for_insert() adds a ref */
	s = find_for_insert(m, &lv, 1);
	s->type = T_MAPPING;
	s->subtype = 0;
	s->u.map = get_info(dl);
    }
    m->ref--;
    return m;
}
예제 #2
0
파일: database.c 프로젝트: ViKingIX/NtOS
// Copy from mapping.c to do mapping building
INLINE_STATIC svalue_t *insert_in_mapping (mapping_t * m, char * key) {
    svalue_t lv;
    svalue_t *ret;

    lv.type = T_STRING;
    lv.subtype = STRING_CONSTANT;
    lv.u.string = key;
    ret = find_for_insert(m, &lv, 1);
    /* lv.u.string will have been converted to a shared string */
    free_string(lv.u.string);
    return ret;
}