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
Author: john
Date: Tue, 24 Mar 1987 19:43
Date: Tue, 24 Mar 1987 19:43
58 lines
3286 bytes
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