static int fuse_helper_opt_proc(void *data, const char *arg, int key, struct fuse_args *outargs) { struct helper_opts *hopts = data; switch (key) { case KEY_HELP: usage(outargs->argv[0]); /* fall through */ case KEY_HELP_NOHEADER: helper_help(); return fuse_opt_add_arg(outargs, "-h"); case KEY_VERSION: helper_version(); return 1; case FUSE_OPT_KEY_NONOPT: if (!hopts->mountpoint) { char mountpoint[PATH_MAX]; if (realpath(arg, mountpoint) == NULL) { fprintf(stderr, "fuse: bad mount point `%s': %s\n", arg, strerror(errno)); return -1; } return fuse_opt_add_opt(&hopts->mountpoint, mountpoint); } else { fprintf(stderr, "fuse: invalid argument `%s'\n", arg); return -1; } default: return 1; } }
static int fuse_helper_opt_proc(void *data, const char *arg, int key, struct fuse_args *outargs) { struct helper_opts *hopts = data; switch (key) { case KEY_HELP: usage(outargs->argv[0]); /* fall through */ case KEY_HELP_NOHEADER: helper_help(); return fuse_opt_add_arg(outargs, "-h"); case KEY_VERSION: helper_version(); return 1; case FUSE_OPT_KEY_NONOPT: if (!hopts->mountpoint) { char mountpoint[PATH_MAX]; if (realpath(arg, mountpoint) == NULL) { fprintf(stderr, "fuse: bad mount point `%s': %s\n", arg, strerror(errno)); return -1; } #ifdef __APPLE__ else { struct stat sb; if (stat(mountpoint, &sb) != 0) { fprintf(stderr, "fuse: failed to stat mount point `%s': %s\n", mountpoint, strerror(errno)); return -1; } if ((sb.st_mode & S_IFMT) != S_IFDIR) { fprintf(stderr, "fuse: mount point is not a directory `%s'\n", mountpoint); return -1; } } #endif return fuse_opt_add_opt(&hopts->mountpoint, mountpoint); } else { fprintf(stderr, "fuse: invalid argument `%s'\n", arg); return -1; } default: return 1; } }