int db_add_propdef(Objid oid, const char *pname, Var value, Objid owner, unsigned flags) { Object *o; Pval pval; int i; db_prop_handle h; h = db_find_property(oid, pname, 0); if (h.ptr || property_defined_at_or_below(pname, str_hash(pname), oid)) return 0; o = dbpriv_find_object(oid); if (o->propdefs.cur_length == o->propdefs.max_length) { Propdef *old_props = o->propdefs.l; int new_size = (o->propdefs.max_length == 0 ? 8 : 2 * o->propdefs.max_length); o->propdefs.l = mymalloc(new_size * sizeof(Propdef), M_PROPDEF); for (i = 0; i < o->propdefs.max_length; i++) o->propdefs.l[i] = old_props[i]; o->propdefs.max_length = new_size; if (old_props) myfree(old_props, M_PROPDEF); } o->propdefs.l[o->propdefs.cur_length++] = dbpriv_new_propdef(pname); pval.var = value; pval.owner = owner; pval.perms = flags; insert_prop_recursively(oid, o->propdefs.cur_length - 1, pval); return 1; }
static Propdef read_propdef() { const char *name = dbio_read_string_intern(); return dbpriv_new_propdef(name); }