🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: net.sources.bugs
1 messages
1 total messages Started by john Tue, 24 Mar 1987 19:43
Bug in (System V at least) UNIX ARC
#979
Author: john
Date: Tue, 24 Mar 1987 19:43
58 lines
3286 bytes
There is a bug in the System V port of ARC 5.12; in the gocode()
function of arclzw.c, getc_unp(), which returns an int, is called, and
the return value is assigned to an unsigned.  The result of this is
then checked against EOF.  The new Sun C compiler loudly complains
(with a verbose, 3-line, warning message for each assignment).
ANSI-compliant C compilers will likely complain as well (at least for
libraries where EOF == -1 !).

The fixes are below, in context diff form, suitable for patching.

*** /tmp/,RCSt1a03521	Tue Mar 24 14:38:19 1987
--- arclzw.c	Tue Mar 24 14:37:53 1987
***************
*** 674,680
  static INT gocode(fd)                      /* read in a twelve bit code */
  FILE *fd;                              /* file to get code from */
  {
!     unsigned INT localbuf, returnval;
  
      if(inbuf==EMPTY)                   /* if on a code boundary */
      {    if((localbuf=getc_unp(fd))==EOF)   /* get start of next code */

--- 674,680 -----
  static INT gocode(fd)                      /* read in a twelve bit code */
  FILE *fd;                              /* file to get code from */
  {
!     INT localbuf, returnval, intemp;
  
      if(inbuf==EMPTY)                   /* if on a code boundary */
      {    if((localbuf=getc_unp(fd))==EOF)   /* get start of next code */
***************
*** 680,688
      {    if((localbuf=getc_unp(fd))==EOF)   /* get start of next code */
                return EOF;              /* pass back end of file status */
           localbuf &= 0xFF;             /* mask down to true byte value */
!          if((inbuf=getc_unp(fd))==EOF) /* get end of code, start of next */
!               return EOF;              /* this should never happen */
!          inbuf &= 0xFF;                /* mask down to true byte value */
  
           returnval = ((localbuf<<4)&0xFF0) + ((inbuf>>4)&0x00F);
           inbuf &= 0x000F;              /* leave partial code pending */

--- 680,688 -----
      {    if((localbuf=getc_unp(fd))==EOF)   /* get start of next code */
                return EOF;              /* pass back end of file status */
           localbuf &= 0xFF;             /* mask down to true byte value */
!          if((intemp=getc_unp(fd))==EOF) /* get end of code, start of next */
!               {inbuf=intemp; return EOF;}     /* this should never happen */
!          inbuf = intemp & 0xFF;           /* mask down to true byte value */
  
           returnval = ((localbuf<<4)&0xFF0) + ((inbuf>>4)&0x00F);
           inbuf &= 0x000F;              /* leave partial code pending */


-- 
John Owens		Old Dominion University - Norfolk, Virginia, USA
john@ODU.EDU		old arpa: john%odu.edu@RELAY.CS.NET
+1 804 440 3915		old uucp: {seismo,harvard,sun,hoptoad}!xanth!john
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