From 3aae10014c184cb28e30196cafa143fe622fc508 Mon Sep 17 00:00:00 2001
From: Glenn L McGrath <bug1@ihug.co.nz>
Date: Mon, 7 May 2001 01:38:03 +0000
Subject: Device may not be a real filename

---
 util-linux/mount.c | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

(limited to 'util-linux/mount.c')

diff --git a/util-linux/mount.c b/util-linux/mount.c
index 9d61bd3e3..fa885cb1e 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -334,12 +334,14 @@ void show_mounts()
 
 extern int mount_main(int argc, char **argv)
 {
+	struct stat statbuf;
 	char string_flags_buf[1024] = "";
 	char *string_flags = string_flags_buf;
 	char *extra_opts = string_flags_buf;
 	int flags = 0;
 	char *filesystemType = "auto";
-	char device[PATH_MAX], directory[PATH_MAX];
+	char *device = xmalloc(PATH_MAX);
+	char *directory = xmalloc(PATH_MAX);
 	int all = FALSE;
 	int fakeIt = FALSE;
 	int useMtab = TRUE;
@@ -382,19 +384,23 @@ extern int mount_main(int argc, char **argv)
 		show_mounts();
 
 	if (optind < argc) {
-		/* Don't canonicalize NFS devices.  */
-		if (strchr(argv[optind], ':') != NULL)
+		/* if device is a filename get its real path */
+		if ((strchr(argv[optind], ':') == NULL) &&
+			(stat(argv[optind], &statbuf) == 0)) {
+			realpath(argv[optind], device);
+		} else {
 			safe_strncpy(device, argv[optind], PATH_MAX);
-		else if (realpath(argv[optind], device) == NULL)
-			perror_msg_and_die("%s", device);
+		}
 	}
 
-	if (optind + 1 < argc)
-		if (realpath(argv[optind + 1], directory) == NULL)
-			perror_msg_and_die("%s", directory);
-
+	if (optind + 1 < argc) {
+		if (realpath(argv[optind + 1], directory) == NULL) {
+			perror_msg_and_die("Invalid directory %s", directory);
+		}
+	}
+	
 	if (all == TRUE || optind + 1 == argc) {
-		struct mntent *m;
+		struct mntent *m = NULL;
 		FILE *f = setmntent("/etc/fstab", "r");
 		fstabmount = TRUE;
 
-- 
cgit v1.2.3-55-g6feb