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
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>
#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;
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)
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)
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)
{