On Sat, 15 May 1999, Chris Gilbert wrote:
>Doh, that should be ex_description not action_description, IE:
> if (obj->ex_description && obj->ex_description !=
>obj_proto[robj_num].ex_description) {
>
>The reason it helps is that it the first time around the loop plist is
>set to obj_proto.ex_description fine, however, it can be freed later by
>the free(thised), so the next time around plist picks up garbage.
>
>The code used to do that when it was in free_obj in db.c, I think it's
>just a cut and paste error...
Try this instead:
diff -up OasisOLCv2.0-pre7/genobj.c OasisOLCv2.0-pre8/genobj.c
--- OasisOLCv2.0-pre7/genobj.c Fri May 14 03:29:34 1999
+++ OasisOLCv2.0-pre8/genobj.c Sat May 15 11:06:46 1999
@@ -288,20 +288,23 @@ void free_object_strings_proto(struct ob
free(obj->action_description);
if (obj->ex_description) {
struct extra_descr_data *thised, *plist, *next_one; /* O(horrible) */
- int ok_key, ok_desc;
+ int ok_key, ok_desc, ok_item;
for (thised = obj->ex_description; thised; thised = next_one) {
next_one = thised->next;
- for (ok_key = ok_desc = 1, plist = obj_proto[robj_num].ex_description; plist; plist = plist->next) {
+ for (ok_item = ok_key = ok_desc = 1, plist = obj_proto[robj_num].ex_description; plist; plist = plist->next) {
if (plist->keyword == thised->keyword)
ok_key = 0;
if (plist->description == thised->description)
ok_desc = 0;
+ if (plist == thised)
+ ok_item = 0;
}
if (thised->keyword && ok_key)
free(thised->keyword);
if (thised->description && ok_desc)
free(thised->description);
- free(thised);
+ if (ok_item)
+ free(thised);
}
}
}
It may be possible to have unique extra descriptions some day.
--
George Greer | Sammy's Code - OBuild
greerga@circlemud.org | http://www.ticnet.com/samedi/code.html
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST