diff options
Diffstat (limited to 'src/command/StorageCommands.cxx')
-rw-r--r-- | src/command/StorageCommands.cxx | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/command/StorageCommands.cxx b/src/command/StorageCommands.cxx index a538c77fb..92d235f4c 100644 --- a/src/command/StorageCommands.cxx +++ b/src/command/StorageCommands.cxx @@ -113,3 +113,30 @@ handle_mount(Client &client, gcc_unused int argc, char *argv[]) idle_add(IDLE_MOUNT); return CommandResult::OK; } + +CommandResult +handle_unmount(Client &client, gcc_unused int argc, char *argv[]) +{ + Storage *_composite = client.partition.instance.storage; + if (_composite == nullptr) { + command_error(client, ACK_ERROR_NO_EXIST, "No database"); + return CommandResult::ERROR; + } + + CompositeStorage &composite = *(CompositeStorage *)_composite; + + const char *const local_uri = argv[1]; + + if (*local_uri == 0) { + command_error(client, ACK_ERROR_ARG, "Bad mount point"); + return CommandResult::ERROR; + } + + if (!composite.Unmount(local_uri)) { + command_error(client, ACK_ERROR_ARG, "Not a mount point"); + return CommandResult::ERROR; + } + + idle_add(IDLE_MOUNT); + return CommandResult::OK; +} |