[comp.os.minix] fopen/fclose bug + fix

meulenbr@cst.UUCP (Frans Meulenbroeks) (11/12/88)

Hi!
I've found a minor bug in fopen/fclose. 0 is used for assignment
and comparison against _io_table, while (FILE *)0 would be better.

I think it is cleaner to fix printdat.c as well. However, I don't know
for sure if this is really needed.

The bug applies to Minix/ST. PC people should check out for themselves
whether or not this is appropriate. Fixes (cdiffs) are at the end.

Frans Meulenbroeks (signature at end)

#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
-----cut here-----cut here-----cut here-----cut here-----
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	fclose.cdiff
#	fopen.cdiff
#	printdat.cdiff
# This archive created: Fri Nov 11 19:32:53 1988
sed 's/^X//' << \SHAR_EOF > fclose.cdiff
X*** ../lib/fclose.c	Tue Mar  1 21:37:18 1988
X--- ./fclose.c	Sat Nov 12 01:31:32 1988
X***************
X*** 7,13 ****
X  
X  	for (i=0; i<NFILES; i++)
X  		if (fp == _io_table[i]) {
X! 			_io_table[i] = 0;
X  			break;
X  		}
X  	if (i >= NFILES)
X--- 7,13 ----
X  
X  	for (i=0; i<NFILES; i++)
X  		if (fp == _io_table[i]) {
X! 			_io_table[i] = (FILE *)0;
X  			break;
X  		}
X  	if (i >= NFILES)
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > fopen.cdiff
X*** ../lib/fopen.c	Tue Mar  1 21:37:20 1988
X--- ./fopen.c	Sat Nov 12 01:31:16 1988
X***************
X*** 12,18 ****
X  	int fd,
X  	flags = 0;
X  
X! 	for (i = 0; _io_table[i] != 0 ; i++) 
X  		if ( i >= NFILES )
X  			return(NULL);
X  
X--- 12,18 ----
X  	int fd,
X  	flags = 0;
X  
X! 	for (i = 0; _io_table[i] != (FILE *)0 ; i++) 
X  		if ( i >= NFILES )
X  			return(NULL);
X  
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > printdat.cdiff
X*** ../lib/printdat.c	Tue Mar  1 21:37:38 1988
X--- ./printdat.c	Sat Nov 12 01:31:46 1988
X***************
X*** 19,23 ****
X  	&_stdin,
X  	&_stdout,
X  	&_stderr,
X! 	0
X  };
X--- 19,23 ----
X  	&_stdin,
X  	&_stdout,
X  	&_stderr,
X! 	(FILE *)0
X  };
SHAR_EOF
#	End of shell archive
exit 0
-- 
Frans Meulenbroeks        (meulenbr@cst.prl.philips.nl)
	Centre for Software Technology
	( or try: ...!mcvax!philmds!prle!cst!meulenbr)

henry@utzoo.uucp (Henry Spencer) (11/15/88)

In article <259@cst.UUCP> meulenbr@cst.UUCP (Frans Meulenbroeks) writes:
>I've found a minor bug in fopen/fclose. 0 is used for assignment
>and comparison against _io_table, while (FILE *)0 would be better.

This is not a bug if the code is written in C (whether the language
accepted by the ST Minix compiler is precisely C is something I cannot
check at the moment).  The only place where it is necessary to cast a
0 or NULL to a specific pointer type is when passing a parameter to a
function.  In all other contexts, a C compiler knows what the type of
the value is supposed to be, and will do the cast for you.
-- 
Sendmail is a bug,             |     Henry Spencer at U of Toronto Zoology
not a feature.                 | uunet!attcan!utzoo!henry henry@zoo.toronto.edu