Perhaps I'm wrong, but simple testing doesn't show that to be the case.. inside the index boot function, we have the following loop ---- while (*buf1 != '$') { sprintf(buf2, "%s%s", prefix, buf1); if (!(db_file = fopen(buf2, "r"))) { log("SYSERR: %s: %s", buf2, strerror(errno)); exit(1); } switch (mode) { case DB_BOOT_WLD: case DB_BOOT_OBJ: case DB_BOOT_MOB: discrete_load(db_file, mode, buf2); break; case DB_BOOT_ZON: load_zones(db_file, buf2); break; case DB_BOOT_HLP: /* * If you think about it, we have a race here. Although, this is the * "point-the-gun-at-your-own-foot" type of race. */ load_help(db_file); break; case DB_BOOT_SHP: boot_the_shops(db_file, buf2, rec_count); break; } ---- where - as should be obvious to anyone, buf2 is supposed to be the filename (as per intial setup, discrete_load arguments, etc). However, since it's a global buffer instead of a local copy, and buf2 is used in those functions (generally as the error message for fread_string in parse_room, and others), it's only valid the first time through. Lucky for us, it appears to never be used. Unlucky for me, because I actually was using it, and it took a while to nail down the error. As a general rule, we probably shouldn't be passing pointers to global character strings around as arguments, to, well... anything? PjD -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/05/01 PST