libcryfs/src/cryfs-unmount/Cli.cpp

58 lines
1.8 KiB
C++

#include "Cli.h"
#include <fspp/fuse/Fuse.h>
#include <cryfs-unmount/program_options/Parser.h>
#include <gitversion/gitversion.h>
#include <cryfs/impl/CryfsException.h>
#include <iostream>
using fspp::fuse::Fuse;
using cryfs_unmount::program_options::Parser;
using cryfs_unmount::program_options::ProgramOptions;
namespace cryfs_unmount {
namespace {
void _showVersion() {
std::cout << "CryFS Version " << gitversion::VersionString() << std::endl;
}
}
void Cli::main(int argc, const char **argv) {
_showVersion();
ProgramOptions options = Parser(argc, argv).parse();
if (!boost::filesystem::exists(options.mountDir())) {
throw cryfs::CryfsException("Given mountdir doesn't exist", cryfs::ErrorCode::InaccessibleMountDir);
}
bool immediate = options.immediate();
#if defined(__APPLE__)
if (options.immediate()) {
std::cerr << "Warning: OSX doesn't support the --immediate flag. Ignoring it.";
immediate = false;
}
#elif defined(_MSC_VER)
if (options.immediate()) {
std::cerr << "Warning: Windows doesn't support the --immediate flag. Ignoring it.";
immediate = false;
}
#endif
// TODO This doesn't seem to work with relative paths
std::cout << "Unmounting CryFS filesystem at " << options.mountDir() << "." << std::endl;
if (immediate) {
Fuse::unmount(options.mountDir(), true);
// TODO Wait until it is actually unmounted and then show a better success message?
std::cout << "Filesystem is unmounting." << std::endl;
} else {
Fuse::unmount(options.mountDir(), false);
// TODO Wait until it is actually unmounted and then show a better success message?
std::cout << "Filesystem will unmount as soon as nothing is accessing it anymore." << std::endl;
}
}
}