[Circle] [Code] Poofin/out not saving.

From: Lazarus DragonBlade (realms_of_ankh@hotmail.com)
Date: 07/07/00


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