Device may not be a real filename
diff --git a/mount.c b/mount.c
index 9d61bd3..fa885cb 100644
--- a/mount.c
+++ b/mount.c
@@ -334,12 +334,14 @@
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 @@
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;