🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Don Bennett 433-3311, 408 Sat, 25 Mar 1989 18:25
tar 1.05 bugs
#1518
Author: Don Bennett 433-3311, 408
Date: Sat, 25 Mar 1989 18:25
84 lines
2492 bytes
Running tar-1.05 on a sun-3, Sun-os 3.5 running tar, /etc/rmt on
Sun-os 4.0, but I hope that doesn't matter:

1) Reblocking code doesn't right when writing a compressed tar file
   to a remote tape drive.  When writing the last block, at least to
   the device /dev/rst8, the number of bytes written must be a multiple
   of 512.

   Recreate the problem via:
      tar cvzf poplar:/dev/rst8 ./stuff

 2) When unpacking a compressed tar file from disc, tar decides it has
    reached the end of the archive and closes the pipe while compress
    is still writing some garbage into it. 
    
Included are patches I use to fix these problems.

*** tar-1.05/buffer.c.orig	Thu Mar  2 09:56:32 1989
--- tar-1.05/buffer.c	Thu Mar 23 14:19:00 1989
***************
*** 402,408 ****
  				}
  			} else {
  				for(;;) {
! 					int n;
  					char *ptr;
  		
  					n=blocksize;
--- 402,408 ----
  				}
  			} else {
  				for(;;) {
! 					int n, partialBlock;
  					char *ptr;
  		
  					n=blocksize;
***************
*** 416,426 ****
  					}
  						/* EOF */
  					if(err==0) {
! 						blocksize-=n;
! 						err=rmtwrite(archive,ar_block->charptr,blocksize);
! 						if(err!=(blocksize))
  							writeerror(err);
- 						blocksize+=n;
  						break;
  					}
  					if(n) {
--- 416,426 ----
  					}
  						/* EOF */
  					if(err==0) {
! 						partialBlock=blocksize-n;
! 						partialBlock = (partialBlock+511)&(~0x1ff);
! 						err=rmtwrite(archive,ar_block->charptr,partialBlock);
! 						if(err!=(partialBlock))
  							writeerror(err);
  						break;
  					}
  					if(n) {
***************
*** 1031,1037 ****
  	}
  	if(f_verify)
  		verify_volume();
! 	(void) rmtclose(archive);
  
  #ifndef	MSDOS
  	if (childpid) {
--- 1031,1043 ----
  	}
  	if(f_verify)
  		verify_volume();
! 
! 	if (ar_reading && f_reblock) {
! 	    static char junkbuf[1024];
! 	    while (read(archive, junkbuf, 1024) > 0)
! 		;
! 	} else
! 	    (void) rmtclose(archive);
  
  #ifndef	MSDOS
  	if (childpid) {
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads