# HG changeset patch # User bears # Date 1003758103 -3600 # Node ID 021d145e34e93675291feb55ac33f11eafaa4bbe # Parent b9ef99708d1c144fc0ec4b86fc8358df3698a25a [svn] * src/fetch.c: Only leave articles in the requested list if the error fetching them was fatal. Otherwise article requests will accumulate indefinitely (e.g retrieving through NNTPcache when it can't find the body of an article, now or event. Yes, this happened to me; I had nearly 2000 requests backed up and never being cleared). * src/group.c: The weekend's change introduced code that causes a bus error on Sparc ( *(time_t *)p = xxx ). Replace with a safe memcpy, and also use memcpy when reading the Entry and time items to remove warnings on Sparc compilation. diff -r b9ef99708d1c -r 021d145e34e9 ChangeLog --- a/ChangeLog Sun Oct 21 12:00:12 2001 +0100 +++ b/ChangeLog Mon Oct 22 14:41:43 2001 +0100 @@ -1,3 +1,15 @@ +Mon Oct 22 2001 Jim Hague + +* src/fetch.c: Only leave articles in the requested list if the error + fetching them was fatal. Otherwise article requests will accumulate + indefinitely (e.g retrieving through NNTPcache when it can't find + the body of an article, now or event. Yes, this happened to me; I + had nearly 2000 requests backed up and never being cleared). +* src/group.c: The weekend's change introduced code that causes a bus + error on Sparc ( *(time_t *)p = xxx ). Replace with a safe memcpy, + and also use memcpy when reading the Entry and time items to remove + warnings on Sparc compilation. + Sun Oct 21 2001 Jim Hague * docs/noffle.conf.5,src/noffle.c: Duh! Do unsubscribing the simple way. diff -r b9ef99708d1c -r 021d145e34e9 src/fetch.c --- a/src/fetch.c Sun Oct 21 12:00:12 2001 +0100 +++ b/src/fetch.c Mon Oct 22 14:41:43 2001 +0100 @@ -1,7 +1,7 @@ /* fetch.c - $Id: fetch.c 307 2001-09-12 20:33:44Z bears $ + $Id: fetch.c 312 2001-10-22 13:41:43Z bears $ */ #if HAVE_CONFIG_H @@ -214,7 +214,7 @@ ASSERT( Lock_gotLock() ); stat = Client_retrieveArtList( list, artcnt, artmax ); - if ( stat != STAT_OK ) + if ( IS_FATAL( stat ) ) return stat; p = list; while ( ( p = Utl_getLn( msgId, p ) ) ) diff -r b9ef99708d1c -r 021d145e34e9 src/group.c --- a/src/group.c Sun Oct 21 12:00:12 2001 +0100 +++ b/src/group.c Mon Oct 22 14:41:43 2001 +0100 @@ -7,7 +7,7 @@ loadGrp() and saveGrp(). This is done transparently. Access to the groups database is done by group name, by the functions defined in group.h. - $Id: group.c 310 2001-10-20 13:23:46Z bears $ + $Id: group.c 312 2001-10-22 13:41:43Z bears $ */ #if HAVE_CONFIG_H @@ -91,7 +91,12 @@ Utl_cpyStr( grp.name, "" ); } -/* Load group info from gdbm-database into global struct grp */ +/* + * Load group info from gdbm-database into global struct grp + * + * Note use of memcpy when packing buffer; avoids pointer alignment + * problems. + */ static Bool loadGrp( const char *name ) { @@ -106,7 +111,7 @@ val = gdbm_fetch( grp.dbf, key ); if ( val.dptr == NULL ) return FALSE; - grp.entry = *( (Entry *)val.dptr ); + memcpy( &grp.entry, val.dptr, sizeof( grp.entry ) ); p = val.dptr + sizeof( grp.entry ); Utl_cpyStr( grp.serv, p ); p += strlen( p ) + 1; @@ -127,7 +132,7 @@ grp.postAllow = p[ 0 ]; p++; if ( p - val.dptr < val.dsize ) - grp.lastPost = *((time_t *)p); + memcpy( &grp.lastPost, p, sizeof( grp.lastPost ) ); } Utl_cpyStr( grp.name, name ); @@ -135,7 +140,12 @@ return TRUE; } -/* Save group info from global struct grp into gdbm-database */ +/* + * Save group info from global struct grp into gdbm-database + * + * Note use of memcpy when packing buffer; avoids pointer alignment + * problems. + */ static void saveGrp( void ) { @@ -151,7 +161,7 @@ sizeof( grp.entry ) + lenServ + lenDsc + 2 + sizeof( char ) + sizeof( time_t ); buf = malloc( bufLen ); - memcpy( buf, (void *)&grp.entry, sizeof( grp.entry ) ); + memcpy( buf, &grp.entry, sizeof( grp.entry ) ); p = (char *)buf + sizeof( grp.entry ); strcpy( p, grp.serv ); p += lenServ + 1; @@ -159,7 +169,7 @@ p += lenDsc + 1; p[ 0 ] = grp.postAllow; p++; - *((time_t *) p) = grp.lastPost; + memcpy( p, &grp.lastPost, sizeof( grp.lastPost ) ); key.dptr = (void *)grp.name; key.dsize = strlen( grp.name ) + 1; val.dptr = buf;