[PATCH] please review. file descriptor passing for libc_r.

Daniel Eischen eischen at vigrid.com
Sat Nov 29 21:41:08 PST 2003


On Sat, 29 Nov 2003, Alfred Perlstein wrote:

> * Daniel Eischen <eischen at vigrid.com> [031129 14:57] wrote:
> > > 
> > > What do you suggest we do?
> > 
> > Just close the file:
> > 
> > 	if ((fd < 0) || (fd >= _thread_dtablesize) ||
> > 	    (fd == _thread_kern_pipe[0]) || (fd == _thread_kern_pipe[1])) {
> > 		/*
> > 		 * Don't allow silly programs to close the kernel pipe
> > 		 * and non-active descriptors.
> > 		 */
> > 		errno = EBADF;
> > 		ret = -1;
> > 	}
> > 	else if (_thread_fd_table[fd] == NULL)
> > 		ret = __sys_close(fd);
> > 	else {
> > 		...
> > 	}
> 
> So remove the check?  do you approve? does re@ approve?

You should just call close() if the fd has not been initialized.

Index: uthread_close.c
===================================================================
RCS file: /opt/FreeBSD/cvs/src/lib/libc_r/uthread/uthread_close.c,v
retrieving revision 1.16
diff -u -r1.16 uthread_close.c
--- uthread_close.c	9 Jun 2003 16:45:37 -0000	1.16
+++ uthread_close.c	30 Nov 2003 09:05:52 -0000
@@ -50,8 +50,7 @@
 	struct fd_table_entry	*entry;
 
 	if ((fd < 0) || (fd >= _thread_dtablesize) ||
-	    (fd == _thread_kern_pipe[0]) || (fd == _thread_kern_pipe[1]) ||
-	    (_thread_fd_table[fd] == NULL)) {
+	    (fd == _thread_kern_pipe[0]) || (fd == _thread_kern_pipe[1])) {
 		/*
 		 * Don't allow silly programs to close the kernel pipe
 		 * and non-active descriptors.
@@ -59,6 +58,8 @@
 		errno = EBADF;
 		ret = -1;
 	}
+	else if (_thread_fd_table[fd] == NULL)
+		ret = __sys_close(fd);
 	/*
 	 * Lock the file descriptor while the file is closed and get
 	 * the file descriptor status:

-- 
Dan Eischen



More information about the freebsd-current mailing list