int fetch_propvals(dbref obj, const char *dir) { PropPtr p, pptr; int cnt = 0; char buf[BUFFER_LEN]; char name[BUFFER_LEN]; p = first_prop_nofetch(obj, dir, &pptr, name, sizeof(name)); while (p) { cnt = (cnt || propfetch(obj, p)); if (PropDir(p) || (PropFlags(p) & PROP_DIRUNLOADED)) { strcpyn(buf, sizeof(buf), dir); strcatn(buf, sizeof(buf), name); strcatn(buf, sizeof(buf), "/"); if (PropFlags(p) & PROP_DIRUNLOADED) { SetPFlags(p, (PropFlags(p) & ~PROP_DIRUNLOADED)); getproperties(input_file, obj, buf); } fetch_propvals(obj, buf); } p = next_prop(pptr, p, name, sizeof(name)); } return cnt; }
int size_properties(dbref player, int load) { #ifdef DISKBASE if (load) { fetchprops(player); fetch_propvals(player, "/"); } #endif return size_proplist(DBFETCH(player)->properties); }
void putprops_copy(FILE * f, dbref obj) { char buf[BUFFER_LEN * 3]; char *ptr; FILE *g; if (DBFETCH(obj)->propsmode != PROPS_UNLOADED) { if (fetch_propvals(obj, "/")) { fseek(f, 0L, 2); } putproperties(f, obj); return; } if (db_conversion_flag) { if (fetchprops_priority(obj, 1, NULL) || fetch_propvals(obj, "/")) { fseek(f, 0L, 2); } putproperties(f, obj); return; } g = input_file; putstring(f, "*Props*"); if (DBFETCH(obj)->propsfpos) { fseek(g, DBFETCH(obj)->propsfpos, 0); ptr = fgets(buf, sizeof(buf), g); if (!ptr) abort(); for (;;) { ptr = fgets(buf, sizeof(buf), g); if (!ptr) abort(); if (!string_compare(ptr, "*End*\n")) break; fputs(buf, f); } } putstring(f, "*End*"); }