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; }
// 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; }