Changes by: cha0smaster
Update of /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20523/ntfsprogs
Modified Files:
Makefile.am ntfsmount.8.in ntfsmount.c
Log Message:
* change interface: ntfsmount device mnt_point -o opts
* hardlink ntfsmount to /sbin/mount.ntfs-fuse, thus volume can be mounted via fstab without any helpers
* update man page for ntfsmount
Index: Makefile.am
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/Makefile.am,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -p -r1.46 -r1.47
--- Makefile.am 25 Aug 2005 20:42:55 -0000 1.46
+++ Makefile.am 3 Oct 2005 21:07:24 -0000 1.47
@@ -139,10 +139,11 @@ extra: extras
extras: libs $(EXTRA_PROGRAMS)
-# mkfs.ntfs[.8] hard links
+# mkfs.ntfs[.8] and mount.ntfs-fuse hard links
install-exec-hook:
$(LN) -f $(DESTDIR)$(sbindir)/mkntfs $(DESTDIR)$(sbindir)/mkfs.ntfs
+ $(LN) -f $(DESTDIR)$(bindir)/ntfsmount /sbin/mount.ntfs-fuse
install-data-hook:
$(LN) -f $(DESTDIR)$(man8dir)/mkntfs.8 $(DESTDIR)$(man8dir)/mkfs.ntfs.8
@@ -150,4 +151,4 @@ install-data-hook:
uninstall-local:
rm -f $(DESTDIR)$(sbindir)/mkfs.ntfs
rm -f $(DESTDIR)$(man8dir)/mkfs.ntfs.8
-
+ rm -f /sbin/mount.ntfs-fuse
Index: ntfsmount.8.in
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/ntfsmount.8.in,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- ntfsmount.8.in 24 Sep 2005 16:19:29 -0000 1.6
+++ ntfsmount.8.in 3 Oct 2005 21:07:24 -0000 1.7
@@ -2,11 +2,11 @@
.\" Copyright (c) 2005 Yura Pakhuchiy. All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\"
-.TH NTFSMOUNT 8 "September 2005" "ntfsprogs version @VERSION@"
+.TH NTFSMOUNT 8 "October 2005" "ntfsprogs version @VERSION@"
.SH NAME
ntfsmount \- NTFS module for FUSE.
.SH SYNOPSIS
-.BI "ntfsmount " mount_point " \-o " device "[," other_options "]"
+.BI "ntfsmount " device " " mount_point " [\-o " options "]"
.SH DESCRIPTION
.B ntfsmount
is a
@@ -129,7 +129,7 @@ The default is infinite. Note that the
limited anyway to 32 pages (which is 128kbyte on i386).
.TP
-.B force=
+.B force
Force mount even if errors occured. Use this option only if you know what
are you doing and don't cry about data loss.
@@ -147,8 +147,9 @@ this option cancel this behaviour.
Don't change any permissions and don't return error on chmod operation.
.TP
-.B dev=
-Mount this device.
+.B locale=
+You can set locale with this option. It's useful if locale enviroment variables
+are not set before partitions from /etc/fstab had been mounted.
.SH DATA STREAMS
All data on NTFS is stored in streams, which can have names.
@@ -171,18 +172,25 @@ attribute. NOTE: The last feauture is un
will be never supported by kernel driver.
.SH EXAMPLES
-Mount /dev/hda1 to /mnt/ntfs-fuse using NTFS FUSE module:
+Mount /dev/hda1 to /mnt/ntfs-fuse using ntfsmount:
.RS
.sp
-.B ntfsmount /mnt/ntfs-fuse -o dev=/dev/hda1
+.B ntfsmount /dev/hda1 /mnt/ntfs-fuse
.sp
.RE
-Read-only mount /dev/hda5 to /home/user/tmp and make root to be owner of all
-files:
+Read-only mount /dev/hda5 to /home/user/mnt and make user with uid 1000 to be
+owner of all files:
.RS
.sp
-.B ntfsmount /home/user/tmp -o dev=/dev/hda5,ro,uid=0
+.B ntfsmount /dev/hda5 /home/user/mnt -o ro,uid=1000
+.sp
+.RE
+
+/etc/fstab entry for above:
+.RS
+.sp
+.B /dev/hda5 /home/user/mnt ntfs-fuse ro,uid=1000 0 0
.sp
.RE
Index: ntfsmount.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/ntfsmount.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -p -r1.36 -r1.37
--- ntfsmount.c 3 Oct 2005 19:48:54 -0000 1.36
+++ ntfsmount.c 3 Oct 2005 21:07:24 -0000 1.37
@@ -99,6 +99,7 @@ typedef enum {
static struct options {
char *mnt_point; /* Mount point */
char *options; /* Mount options */
+ char *device; /* Device to mount */
int quiet; /* Less output */
int verbose; /* Extra output */
} opts;
@@ -1180,19 +1181,18 @@ static void signal_handler(int arg __att
fuse_exit((fuse_get_context())->fuse);
}
-static char *parse_mount_options(char *org_options, char **device)
+static char *parse_mount_options(const char *org_options)
{
char *options, *s, *opt, *val, *ret;
BOOL no_def_opts = FALSE;
- *device = NULL;
/*
- * +3 for different in length of "fsname=..." and "dev=...".
+ * +7 for "fsname=".
* +1 for comma.
* +1 for null-terminator.
- * +PATH_MAX for resolved by realpath() device name
+ * +PATH_MAX for resolved by realpath() device name.
*/
- ret = malloc(strlen(def_opts) + strlen(org_options) + 5 + PATH_MAX);
+ ret = malloc(strlen(def_opts) + strlen(org_options) + 9 + PATH_MAX);
if (!ret) {
perror("malloc failed");
return NULL;
@@ -1206,25 +1206,7 @@ static char *parse_mount_options(char *o
s = options;
while ((val = strsep(&s, ","))) {
opt = strsep(&val, "=");
- if (!strcmp(opt, "dev")) { /* Device to mount. */
- if (!val) {
- Eprintf("'dev' option should have value.\n");
- goto err_exit;
- }
- *device = malloc(PATH_MAX + 1);
- if (!*device)
- goto err_exit;
- /* We don't want relative path in /etc/mtab. */
- if (val[0] != '/') {
- if (!realpath(val, *device)) {
- perror("");
- free(*device);
- *device = NULL;
- goto err_exit;
- }
- } else
- strcpy(*device, val);
- } else if (!strcmp(opt, "ro")) { /* Read-only mount. */
+ if (!strcmp(opt, "ro")) { /* Read-only mount. */
if (val) {
Eprintf("'ro' option should not have value.\n");
goto err_exit;
@@ -1323,12 +1305,10 @@ static char *parse_mount_options(char *o
strcat(ret, ",");
}
}
- if (!*device)
- goto err_exit;
if (!no_def_opts)
strcat(ret, def_opts);
strcat(ret, "fsname=");
- strcat(ret, *device);
+ strcat(ret, opts.device);
exit:
free(options);
return ret;
@@ -1343,13 +1323,12 @@ static void usage(void)
Eprintf("\n%s v%s - NTFS module for FUSE.\n\n",
EXEC_NAME, VERSION);
Eprintf("Copyright (c) 2005 Yura Pakhuchiy\n\n");
- Eprintf("usage: %s mount_point -o dev=device[,other_options]\n\n",
+ Eprintf("usage: %s device mount_point [-o options]\n\n",
EXEC_NAME);
Eprintf("Possible options are:\n\tdefault_permissions\n\tallow_other\n"
"\tkernel_cache\n\tlarge_read\n\tdirect_io\n\tmax_read\n\t"
"force\n\tro\n\tno_def_opts\n\tumask\n\tfmask\n\tdmask\n\t"
- "uid\n\tgid\n\tshow_sys_files\n\tsucceed_chmod\n\tdev\n\t"
- "locale\n\n");
+ "uid\n\tgid\n\tshow_sys_files\n\tsucceed_chmod\n\tlocale\n\n");
Eprintf("Default options are: \"%s\".\n", def_opts);
}
@@ -1380,15 +1359,36 @@ static int parse_options(int argc, char
opts.mnt_point = NULL;
opts.options = NULL;
+ opts.device = NULL;
while ((c = getopt_long(argc, argv, sopt, lopt, NULL)) != (char)-1) {
switch (c) {
case 1: /* A non-option argument */
- if (!opts.mnt_point)
+ if (!opts.device) {
+ opts.device = malloc(PATH_MAX + 1);
+ if (!opts.device) {
+ perror("malloc");
+ err++;
+ break;
+ }
+ /* We don't want relative path in /etc/mtab. */
+ if (argv[optind - 1][0] != '/') {
+ if (!realpath(argv[optind - 1],
+ opts.device)) {
+ perror("realpath");
+ free(opts.device);
+ opts.device = NULL;
+ err++;
+ break;
+ }
+ } else
+ strcpy(opts.device, argv[optind - 1]);
+ } else if (!opts.mnt_point)
opts.mnt_point = argv[optind - 1];
else {
- Eprintf("You must specify exactly one "
- "mount point.\n");
+ Eprintf("You must specify exactly one device "
+ "and exactly one mount "
+ "point.\n");
err++;
}
break;
@@ -1412,7 +1412,7 @@ static int parse_options(int argc, char
opts.verbose++;
break;
default:
- Eprintf("Unknown option '%s'.\n", argv[optind-1]);
+ Eprintf("Unknown option '%s'.\n", argv[optind - 1]);
err++;
break;
}
@@ -1421,9 +1421,8 @@ static int parse_options(int argc, char
if (help) {
opts.quiet = 0;
} else {
- if (!opts.options) {
- Eprintf("No mount options passed, but 'dev' option is "
- "mandatory.\n");
+ if (!opts.device) {
+ Eprintf("No mount point specified.\n");
err++;
}
@@ -1448,7 +1447,7 @@ static int parse_options(int argc, char
int main(int argc, char *argv[])
{
- char *parsed_options, *device;
+ char *parsed_options;
struct fuse *fh;
int ffd;
@@ -1461,25 +1460,22 @@ int main(int argc, char *argv[])
ntfs_fuse_init();
/* Parse options. */
- parsed_options = parse_mount_options(opts.options, &device);
- if (!device) {
- Eprintf("'dev' option is mandatory.\n");
- ntfs_fuse_destroy();
- return 2;
- }
+ parsed_options = parse_mount_options((opts.options) ?
+ opts.options : "");
if (!parsed_options) {
- free(device);
+ if (opts.device)
+ free(opts.device);
ntfs_fuse_destroy();
return 3;
}
/* Mount volume. */
- if (ntfs_fuse_mount(device)) {
- free(device);
+ if (ntfs_fuse_mount(opts.device)) {
ntfs_fuse_destroy();
+ free(opts.device);
return 4;
}
- free(device);
+ free(opts.device);
/* Create filesystem. */
ffd = fuse_mount(opts.mnt_point, parsed_options);
if (ffd == -1) {
|