[net.bugs] Readnews Bug

rees@apollo.UUCP (08/03/84)

Here is the fix for readnews crashing after 8192 articles.

Add this line to defs.h.  Make this number as big as you want, keeping it
a multiple of 8.  I don't think it has to be a power of 2, but that's
what it was before.

#define BITMAPSIZE 32768 /* Size of bitmap for readnews; was hardcoded 8192 */

Now, make these changes in rextern.c and rfuncs.c:

*** UW/rextern.c	Thu Feb  2 14:00:17 1984
--- rextern.c	Wed Apr 25 15:10:12 1984
***************
*** 73,79
  FILE	*rcfp, *actfp;
  time_t	atime;
  char	newsrc[BUFLEN], groupdir[BUFLEN], *rcline[LINES], rcbuf[LBUFLEN];
! char	bitmap[1024], *argvrc[LINES];
  int	bit, obit, readmode = NEXT;
  int	defexp = FALSE;		/* set if def. expiration date used */
  int	actdirect = FORWARD;	/* read direction in ACTIVE file */

--- 73,79 -----
  FILE	*rcfp, *actfp;
  time_t	atime;
  char	newsrc[BUFLEN], groupdir[BUFLEN], *rcline[LINES], rcbuf[LBUFLEN];
! char	bitmap[BITMAPSIZE / 8], *argvrc[LINES];
  int	bit, obit, readmode = NEXT;
  int	defexp = FALSE;		/* set if def. expiration date used */
  int	actdirect = FORWARD;	/* read direction in ACTIVE file */

*** UW/rfuncs.c	Thu Feb  2 14:02:20 1984
--- rfuncs.c	Fri Jul  6 12:55:32 1984
***************
*** 300,306
  	while (!(get(next)) && next <= ngsize)
  		next++;
  	if (cur == next) {
! 		next = 8193;
  		goto skip;
  	}
  	if (cur + 1 == next)

--- 296,302 -----
  	while (!(get(next)) && next <= ngsize)
  		next++;
  	if (cur == next) {
! 		next = BITMAPSIZE + 1;
  		goto skip;
  	}
  	if (cur + 1 == next)

guy@rlgvax.UUCP (Guy Harris) (08/06/84)

News 2.10.2 handles newsgroups with articles with numbers > 8192 (but
not newsgroups with > 8192 active articles) by storing both the lowest article
number and the number of articles in the active file.  The bitmap encodes the
status of articles minart..minart+nart-1, rather than the status of articles
0..8191.  (Thanx and a tip of the Hatlo to Rick Adams for implementing this.)

	Guy Harris
	{seismo,ihnp4,allegra}!rlgvax!guy