I'm fairly new to C, this is only the second function I've written by myself.
Can someone more experience point out what I'm doing wrong? I'm really tired,
so plz don't flame me if I forgot to include some info.
Thanks,
Brian
-------
GDB Output:
Program received signal SIGSEGV, Segmentation fault.
fread_string (fp=0x8100bf8) at db.c:2820
2820 if ( ( *plast++ = c ) == '~' )
(gdb) bt
#0 fread_string (fp=0x8100bf8) at db.c:2820
#1 0x08082efe in load_sysinfo () at handler.c:3242 (Line is marked below)
#2 0x0806a1e5 in main (argc=2, argv=0xbffff78c) at comm.c:389
#3 0x400421f0 in __libc_start_main () from /lib/libc.so.6
trying to read file:
../data/sysinfo
File looks like this:
---
BEGIN
Flag AB
Strt 1010188897
Exec Halon~
Lcmd Bran[blackjack guard]~
END
---
read func looks like this:
void load_sysinfo( void )
{
FILE *fp;
log_string( "Loading system info..." );
system_info.boot_time = current_time;
system_info.startup_time = current_time;
fp = fopen( SYSINFO_FILE, "r" );
if ( !fp )
return;
for ( ; ; )
{
char *word;
char buf[MSL];
bool finished = FALSE;
fread_to_eol( fp );
word = feof( fp ) ? "End" : fread_word( fp );
switch ( UPPER(word[0]) )
{
case 'E':
if ( !str_cmp( word, "End" ) )
finished = TRUE;
if ( !str_cmp( word, "Exec" ) )
system_info.exec_by = fread_string( fp );***LINE 3242
break;
case 'F':
if ( !str_cmp( word, "Flag" ) )
system_info.flags = fread_flag( fp );
break;
case 'S':
if ( !str_cmp( word, "Strt" ) )
system_info.startup_time = fread_number( fp );
break;
default:
fread_to_eol( fp );
break;
}
if ( finished )
break;
}
if ( IS_SET( system_info.flags, MUD_SUSPENDED ) )
REMOVE_BIT( system_info.flags, MUD_SUSPENDED );
// system( "rm -f ../data/sysinfo > /dev/null" );
fclose( fp );
return;
}