]> git.sven.stormbind.net Git - sven/fuse-exfat.git/blobdiff - fuse/main.c
Imported Upstream version 0.9.8
[sven/fuse-exfat.git] / fuse / main.c
index fe5666beabab1fe0657ef670aa7ed357a8829fc3..643df3f7e7557bf51282a9fc566a6c3b281de901 100644 (file)
@@ -2,7 +2,7 @@
        main.c (01.09.09)
        FUSE-based exFAT implementation. Requires FUSE 2.6 or later.
 
-       Copyright (C) 2009, 2010  Andrew Nayenko
+       Copyright (C) 2010-2012  Andrew Nayenko
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#define FUSE_USE_VERSION 26
 #include <fuse.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -37,7 +38,7 @@
        #error FUSE 2.6 or later is required
 #endif
 
-const char* default_options = "allow_other,blkdev";
+const char* default_options = "ro_fallback,allow_other,blkdev";
 
 struct exfat ef;
 
@@ -153,14 +154,14 @@ static int fuse_exfat_read(const char* path, char* buffer, size_t size,
                off_t offset, struct fuse_file_info* fi)
 {
        exfat_debug("[fuse_exfat_read] %s (%zu bytes)", path, size);
-       return exfat_read(&ef, get_node(fi), buffer, size, offset);
+       return exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
 }
 
 static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
                off_t offset, struct fuse_file_info* fi)
 {
        exfat_debug("[fuse_exfat_write] %s (%zu bytes)", path, size);
-       return exfat_write(&ef, get_node(fi), buffer, size, offset);
+       return exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
 }
 
 static int fuse_exfat_unlink(const char* path)
@@ -401,7 +402,7 @@ int main(int argc, char* argv[])
                else if (strcmp(*pp, "-v") == 0)
                {
                        free(mount_options);
-                       puts("Copyright (C) 2009  Andrew Nayenko");
+                       puts("Copyright (C) 2010-2012  Andrew Nayenko");
                        return 0;
                }
                else if (spec == NULL)
@@ -426,6 +427,16 @@ int main(int argc, char* argv[])
                return 1;
        }
 
+       if (ef.ro_fallback)
+       {
+               mount_options = add_option(mount_options, "ro", NULL);
+               if (mount_options == NULL)
+               {
+                       exfat_unmount(&ef);
+                       return 1;
+               }
+       }
+
        mount_options = add_fuse_options(mount_options, spec);
        if (mount_options == NULL)
        {