Loading...
--- Libc/Libc-1725.40.4/gen/nftw.c
+++ Libc/Libc-583/gen/nftw.c
@@ -46,7 +46,7 @@
 	const char *paths[2];
 	struct FTW ftw;
 	FTSENT *cur;
-	FTS *ftsp = NULL;
+	FTS *ftsp;
 	int ftsflags, fnflag, error, postorder, sverrno;
 	int cwd_fd = -1; /* cwd_fd != -1 means call chdir a lot */
 
@@ -64,8 +64,7 @@
 	/* XXX - nfds is currently unused */
 	if (nfds < 1 || nfds > OPEN_MAX) {
 		errno = EINVAL;
-		error = -1;
-		goto done;
+		return (-1);
 	}
 
 	ftsflags = FTS_COMFOLLOW;
@@ -86,8 +85,7 @@
 	if (ftwflags & FTW_CHDIR) {
 	    cwd_fd = open(".", O_RDONLY, 0);
 	    if (cwd_fd < 0) {
-		error = -1;
-		goto done;
+		return -1;
 	    }
 	    /* Prevent problems if fts ever starts using chdir when passed
 	      FTS_PHYSICAL */
@@ -104,17 +102,16 @@
 	  ENOTDIR, and EACCES */
 	{
 	    int rc = stat(path, &path_stat);
+	    int e = errno;
 	    if (rc < 0 
 	      && (errno == ELOOP || errno == ENAMETOOLONG || errno == ENOENT
 	      || errno == ENOTDIR || errno == EACCES)) {
-		    error = -1;
-		    goto done;
+		    return -1;
 	    }
 	    if (rc >= 0 && nfn) {
 		if (!S_ISDIR(path_stat.st_mode)) {
 		    errno = ENOTDIR;
-		    error = -1;
-		    goto done;
+		    return -1;
 		}
 	    }
 	}
@@ -123,8 +120,7 @@
 	paths[1] = NULL;
 	ftsp = fts_open((char * const *)paths, ftsflags, NULL);
 	if (ftsp == NULL) {
-	    error = -1;
-	    goto done;
+	    return (-1);
 	}
 	error = 0;
 	while ((cur = fts_read(ftsp)) != NULL) {
@@ -150,7 +146,6 @@
 			break;
 		case FTS_F:
 		case FTS_DEFAULT:
-			SKIP_MOUNT;
 			fnflag = FTW_F;
 			break;
 		case FTS_NS:
@@ -216,14 +211,6 @@
 			free(free_me);
 		    }
 		    if (rc < 0) {
-			if(cur->fts_pathlen == cur->fts_namelen &&
-			   fnflag == FTW_DNR) {
-			    /* If cwd_fd is our last FD, fts_read will give us FTS_DNR
-			     * and fts_path == fts_name == "."
-			     * This check results in the correct errno being returned.
-			     */
-			    errno = EMFILE;
-			}
 			error = -1;
 			goto done;
 		    }
@@ -247,10 +234,7 @@
 	}
 done:
 	sverrno = errno;
-	if(ftsp != NULL)
-		(void) fts_close(ftsp);
-	if(cwd_fd >= 0)
-		(void) close(cwd_fd);
+	(void) fts_close(ftsp);
 	errno = sverrno;
 	return (error);
 }