commit 0f068c22353a61db22df334ef605f19ef213cd49
parent 3878c72e464c69e0a6a41263f67e9150b6ea648c
Author: Geoff Johnstone <qwerty@acm.org>
Date: Mon, 15 Jun 2009 19:58:22 +0100
Added -u option.
Diffstat:
3 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/options.c b/options.c
@@ -29,6 +29,7 @@ static gboolean version = FALSE;
static gchar *conffile = NULL;
static gboolean debug = FALSE;
static gboolean nofork = FALSE;
+static gboolean umount = FALSE;
static gchar **remaining = NULL;
@@ -66,6 +67,12 @@ static GOptionEntry entries[] = {
.arg_data = &nofork,
.description = "Foreground operation" },
+ { .long_name = "unmount",
+ .short_name = 'u',
+ .arg = G_OPTION_ARG_NONE,
+ .arg_data = &umount,
+ .description = "Unmount the given filesystem" },
+
{ .long_name = G_OPTION_REMAINING,
.short_name = 0,
.arg = G_OPTION_ARG_STRING_ARRAY,
@@ -77,7 +84,8 @@ static GOptionEntry entries[] = {
bool parse_args (int *argc, char ***argv,
- const char **mountid, const char **out_conffile)
+ const char **mountid, const char **out_conffile,
+ bool *out_umount)
{
GError *error = NULL;
@@ -111,6 +119,7 @@ bool parse_args (int *argc, char ***argv,
return false;
}
+ *out_umount = umount;
*mountid = remaining[0];
g_free (remaining);
DEBUG (fprintf (stderr, "Mount ID: %s\n", *mountid));
diff --git a/options.h b/options.h
@@ -18,7 +18,8 @@
#define OPTIONS_H
bool parse_args (int *argc, char ***argv,
- const char **mountid, const char **out_conffile) MUSTCHECK;
+ const char **mountid, const char **out_conffile,
+ bool *out_umount) MUSTCHECK;
void build_fuse_args (const char *options, const char *mountpoint,
int *out_argc, char ***out_argv);
diff --git a/usmb.c b/usmb.c
@@ -265,7 +265,9 @@ static bool get_context (void)
int main (int argc, char **argv)
{
const char *conffile, *mountid;
+ bool umount;
char *sharename = NULL;
+ int ret = EXIT_FAILURE;
if (sizeof (uint64_t) < sizeof (uintptr_t))
{
@@ -279,32 +281,35 @@ int main (int argc, char **argv)
conffile = conf;
}
- if (!parse_args (&argc, &argv, &mountid, &conffile))
+ if (!parse_args (&argc, &argv, &mountid, &conffile, &umount))
return EXIT_FAILURE;
- show_about (stdout);
+ if (!umount)
+ show_about (stdout);
if (!conffile_get_mount (conffile, mountid,
&server, &sharename, &mountpoint, &options,
&domain, &username, &password))
return EXIT_FAILURE;
- if (!create_share_name (server, sharename) || !get_context())
+ if (umount)
{
- free_strings (sharename);
- return EXIT_FAILURE;
+ execlp ("fusermount", "fusermount", "-u", mountpoint, NULL);
+ perror ("Failed to execute fusermount");
}
- DEBUG (fprintf (stderr, "Username: %s\\%s\n", domain, username));
+ else if (create_share_name (server, sharename) && get_context())
+ {
+ DEBUG (fprintf (stderr, "Username: %s\\%s\n", domain, username));
- int fuse_argc;
- char **fuse_argv;
- build_fuse_args (options, mountpoint, &fuse_argc, &fuse_argv);
- int ret = fuse_main (fuse_argc, fuse_argv, &fuse_ops, NULL);
+ int fuse_argc;
+ char **fuse_argv;
+ build_fuse_args (options, mountpoint, &fuse_argc, &fuse_argv);
+ ret = fuse_main (fuse_argc, fuse_argv, &fuse_ops, NULL);
+ destroy_smb_context (ctx, 1);
+ }
- destroy_smb_context (ctx, 1);
free_strings (sharename);
-
return ret;
}