#define FUSE_USE_VERSION 27 #include #include "saga-fs.hpp" #include "file-fs.hpp" #include "logicalfile-fs.hpp" ///////////////////////////////////////////////////////////// #define SAGAFS_OPT(t, p, v) { t, offsetof(struct saga_opts_def, p), v } static struct fuse_opt saga_options[] = { //in the style of -o... for some reason SAGAFS_OPT("--prefix=%s", prefix, 0), SAGAFS_OPT("--log=%s", log, 0), SAGAFS_OPT("--type=%s", type, 0), SAGAFS_OPT("-t %s", type, 0), SAGAFS_OPT("--blocksoze=%u", blocksize, 0), {NULL, 0, 0} }; ///////////////////////////////////////////////////////////// int main(int argc, char *argv[]) { struct fuse_args args = FUSE_ARGS_INIT(argc, argv); //Set up defaults saga_opts.prefix = "file://localhost/"; saga_opts.type = "file"; saga_opts.log = "/home/bane/saga/trunk/examples/applications/file-fs/log.txt"; saga_opts.blocksize = 4096; if(fuse_opt_parse(&args, &saga_opts, saga_options, NULL) == -1) { std::cout << "Error parsing" << std::endl; return 0; } struct fuse_operations saga_oper; memset(&saga_oper, 0, sizeof(struct fuse_operations)); std::cout << "type = " << saga_opts.type << std::endl;; if(strcmp(saga_opts.type, "file") == 0) { saga_oper.getattr = file::saga_getattr; saga_oper.readlink = file::saga_readlink; saga_oper.mknod = file::saga_mknod; saga_oper.mkdir = file::saga_mkdir; saga_oper.rmdir = file::saga_rmdir; saga_oper.unlink = file::saga_unlink; saga_oper.rename = file::saga_rename; saga_oper.truncate = file::saga_truncate; saga_oper.open = file::saga_open; saga_oper.read = file::saga_read; saga_oper.write = file::saga_write; saga_oper.readdir = file::saga_readdir; saga_oper.utimens = file::saga_utimens; } else if(strcmp(saga_opts.type, "logical_file") == 0) { saga_oper.getattr = logical_file::saga_getattr; saga_oper.readlink = logical_file::saga_readlink; saga_oper.mknod = logical_file::saga_mknod; saga_oper.mkdir = logical_file::saga_mkdir; saga_oper.rmdir = logical_file::saga_rmdir; saga_oper.unlink = logical_file::saga_unlink; saga_oper.rename = logical_file::saga_rename; saga_oper.truncate = logical_file::saga_truncate; saga_oper.open = logical_file::saga_open; saga_oper.read = logical_file::saga_read; saga_oper.write = logical_file::saga_write; saga_oper.readdir = logical_file::saga_readdir; saga_oper.utimens = logical_file::saga_utimens; } else { std::cout << "Unknown Filesystem Type" << std::endl; return 0; } return fuse_main(args.argc, args.argv, &saga_oper, NULL); }