lpd vs. files longer than 32kb

Steven M. Schultz sms at wlv.imsd.contel.com
Mon Dec 18 07:50:38 AEST 1989


Subject: lpd vs. files longer than 32kb
Index:	usr.lib/lpr/recvjob.c 2.10BSD

Description:
	There is a batch of long vs. int bugs in recvjob.c which
	will cause problems printing files longer than 32kb. An earlier
	bug report dealt with sending jobs from a 2.10.1BSD system outbound,
	this fix handles inbound print jobs.

	In addition, the freespace check for sufficient room on the
	spooling disc is incorrect because the amount of free space
	on a disc (fs_tfree) is a "daddr_t" rather than an "int".

Repeat-By:
	Send a file longer than 32kb to 'lpd' on a 2.10.1BSD system or,
	have more than 64k blocks free on the spooling filesystem.

Fix:
	Apply the following patch and recompile/install lpd.

*** recvjob.c.old	Sun Feb 22 06:33:06 1987
--- recvjob.c	Sun Dec 17 13:56:08 1989
***************
*** 21,31 ****
  
  char    tfname[40];		/* tmp copy of cf before linking */
  char    dfname[40];		/* data files */
! int	minfree;		/* keep at least minfree blocks available */
  char	*ddev;			/* disk device (for checking free space) */
  int	dfd;			/* file system device descriptor */
  
  char	*find_dev();
  
  recvjob()
  {
--- 21,32 ----
  
  char    tfname[40];		/* tmp copy of cf before linking */
  char    dfname[40];		/* data files */
! long	minfree;		/* keep at least minfree blocks available */
  char	*ddev;			/* disk device (for checking free space) */
  int	dfd;			/* file system device descriptor */
  
  char	*find_dev();
+ long	read_number(), atol();
  
  recvjob()
  {
***************
*** 110,116 ****
   */
  readjob()
  {
! 	register int size, nfiles;
  	register char *cp;
  
  	ack();
--- 111,118 ----
   */
  readjob()
  {
! 	register nfiles;
! 	long	size;
  	register char *cp;
  
  	ack();
***************
*** 187,197 ****
   */
  readfile(file, size)
  	char *file;
! 	int size;
  {
  	register char *cp;
  	char buf[BUFSIZ];
! 	register int i, j, amt;
  	int fd, err;
  
  	fd = open(file, O_WRONLY|O_CREAT, FILMOD);
--- 189,200 ----
   */
  readfile(file, size)
  	char *file;
! 	long size;
  {
  	register char *cp;
  	char buf[BUFSIZ];
! 	register int j, amt;
! 	long i;
  	int fd, err;
  
  	fd = open(file, O_WRONLY|O_CREAT, FILMOD);
***************
*** 246,256 ****
   * 1 == OK, 0 == Not OK.
   */
  chksize(size)
! 	int size;
  {
  	struct stat stb;
  	register char *ddev;
! 	int spacefree;
  	struct fs fs;
  
  	if (dfd < 0 || lseek(dfd, (long)(SBLOCK * DEV_BSIZE), 0) < 0)
--- 249,259 ----
   * 1 == OK, 0 == Not OK.
   */
  chksize(size)
! 	long size;
  {
  	struct stat stb;
  	register char *ddev;
! 	long spacefree;
  	struct fs fs;
  
  	if (dfd < 0 || lseek(dfd, (long)(SBLOCK * DEV_BSIZE), 0) < 0)
***************
*** 270,275 ****
--- 273,279 ----
  	return(1);
  }
  
+ long
  read_number(fn)
  	char *fn;
  {
***************
*** 283,289 ****
  		return (0);
  	}
  	fclose(fp);
! 	return (atoi(lin));
  }
  
  /*
--- 287,293 ----
  		return (0);
  	}
  	fclose(fp);
! 	return (atol(lin));
  }
  
  /*



More information about the Comp.bugs.2bsd mailing list