OSDN Git Service

Added "quiet" option that makes chmod() and chown() always succeed. Useful for applic...
authorresver@gmail.com <resver@gmail.com@60bc1c72-a15a-11de-b98f-4500b42dc123>
Sat, 20 Apr 2013 10:01:24 +0000 (10:01 +0000)
committerresver@gmail.com <resver@gmail.com@60bc1c72-a15a-11de-b98f-4500b42dc123>
Sat, 20 Apr 2013 10:01:24 +0000 (10:01 +0000)
git-svn-id: http://exfat.googlecode.com/svn/trunk@351 60bc1c72-a15a-11de-b98f-4500b42dc123

fuse/main.c
fuse/mount.exfat-fuse.8
libexfat/exfat.h
libexfat/mount.c

index 7a58b8e..284ec23 100644 (file)
 #endif
 
 const char* default_options = "ro_fallback,allow_other,blkdev,big_writes,"
-               "defer_permissions";
+               "defer_permissions"
+#ifdef __APPLE__
+               ",quiet"
+#endif
+               ;
 
 struct exfat ef;
 
@@ -242,14 +246,17 @@ static int fuse_exfat_utimens(const char* path, const struct timespec tv[2])
        return 0;
 }
 
-#ifdef __APPLE__
 static int fuse_exfat_chmod(const char* path, mode_t mode)
 {
        exfat_debug("[%s] %s 0%ho", __func__, path, mode);
-       /* make OS X utilities happy */
-       return 0;
+       return ef.quiet ? 0 : -ENOSYS;
+}
+
+static int fuse_exfat_chown(const char* path, uid_t uid, gid_t gid)
+{
+       exfat_debug("[%s] %s %u:%u", __func__, path, uid, gid);
+       return ef.quiet ? 0 : -ENOSYS;
 }
-#endif
 
 static int fuse_exfat_statfs(const char* path, struct statvfs* sfs)
 {
@@ -311,9 +318,8 @@ static struct fuse_operations fuse_exfat_ops =
        .mkdir          = fuse_exfat_mkdir,
        .rename         = fuse_exfat_rename,
        .utimens        = fuse_exfat_utimens,
-#ifdef __APPLE__
        .chmod          = fuse_exfat_chmod,
-#endif
+       .chown          = fuse_exfat_chown,
        .statfs         = fuse_exfat_statfs,
        .init           = fuse_exfat_init,
        .destroy        = fuse_exfat_destroy,
index 5200c10..2fd5feb 100644 (file)
@@ -77,6 +77,12 @@ Mount the file system in read only mode.
 .TP
 .BI noatime
 Do not update access time when file is read.
+.TP
+.BI quiet
+Owner, group and mode attributes are not supported by the current
+implementation, so chmod() and chown() requests fail with ENOSYS. This option
+makes them always succeed, i.e. all requests to change owner, group or mode
+will be silently ignored. Default on OS\ X.
 
 .SH EXIT CODES
 Zero is returned on successful mount. Any other code means an error.
index 8596efd..8a33afa 100644 (file)
@@ -106,6 +106,7 @@ struct exfat
        gid_t gid;
        int ro;
        bool noatime;
+       bool quiet;
 };
 
 /* in-core nodes iterator */
index ec4f52e..0466639 100644 (file)
@@ -87,6 +87,7 @@ static void parse_options(struct exfat* ef, const char* options)
        ef->gid = get_int_option(options, "gid", 10, getegid());
 
        ef->noatime = match_option(options, "noatime");
+       ef->quiet = match_option(options, "quiet");
 }
 
 static int verify_vbr_checksum(struct exfat_dev* dev, void* sector,