commit - eab9c97a63b6f297f304a536b16b071100dad36e
commit + 88dc1f7a6862804e618af943dae47cbd6e46dc97
blob - e035e63cf465225688df2394fb4293fdff55ba09
blob + f2974d3582352635bcb6cd837b2681c05b7eeea8
--- README.md
+++ README.md
### Using
```sh
-$ ./build/unreliablefs ~/Downloads/mnt/ -omodules=subdir,subdir=/tmp
-$ ls ~/Downloads/mnt/
-$ umount /tmp/unreliable
+$ mkdir /tmp/basedir
+$ mkdir /tmp/fs
+$ unreliablefs /tmp/fs -omodules=subdir,subdir=/tmp/basedir
+$ cd /tmp/fs
+$ ls -la
+$ umount /tmp/fs
```
blob - 60f1815f4c68ff9a076e24952446501c69bc87b0
blob + 4ee74ff31d877fb2e11d07c17879a17b7b777d3b
--- unreliablefs.c
+++ unreliablefs.c
#define FUSE_USE_VERSION 29
+#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif /* HAVE_UTIMENSAT */
};
-int main(int argc, char *argv[])
+struct unreliablefs_config {
+ int seed;
+ char *base_dir;
+};
+
+enum {
+ KEY_HELP,
+ KEY_VERSION,
+};
+
+#define UNRELIABLEFS_OPT(t, p, v) { t, offsetof(struct unreliablefs_config, p), v }
+#define UNRELIABLEFS_VERSION "0.1"
+
+static struct fuse_opt unreliablefs_opts[] = {
+ UNRELIABLEFS_OPT("seed=%i", seed, 0),
+ UNRELIABLEFS_OPT("base_dir=%s", base_dir, 0),
+
+ FUSE_OPT_KEY("-V", KEY_VERSION),
+ FUSE_OPT_KEY("--version", KEY_VERSION),
+ FUSE_OPT_KEY("-h", KEY_HELP),
+ FUSE_OPT_KEY("--help", KEY_HELP),
+ FUSE_OPT_END
+};
+
+static int unreliablefs_opt_proc(void *data, const char *arg, int key, struct fuse_args *outargs)
{
-#if defined(DEBUG)
- int fuse_argc = 3;
- char *fuse_argv[fuse_argc];
+ switch (key) {
+ case KEY_HELP:
+ fprintf(stderr,
+ "\n"
+ "UnreliableFS options:\n"
+ " -o seed=NUM\n"
+ " -o base_dir=STRING\n\n");
+ fuse_opt_add_arg(outargs, "-h");
+ fuse_main(outargs->argc, outargs->argv, &unreliable_ops, NULL);
+ exit(1);
- if (argc != 2) {
- fprintf(stderr, "Usage: %s MOUNTPOINT\n", argv[0]);
- return EXIT_FAILURE;
+ case KEY_VERSION:
+ fprintf(stderr, "UnreliableFS version %s\n", UNRELIABLEFS_VERSION);
+ fuse_opt_add_arg(outargs, "--version");
+ fuse_main(outargs->argc, outargs->argv, &unreliable_ops, NULL);
+ exit(0);
}
+ return 1;
+}
- fuse_argv[0] = argv[0];
- fuse_argv[1] = argv[1];
- #if FUSE_USE_VERSION < 30
- fuse_argv[2] = "-ononempty,suid,dev,allow_other,default_permissions";
- #else
- fuse_argv[2] = "-osuid,dev,allow_other,default_permissions";
- #endif
- fuse_argv[3] = NULL;
+int main(int argc, char *argv[])
+{
+ struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
+ struct unreliablefs_config conf;
+ memset(&conf, 0, sizeof(conf));
+
+ fuse_opt_parse(&args, &conf, unreliablefs_opts, unreliablefs_opt_proc);
+ /* fuse_opt_add_arg(&args, "-omodules=subdir,subdir=/tmp"); */
fprintf(stdout, "Starting FUSE filesystem\n");
- return fuse_main(fuse_argc, fuse_argv, &unreliable_ops, NULL);
-#else
- fprintf(stdout, "Starting FUSE filesystem\n");
- return fuse_main(argc, argv, &unreliable_ops, NULL);
-#endif /* DEBUG */
+ fprintf(stdout, "Seed %d, base_dir %s\n", conf.seed, conf.base_dir);
+
+ return fuse_main(args.argc, args.argv, &unreliable_ops, NULL);
}