aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Baptiste Daroussin <bapt@FreeBSD.org>2017-08-03 14:37:07 +0200
committerGravatar Nikolaus Rath <Nikolaus@rath.org>2017-08-03 16:40:36 +0200
commit8f3c800e151d8d8844d851344f85f6baa3ac2d8f (patch)
tree2b44be2afc5006799c591fcdd019527331637678 /lib
parent91ab3b53a30719e34ab05036c8421236ff92d09c (diff)
FreeBSD: supprt fsname= option
Diffstat (limited to 'lib')
-rw-r--r--lib/helper.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/helper.c b/lib/helper.c
index 5032b68..c562c43 100644
--- a/lib/helper.c
+++ b/lib/helper.c
@@ -41,10 +41,16 @@ static const struct fuse_opt fuse_helper_opts[] = {
FUSE_OPT_KEY("debug", FUSE_OPT_KEY_KEEP),
FUSE_HELPER_OPT("-f", foreground),
FUSE_HELPER_OPT("-s", singlethread),
+#ifdef __FreeBSD__
+ FUSE_HELPER_OPT("fsname=", fsname),
+#else
FUSE_HELPER_OPT("fsname=", nodefault_subtype),
FUSE_HELPER_OPT("subtype=", nodefault_subtype),
+#endif
FUSE_OPT_KEY("fsname=", FUSE_OPT_KEY_KEEP),
+#ifndef __FreeBSD__
FUSE_OPT_KEY("subtype=", FUSE_OPT_KEY_KEEP),
+#endif
FUSE_HELPER_OPT("clone_fd", clone_fd),
FUSE_OPT_END
};
@@ -161,24 +167,43 @@ static int fuse_helper_opt_proc(void *data, const char *arg, int key,
}
}
+#ifdef __FreeBSD__
+static int add_default_fsname(const char *progname, struct fuse_args *args)
+#else
static int add_default_subtype(const char *progname, struct fuse_args *args)
+#endif
{
int res;
+#ifdef __FreeBSD__
+ char *fsname_opt;
+#else
char *subtype_opt;
+#endif
const char *basename = strrchr(progname, '/');
if (basename == NULL)
basename = progname;
else if (basename[1] != '\0')
basename++;
+#ifdef __FreeBSD__
+ fsname_opt = (char *) malloc(strlen(basename) + 64);
+ if (fsname_opt == NULL) {
+#else
subtype_opt = (char *) malloc(strlen(basename) + 64);
if (subtype_opt == NULL) {
+#endif
fprintf(stderr, "fuse: memory allocation failed\n");
return -1;
}
+#ifdef __FreeBSD__
+ sprintf(fsname_opt, "-osubtype=%s", basename);
+ res = fuse_opt_add_arg(args, fsname_opt);
+ free(fsname_opt);
+#else
sprintf(subtype_opt, "-osubtype=%s", basename);
res = fuse_opt_add_arg(args, subtype_opt);
free(subtype_opt);
+#endif
return res;
}
@@ -192,8 +217,13 @@ int fuse_parse_cmdline(struct fuse_args *args,
/* If neither -o subtype nor -o fsname are specified,
set subtype to program's basename */
+#ifdef __FreeBSD__
+ if (!opts->fsname)
+ if (add_default_fsname(args->argv[0], args) == -1)
+#else
if (!opts->nodefault_subtype)
if (add_default_subtype(args->argv[0], args) == -1)
+#endif
return -1;
return 0;