More stuff.
diff --git a/coreutils/df.c b/coreutils/df.c
index a0692af..bbda694 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -17,7 +17,7 @@
 	long		blocks_percent_used;
 
 	if ( statfs(mountPoint, &s) != 0 ) {
-		name_and_error(mountPoint);
+		perror(mountPoint);
 		return 1;
 	}
 	
@@ -52,7 +52,7 @@
 }
 
 extern int
-df_main(struct FileInfo * i, int argc, char * * argv)
+df_main(int argc, char * * argv)
 {
 	static const char header[] =
 	 "Filesystem         1024-blocks  Used Available Capacity Mounted on\n";
@@ -63,11 +63,9 @@
 		int				status;
 
 		while ( argc > 1 ) {
-			if ( (mountEntry = findMountPoint(argv[1], "/etc/mtab")) == 0
-			 && (mountEntry = findMountPoint(argv[1], "/proc/mounts")) == 0 )
+			if ( (mountEntry = findMountPoint(argv[1], "/proc/mounts")) == 0 )
 			{
-				fprintf(stderr, "%s: can't find mount point.\n"
-				,argv[1]);
+				fprintf(stderr, "%s: can't find mount point.\n" ,argv[1]);
 				return 1;
 			}
 			status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
@@ -82,10 +80,8 @@
 		FILE *		mountTable;
 		struct mntent *	mountEntry;
 
-		if ( (mountTable = setmntent("/etc/mtab", "r")) == 0
-		 && (mountTable = setmntent("/proc/mounts", "r")) == 0
-		) {
-			name_and_error("/etc/mtab");
+		if ( (mountTable = setmntent("/proc/mounts", "r")) == 0) {
+			perror("/proc/mounts");
 			return 1;
 		}
 
@@ -101,3 +97,48 @@
 	
 	return 0;
 }
+
+
+
+
+/*
+ * Given a block device, find the mount table entry if that block device
+ * is mounted.
+ *
+ * Given any other file (or directory), find the mount table entry for its
+ * filesystem.
+ */
+extern struct mntent *
+findMountPoint(const char * name, const char * table)
+{
+	struct stat	s;
+	dev_t			mountDevice;
+	FILE *			mountTable;
+	struct mntent *	mountEntry;
+
+	if ( stat(name, &s) != 0 )
+		return 0;
+
+	if ( (s.st_mode & S_IFMT) == S_IFBLK )
+		mountDevice = s.st_rdev;
+	else
+		mountDevice = s.st_dev;
+
+	
+	if ( (mountTable = setmntent(table, "r")) == 0 )
+		return 0;
+
+	while ( (mountEntry = getmntent(mountTable)) != 0 ) {
+		if ( strcmp(name, mountEntry->mnt_dir) == 0
+		 || strcmp(name, mountEntry->mnt_fsname) == 0 )	/* String match. */
+			break;
+		if ( stat(mountEntry->mnt_fsname, &s) == 0
+		 && s.st_rdev == mountDevice )	/* Match the device. */
+				break;
+		if ( stat(mountEntry->mnt_dir, &s) == 0
+		 && s.st_dev == mountDevice )	/* Match the directory's mount point. */
+			break;
+	}
+	endmntent(mountTable);
+	return mountEntry;
+}