Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Jul 2007 10:06:58 GMT
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 122934 for review
Message-ID:  <200707051006.l65A6w3O043086@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122934

Change 122934 by rdivacky@rdivacky_witten on 2007/07/05 10:06:17

	Naive implementation of fdopendir.

Affected files ...

.. //depot/projects/soc2007/rdivacky/linux_at/lib/libc/gen/fdopendir.c#2 edit

Differences ...

==== //depot/projects/soc2007/rdivacky/linux_at/lib/libc/gen/fdopendir.c#2 (text+ko) ====

@@ -31,7 +31,7 @@
 static char sccsid[] = "@(#)opendir.c	8.8 (Berkeley) 5/1/95";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/opendir.c,v 1.23 2007/01/09 00:27:54 imp Exp $");
+__FBSDID("$FreeBSD$");
 
 #include "namespace.h"
 #include <sys/param.h>
@@ -51,37 +51,24 @@
  * Open a directory.
  */
 DIR *
-opendir(name)
-	const char *name;
+fdopendir(fd)
+	const int fd;
 {
 
-	return (__opendir2(name, DTF_HIDEW|DTF_NODUP));
+	return (__fdopendir2(fd, DTF_HIDEW|DTF_NODUP));
 }
 
 DIR *
-__opendir2(name, flags)
-	const char *name;
+__fdopendir2(fd, flags)
+	const int fd;
 	int flags;
 {
 	DIR *dirp;
-	int fd;
 	int incr;
 	int saved_errno;
 	int unionstack;
 	struct stat statb;
 
-	/*
-	 * stat() before _open() because opening of special files may be
-	 * harmful.  _fstat() after open because the file may have changed.
-	 */
-	if (stat(name, &statb) != 0)
-		return (NULL);
-	if (!S_ISDIR(statb.st_mode)) {
-		errno = ENOTDIR;
-		return (NULL);
-	}
-	if ((fd = _open(name, O_RDONLY | O_NONBLOCK)) == -1)
-		return (NULL);
 	dirp = NULL;
 	if (_fstat(fd, &statb) != 0)
 		goto fail;
@@ -168,14 +155,7 @@
 		 * which has also been read -- see fts.c.
 		 */
 		if (flags & DTF_REWIND) {
-			(void)_close(fd);
-			if ((fd = _open(name, O_RDONLY)) == -1) {
-				saved_errno = errno;
-				free(buf);
-				free(dirp);
-				errno = saved_errno;
-				return (NULL);
-			}
+		/* XXX: what here? */
 		}
 
 		/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707051006.l65A6w3O043086>