[net.sources.bugs] ARC unsqueeze fix

john@monuxa.UUCP (John Ruschmeyer) (12/19/86)

When the UNIX  version of ARC was posted a while ago, I brought it up on
our systems here. Unlike a recent poster to this newsgroup, I had no
problem with the Lempel-Ziv (crunch) code, but never could get it to
correctly squeeze or unsqueeze a file in an archive.

Reading the source code, I noticed that the squeeze/unsqueeze code on ARC
is based on an earlier version of the recently-posted portable SQ/USQ
programs. Using code from that program I was able to fix the problem with
ARC not correctly unsqueezing a file in the archive (creating either a
zero-length file or giving the 'invalid decode tree' message).

NOTE: I am still having problems with the squeeze code on our system. For
some reason, trying to archive a file which would normally be squeezed on
the MS-DOS version of ARC results in it being compressed with some
less-efficient method. I think this is a bug, but it appears to be a
harmless one.

Context diffs for the unsqueeze fix follow:

*** arcusq.c.old	Tue Dec 16 11:14:54 1986
--- arcusq.c	Thu Dec 18 16:29:07 1986
***************
*** 35,41
  static int get_int(f)                  /* get an integer */
  FILE *f;                               /* file to get it from */
  {
!     return getc_unp(f) | (getc_unp(f)<<8);
  }
  
  init_usq(f)                            /* initialize Huffman unsqueezing */

--- 35,46 -----
  static int get_int(f)                  /* get an integer */
  FILE *f;                               /* file to get it from */
  {
! int temp;
! 
! temp = getc_unp(f);                    /* get low order byte */
! temp |= getc_unp(f) << 8;
! if (temp & 0x8000) temp |= (~0) << 15; /* propogate sign for big ints */
! return (temp);
  }
  
  init_usq(f)                            /* initialize Huffman unsqueezing */
-- 
Name:		John Ruschmeyer
US Mail:	Monmouth College, W. Long Branch, NJ 07764
Phone:		(201) 571-3451
UUCP:		...!vax135!petsd!moncol!john	...!princeton!moncol!john
						   ...!pesnta!moncol!john

	Actually, I know a lot about what turns a woman off.
	Now, if I could just stop doing it I'd be all set.