Hello everyone,
I have a problem I am hoping someone can help me with. I am running
Circle30bpl15 on FreeBSD/i386
After unsuccessfully trying all of the fixes from the ftp site, I decided to
go through and have the poof's save the same way titles are done.
The problem is that the system does a core dump once when attempting to save
the poof's (regardless of if they had been modified from the default).
Running a backtrace on GDB gives me the following.
Core was generated by `circle'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libcrypt.so.2...done.
Reading symbols from /usr/lib/libc.so.4...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0 0x80a32ac in write_aliases (ch=0x83f1e00) at alias.c:31
31 if (GET_ALIASES(ch) == NULL)
(gdb) backtrace
#0 0x80a32ac in write_aliases (ch=0x83f1e00) at alias.c:31
#1 0x805edd9 in do_save (ch=0x83f1e00, argument=0xbfbff528 "", cmd=217,
subcmd=0) at act.other.c:143
#2 0x8081095 in command_interpreter (ch=0x83f1e00, argument=0xbfbff524
"save") at interpreter.c:709
#3 0x804a234 in game_loop (mother_desc=3) at comm.c:769
#4 0x804975a in init_game (port=4040) at comm.c:363
#5 0x80496ab in main (argc=3, argv=0xbfbff8f8) at comm.c:327
(gdb) quit
Here is my do_save function.. (stock bpl15)
ACMD(do_save)
{
if (IS_NPC(ch) || !ch->desc)
return;
/* Only tell the char we're saving if they actually typed "save" */
if (cmd) {
if (auto_save && GET_LEVEL(ch) < LVL_IMMORT) {
send_to_char("Saving aliases.\r\n", ch);
write_aliases(ch);
return;
}
sprintf(buf, "Saving %s and aliases.\r\n", GET_NAME(ch));
send_to_char(buf, ch);
}
write_aliases(ch);
save_char(ch, NOWHERE);
Crash_crashsave(ch);
if (ROOM_FLAGGED(ch->in_room, ROOM_HOUSE_CRASH))
House_crashsave(GET_ROOM_VNUM(IN_ROOM(ch)));
}
It points at the write_aliases, however...I had not modified that section
eaither..
void write_aliases(struct char_data *ch)
{
FILE *file;
char fn[MAX_STRING_LENGTH];
struct alias_data *temp;
get_filename(GET_NAME(ch), fn, ALIAS_FILE);
remove(fn);
if (GET_ALIASES(ch) == NULL)
return;
if ((file = fopen(fn, "w")) == NULL) {
log("SYSERR: Couldn't save aliases for %s in '%s'.", GET_NAME(ch), fn);
perror("SYSERR: write_aliases");
return;
}
for (temp = GET_ALIASES(ch); temp; temp = temp->next) {
int aliaslen = strlen(temp->alias);
int repllen = strlen(temp->replacement) - 1;
fprintf(file, "%d\n%s\n" /* Alias */
"%d\n%s\n" /* Replacement */
"%d\n", /* Type */
aliaslen, temp->alias,
repllen, temp->replacement + 1,
temp->type);
}
fclose(file);
}
Any help on this would be greatly appreciated..
Dennis - Lazarus of Realms of Ankh (imperial.palace.net 4024)
http://ankh_mud.tripod.com
________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com
+------------------------------------------------------------+
| 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 : 04/10/01 PDT