diff options
author | Roger Leigh <rleigh@debian.org> | 2013-05-04 22:50:21 +0100 |
---|---|---|
committer | Roger Leigh <rleigh@debian.org> | 2013-05-04 22:50:21 +0100 |
commit | 4ec183f4fa454c8ddbe41e306ab9ba12e098e098 (patch) | |
tree | 4d959cd9ea4502c2b5a2eb5be4c315b781e1f5f5 /libexec | |
parent | d630103fc2fce03441f1776805004614f01b5cee (diff) | |
download | schroot-4ec183f4fa454c8ddbe41e306ab9ba12e098e098.tar.gz |
libexec: Sources use namespace scoping
Enclose in namespace as for sbuild sources.
Diffstat (limited to 'libexec')
-rw-r--r-- | libexec/listmounts/listmounts.cc | 6 | ||||
-rw-r--r-- | libexec/listmounts/main.cc | 140 | ||||
-rw-r--r-- | libexec/listmounts/options.cc | 92 | ||||
-rw-r--r-- | libexec/mount/main.cc | 484 | ||||
-rw-r--r-- | libexec/mount/mount.cc | 6 | ||||
-rw-r--r-- | libexec/mount/options.cc | 118 |
6 files changed, 429 insertions, 417 deletions
diff --git a/libexec/listmounts/listmounts.cc b/libexec/listmounts/listmounts.cc index 7ba1be93..46d3cd1f 100644 --- a/libexec/listmounts/listmounts.cc +++ b/libexec/listmounts/listmounts.cc @@ -18,8 +18,8 @@ #include <config.h> -#include <listmounts/options.h> -#include <listmounts/main.h> +#include <libexec/listmounts/options.h> +#include <libexec/listmounts/main.h> #include <bin-common/run.h> @@ -27,8 +27,6 @@ using std::endl; using boost::format; namespace opt = boost::program_options; -using namespace schroot_listmounts; - /** * Main routine. * diff --git a/libexec/listmounts/main.cc b/libexec/listmounts/main.cc index 7ecaedd1..a4118c37 100644 --- a/libexec/listmounts/main.cc +++ b/libexec/listmounts/main.cc @@ -21,7 +21,7 @@ #include <sbuild/mntstream.h> #include <sbuild/util.h> -#include <listmounts/main.h> +#include <libexec/listmounts/main.h> #include <cerrno> #include <climits> @@ -41,83 +41,87 @@ using std::endl; using boost::format; using sbuild::_; using sbuild::N_; -using namespace schroot_listmounts; -template<> -sbuild::error<main::error_code>::map_type -sbuild::error<main::error_code>::error_strings = - { - // TRANSLATORS: %1% = file - {main::FIND, N_("Failed to find ‘%1%’")} - }; - -main::main (options::ptr& options): - bin_common::main("schroot-listmounts", - // TRANSLATORS: '...' is an ellipsis e.g. U+2026, - // and '-' is an em-dash. - _("[OPTION…] — list mount points"), - options, - false), - opts(options) -{ -} - -main::~main () +namespace schroot_listmounts { -} -void -main::action_listmounts () -{ - std::string to_find = sbuild::normalname(this->opts->mountpoint); + template<> + sbuild::error<main::error_code>::map_type + sbuild::error<main::error_code>::error_strings = + { + // TRANSLATORS: %1% = file + {schroot_listmounts::main::FIND, N_("Failed to find ‘%1%’")} + }; + + main::main (options::ptr& options): + bin_common::main("schroot-listmounts", + // TRANSLATORS: '...' is an ellipsis e.g. U+2026, + // and '-' is an em-dash. + _("[OPTION…] — list mount points"), + options, + false), + opts(options) + { + } + main::~main () { - // NOTE: This is a non-standard GNU extension. - char *rpath = realpath(to_find.c_str(), NULL); - if (rpath == 0) - throw error(to_find, FIND, strerror(errno)); - - to_find = rpath; - free(rpath); - rpath = 0; } - // Check mounts. - sbuild::mntstream mounts("/proc/mounts"); - sbuild::mntstream::mntentry entry; - sbuild::string_list mountlist; + void + main::action_listmounts () + { + std::string to_find = sbuild::normalname(this->opts->mountpoint); - while (mounts >> entry) { - std::string mount_dir(entry.directory); - if (to_find == "/" || - (mount_dir.find(to_find) == 0 && - (// Names are the same. - mount_dir.size() == to_find.size() || - // Must have a following /, or not the same directory. - (mount_dir.size() > to_find.size() && - mount_dir[to_find.size()] == '/')))) - mountlist.push_back(mount_dir); + // NOTE: This is a non-standard GNU extension. + char *rpath = realpath(to_find.c_str(), NULL); + if (rpath == 0) + throw error(to_find, FIND, strerror(errno)); + + to_find = rpath; + free(rpath); + rpath = 0; } - for (sbuild::string_list::const_reverse_iterator mount = mountlist.rbegin(); - mount != mountlist.rend(); - ++mount) - std::cout << *mount << '\n'; - std::cout << std::flush; -} + // Check mounts. + sbuild::mntstream mounts("/proc/mounts"); + sbuild::mntstream::mntentry entry; + sbuild::string_list mountlist; + + while (mounts >> entry) + { + std::string mount_dir(entry.directory); + if (to_find == "/" || + (mount_dir.find(to_find) == 0 && + (// Names are the same. + mount_dir.size() == to_find.size() || + // Must have a following /, or not the same directory. + (mount_dir.size() > to_find.size() && + mount_dir[to_find.size()] == '/')))) + mountlist.push_back(mount_dir); + } + + for (sbuild::string_list::const_reverse_iterator mount = mountlist.rbegin(); + mount != mountlist.rend(); + ++mount) + std::cout << *mount << '\n'; + std::cout << std::flush; + } + + int + main::run_impl () + { + if (this->opts->action == options::ACTION_HELP) + action_help(std::cerr); + else if (this->opts->action == options::ACTION_VERSION) + action_version(std::cerr); + else if (this->opts->action == options::ACTION_LISTMOUNTS) + action_listmounts(); + else + assert(0); // Invalid action. + + return EXIT_SUCCESS; + } -int -main::run_impl () -{ - if (this->opts->action == options::ACTION_HELP) - action_help(std::cerr); - else if (this->opts->action == options::ACTION_VERSION) - action_version(std::cerr); - else if (this->opts->action == options::ACTION_LISTMOUNTS) - action_listmounts(); - else - assert(0); // Invalid action. - - return EXIT_SUCCESS; } diff --git a/libexec/listmounts/options.cc b/libexec/listmounts/options.cc index 122e9f41..6c13f610 100644 --- a/libexec/listmounts/options.cc +++ b/libexec/listmounts/options.cc @@ -20,7 +20,7 @@ #include <sbuild/i18n.h> -#include <listmounts/options.h> +#include <libexec/listmounts/options.h> #include <cstdlib> #include <iostream> @@ -32,59 +32,63 @@ using std::endl; using boost::format; using sbuild::_; namespace opt = boost::program_options; -using namespace schroot_listmounts; -const options::action_type options::ACTION_LISTMOUNTS ("listmounts"); - -options::options (): - bin_common::options(), - mountpoint(), - mount(_("Mount")) +namespace schroot_listmounts { -} -options::~options () -{ -} + const options::action_type options::ACTION_LISTMOUNTS ("listmounts"); -void -options::add_options () -{ - // Chain up to add basic options. - bin_common::options::add_options(); + options::options (): + bin_common::options(), + mountpoint(), + mount(_("Mount")) + { + } - action.add(ACTION_LISTMOUNTS); - action.set_default(ACTION_LISTMOUNTS); + options::~options () + { + } - mount.add_options() - ("mountpoint,m", opt::value<std::string>(&this->mountpoint), - _("Mountpoint to check (full path)")); -} + void + options::add_options () + { + // Chain up to add basic options. + bin_common::options::add_options(); -void -options::add_option_groups () -{ - // Chain up to add basic option groups. - bin_common::options::add_option_groups(); + action.add(ACTION_LISTMOUNTS); + action.set_default(ACTION_LISTMOUNTS); + + mount.add_options() + ("mountpoint,m", opt::value<std::string>(&this->mountpoint), + _("Mountpoint to check (full path)")); + } + + void + options::add_option_groups () + { + // Chain up to add basic option groups. + bin_common::options::add_option_groups(); #ifndef BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD - if (!mount.options().empty()) + if (!mount.options().empty()) #else - if (!mount.primary_keys().empty()) + if (!mount.primary_keys().empty()) #endif - { - visible.add(mount); - global.add(mount); - } -} - -void -options::check_options () -{ - // Chain up to check basic options. - bin_common::options::check_options(); + { + visible.add(mount); + global.add(mount); + } + } + + void + options::check_options () + { + // Chain up to check basic options. + bin_common::options::check_options(); + + if (this->action == ACTION_LISTMOUNTS && + this->mountpoint.empty()) + throw error(_("No mount point specified")); + } - if (this->action == ACTION_LISTMOUNTS && - this->mountpoint.empty()) - throw error(_("No mount point specified")); } diff --git a/libexec/mount/main.cc b/libexec/mount/main.cc index 88405eef..f01c87e4 100644 --- a/libexec/mount/main.cc +++ b/libexec/mount/main.cc @@ -21,7 +21,7 @@ #include <sbuild/mntstream.h> #include <sbuild/util.h> -#include <mount/main.h> +#include <libexec/mount/main.h> #include <cerrno> #include <climits> @@ -45,254 +45,258 @@ using std::endl; using boost::format; using sbuild::_; using sbuild::N_; -using namespace schroot_mount; -template<> -sbuild::error<main::error_code>::map_type -sbuild::error<main::error_code>::error_strings = - { - {main::CHILD_FORK, N_("Failed to fork child")}, - {main::CHILD_WAIT, N_("Wait for child failed")}, - // TRANSLATORS: %1% = command name - {main::EXEC, N_("Failed to execute “%1%”")}, - {main::REALPATH, N_("Failed to resolve path “%1%”")} - }; - -main::main (options::ptr& options): - bin_common::main("schroot-mount", - // TRANSLATORS: '...' is an ellipsis e.g. U+2026, - // and '-' is an em-dash. - _("[OPTION…] — mount filesystems"), - options, - false), - opts(options) +namespace schroot_mount { -} - -main::~main () -{ -} -std::string -main::resolve_path (std::string const& mountpoint) -{ - // Ensure entry has a leading / to prevent security hole where - // mountpoint might be outside the chroot. - std::string absmountpoint(mountpoint); - if (absmountpoint.empty() || absmountpoint[0] != '/') - absmountpoint = std::string("/") + absmountpoint; - - char *resolved_path = realpath(opts->mountpoint.c_str(), 0); - if (!resolved_path) - throw error(opts->mountpoint, REALPATH, strerror(errno)); - std::string basepath(resolved_path); - std::free(resolved_path); - - std::string directory(opts->mountpoint + absmountpoint); - // Canonicalise path to remove any symlinks. - resolved_path = realpath(directory.c_str(), 0); - if (resolved_path == 0) - { - // The path is either not present or is an invalid link. If - // it's not present, we'll create it later. If it's a link, - // bail out now. - bool link = false; - try - { - if (sbuild::stat(directory, true).is_link()) - link = true; - } - catch (...) - {} // Does not exist, not a link - - if (link) - throw error(directory, REALPATH, strerror(ENOTDIR)); - else - { - // Try validating the parent directory. - sbuild::string_list dirs = sbuild::split_string(mountpoint, "/"); - if (dirs.size() > 1) // Recurse if possible, otherwise continue - { - std::string saveddir = *dirs.rbegin(); - dirs.pop_back(); - - std::string newpath(resolve_path(sbuild::string_list_to_string(dirs, "/"))); - directory = newpath + "/" + saveddir; - } - } - } - else + template<> + sbuild::error<main::error_code>::map_type + sbuild::error<main::error_code>::error_strings = { - directory = resolved_path; - std::free(resolved_path); - } - // If the link was absolute (i.e. points somewhere on the host, - // outside the chroot, make sure that this is modified to be - // inside. - if (directory.size() < basepath.size() || - directory.substr(0,basepath.size()) != basepath) - directory = basepath + directory; - - return directory; -} - -void -main::action_mount () -{ - // Check mounts. - sbuild::mntstream mounts(opts->fstab); - - sbuild::mntstream::mntentry entry; + {schroot_mount::main::CHILD_FORK, N_("Failed to fork child")}, + {schroot_mount::main::CHILD_WAIT, N_("Wait for child failed")}, + // TRANSLATORS: %1% = command name + {schroot_mount::main::EXEC, N_("Failed to execute “%1%”")}, + {schroot_mount::main::REALPATH, N_("Failed to resolve path “%1%”")} + }; + + main::main (options::ptr& options): + bin_common::main("schroot-mount", + // TRANSLATORS: '...' is an ellipsis e.g. U+2026, + // and '-' is an em-dash. + _("[OPTION…] — mount filesystems"), + options, + false), + opts(options) + { + } - while (mounts >> entry) - { - std::string directory = resolve_path(entry.directory); - - if (!boost::filesystem::exists(directory)) - { - sbuild::log_debug(sbuild::DEBUG_INFO) - << boost::format("Creating ‘%1%' in '%2%’") - % entry.directory - % opts->mountpoint - << std::endl; - - if (!opts->dry_run) - { - try - { - boost::filesystem::create_directories(directory); - } - catch (std::exception const& e) - { - sbuild::log_exception_error(e); - exit(EXIT_FAILURE); - } - catch (...) - { - sbuild::log_error() - << _("An unknown exception occurred") << std::endl; - exit(EXIT_FAILURE); - } - } - } + main::~main () + { + } + std::string + main::resolve_path (std::string const& mountpoint) + { + // Ensure entry has a leading / to prevent security hole where + // mountpoint might be outside the chroot. + std::string absmountpoint(mountpoint); + if (absmountpoint.empty() || absmountpoint[0] != '/') + absmountpoint = std::string("/") + absmountpoint; + + char *resolved_path = realpath(opts->mountpoint.c_str(), 0); + if (!resolved_path) + throw error(opts->mountpoint, REALPATH, strerror(errno)); + std::string basepath(resolved_path); + std::free(resolved_path); + + std::string directory(opts->mountpoint + absmountpoint); + // Canonicalise path to remove any symlinks. + resolved_path = realpath(directory.c_str(), 0); + if (resolved_path == 0) + { + // The path is either not present or is an invalid link. If + // it's not present, we'll create it later. If it's a link, + // bail out now. + bool link = false; + try + { + if (sbuild::stat(directory, true).is_link()) + link = true; + } + catch (...) + {} // Does not exist, not a link + + if (link) + throw error(directory, REALPATH, strerror(ENOTDIR)); + else + { + // Try validating the parent directory. + sbuild::string_list dirs = sbuild::split_string(mountpoint, "/"); + if (dirs.size() > 1) // Recurse if possible, otherwise continue + { + std::string saveddir = *dirs.rbegin(); + dirs.pop_back(); + + std::string newpath(resolve_path(sbuild::string_list_to_string(dirs, "/"))); + directory = newpath + "/" + saveddir; + } + } + } + else + { + directory = resolved_path; + std::free(resolved_path); + } + // If the link was absolute (i.e. points somewhere on the host, + // outside the chroot, make sure that this is modified to be + // inside. + if (directory.size() < basepath.size() || + directory.substr(0,basepath.size()) != basepath) + directory = basepath + directory; + + return directory; + } + + void + main::action_mount () + { + // Check mounts. + sbuild::mntstream mounts(opts->fstab); + + sbuild::mntstream::mntentry entry; + + while (mounts >> entry) + { + std::string directory = resolve_path(entry.directory); + + if (!boost::filesystem::exists(directory)) + { + sbuild::log_debug(sbuild::DEBUG_INFO) + << boost::format("Creating ‘%1%' in '%2%’") + % entry.directory + % opts->mountpoint + << std::endl; + + if (!opts->dry_run) + { + try + { + boost::filesystem::create_directories(directory); + } + catch (std::exception const& e) + { + sbuild::log_exception_error(e); + exit(EXIT_FAILURE); + } + catch (...) + { + sbuild::log_error() + << _("An unknown exception occurred") << std::endl; + exit(EXIT_FAILURE); + } + } + } + + sbuild::log_debug(sbuild::DEBUG_INFO) + << boost::format("Mounting ‘%1%’ on ‘%2%’") + % entry.filesystem_name + % directory + << std::endl; + + if (!opts->dry_run) + { + sbuild::string_list command; + command.push_back("/bin/mount"); + if (opts->verbose) + command.push_back("-v"); + command.push_back("-t"); + command.push_back(entry.type); + command.push_back("-o"); + command.push_back(entry.options); + command.push_back(entry.filesystem_name); + command.push_back(directory); + + int status = run_child(command[0], command, sbuild::environment()); + + if (status) + exit(status); + } + } + } + + int + main::run_child (std::string const& file, + sbuild::string_list const& command, + sbuild::environment const& env) + { + int exit_status = 0; + pid_t pid; + + if ((pid = fork()) == -1) + { + throw error(CHILD_FORK, strerror(errno)); + } + else if (pid == 0) + { + try + { + sbuild::log_debug(sbuild::DEBUG_INFO) + << "mount_main: executing " + << sbuild::string_list_to_string(command, ", ") + << std::endl; + exec(file, command, env); + error e(file, EXEC, strerror(errno)); + sbuild::log_exception_error(e); + } + catch (std::exception const& e) + { + sbuild::log_exception_error(e); + } + catch (...) + { + sbuild::log_error() + << _("An unknown exception occurred") << std::endl; + } + _exit(EXIT_FAILURE); + } + else + { + wait_for_child(pid, exit_status); + } + + if (exit_status) sbuild::log_debug(sbuild::DEBUG_INFO) - << boost::format("Mounting ‘%1%’ on ‘%2%’") - % entry.filesystem_name - % directory + << "mount_main: " << file + << " failed with status " << exit_status + << std::endl; + else + sbuild::log_debug(sbuild::DEBUG_INFO) + << "mount_main: " << file + << " succeeded" << std::endl; - if (!opts->dry_run) - { - sbuild::string_list command; - command.push_back("/bin/mount"); - if (opts->verbose) - command.push_back("-v"); - command.push_back("-t"); - command.push_back(entry.type); - command.push_back("-o"); - command.push_back(entry.options); - command.push_back(entry.filesystem_name); - command.push_back(directory); - - int status = run_child(command[0], command, sbuild::environment()); - - if (status) - exit(status); - } - } -} - -int -main::run_child (std::string const& file, - sbuild::string_list const& command, - sbuild::environment const& env) -{ - int exit_status = 0; - pid_t pid; - - if ((pid = fork()) == -1) - { - throw error(CHILD_FORK, strerror(errno)); - } - else if (pid == 0) - { - try - { - sbuild::log_debug(sbuild::DEBUG_INFO) - << "mount_main: executing " - << sbuild::string_list_to_string(command, ", ") - << std::endl; - exec(file, command, env); - error e(file, EXEC, strerror(errno)); - sbuild::log_exception_error(e); - } - catch (std::exception const& e) - { - sbuild::log_exception_error(e); - } - catch (...) - { - sbuild::log_error() - << _("An unknown exception occurred") << std::endl; - } - _exit(EXIT_FAILURE); - } - else - { - wait_for_child(pid, exit_status); - } - - if (exit_status) - sbuild::log_debug(sbuild::DEBUG_INFO) - << "mount_main: " << file - << " failed with status " << exit_status - << std::endl; - else - sbuild::log_debug(sbuild::DEBUG_INFO) - << "mount_main: " << file - << " succeeded" - << std::endl; - - return exit_status; -} - -void -main::wait_for_child (pid_t pid, - int& child_status) -{ - child_status = EXIT_FAILURE; // Default exit status - - int status; + return exit_status; + } - while (1) - { - if (waitpid(pid, &status, 0) == -1) - { - if (errno == EINTR) - continue; // Wait again. - else - throw error(CHILD_WAIT, strerror(errno)); - } - else - break; - } - - if (WIFEXITED(status)) - child_status = WEXITSTATUS(status); -} + void + main::wait_for_child (pid_t pid, + int& child_status) + { + child_status = EXIT_FAILURE; // Default exit status + + int status; + + while (1) + { + if (waitpid(pid, &status, 0) == -1) + { + if (errno == EINTR) + continue; // Wait again. + else + throw error(CHILD_WAIT, strerror(errno)); + } + else + break; + } + + if (WIFEXITED(status)) + child_status = WEXITSTATUS(status); + } + + int + main::run_impl () + { + if (this->opts->action == options::ACTION_HELP) + action_help(std::cerr); + else if (this->opts->action == options::ACTION_VERSION) + action_version(std::cerr); + else if (this->opts->action == options::ACTION_MOUNT) + action_mount(); + else + assert(0); // Invalid action. + + return EXIT_SUCCESS; + } -int -main::run_impl () -{ - if (this->opts->action == options::ACTION_HELP) - action_help(std::cerr); - else if (this->opts->action == options::ACTION_VERSION) - action_version(std::cerr); - else if (this->opts->action == options::ACTION_MOUNT) - action_mount(); - else - assert(0); // Invalid action. - - return EXIT_SUCCESS; } diff --git a/libexec/mount/mount.cc b/libexec/mount/mount.cc index c998fd0b..0e7c112f 100644 --- a/libexec/mount/mount.cc +++ b/libexec/mount/mount.cc @@ -18,8 +18,8 @@ #include <config.h> -#include <mount/options.h> -#include <mount/main.h> +#include <libexec/mount/options.h> +#include <libexec/mount/main.h> #include <bin-common/run.h> @@ -27,8 +27,6 @@ using std::endl; using boost::format; namespace opt = boost::program_options; -using namespace schroot_mount; - /** * Main routine. * diff --git a/libexec/mount/options.cc b/libexec/mount/options.cc index 1fc7f78a..2c3d48b9 100644 --- a/libexec/mount/options.cc +++ b/libexec/mount/options.cc @@ -21,7 +21,7 @@ #include <sbuild/i18n.h> #include <sbuild/util.h> -#include <mount/options.h> +#include <libexec/mount/options.h> #include <cstdlib> #include <iostream> @@ -33,71 +33,75 @@ using std::endl; using boost::format; using sbuild::_; namespace opt = boost::program_options; -using namespace schroot_mount; -const options::action_type options::ACTION_MOUNT ("mount"); - -options::options (): - bin_common::options(), - dry_run(false), - fstab(), - mountpoint(), - mount(_("Mount")) -{ -} - -options::~options () +namespace schroot_mount { -} - -void -options::add_options () -{ - // Chain up to add basic options. - bin_common::options::add_options(); - - action.add(ACTION_MOUNT); - action.set_default(ACTION_MOUNT); - - mount.add_options() - ("dry-run,d", - _("Perform a simulation of actions which would be taken")) - ("fstab,f", opt::value<std::string>(&this->fstab), - _("fstab file to read (full path)")) - ("mountpoint,m", opt::value<std::string>(&this->mountpoint), - _("Mountpoint to check (full path)")); -} - -void -options::add_option_groups () -{ - // Chain up to add basic option groups. - bin_common::options::add_option_groups(); + const options::action_type options::ACTION_MOUNT ("mount"); + + options::options (): + bin_common::options(), + dry_run(false), + fstab(), + mountpoint(), + mount(_("Mount")) + { + } + + options::~options () + { + } + + void + options::add_options () + { + // Chain up to add basic options. + bin_common::options::add_options(); + + action.add(ACTION_MOUNT); + action.set_default(ACTION_MOUNT); + + + mount.add_options() + ("dry-run,d", + _("Perform a simulation of actions which would be taken")) + ("fstab,f", opt::value<std::string>(&this->fstab), + _("fstab file to read (full path)")) + ("mountpoint,m", opt::value<std::string>(&this->mountpoint), + _("Mountpoint to check (full path)")); + } + + void + options::add_option_groups () + { + // Chain up to add basic option groups. + bin_common::options::add_option_groups(); #ifndef BOOST_PROGRAM_OPTIONS_DESCRIPTION_OLD - if (!mount.options().empty()) + if (!mount.options().empty()) #else - if (!mount.primary_keys().empty()) + if (!mount.primary_keys().empty()) #endif - { - visible.add(mount); - global.add(mount); - } -} + { + visible.add(mount); + global.add(mount); + } + } -void -options::check_options () -{ - // Chain up to check basic options. - bin_common::options::check_options(); + void + options::check_options () + { + // Chain up to check basic options. + bin_common::options::check_options(); + + if (vm.count("dry-run")) + this->dry_run = true; - if (vm.count("dry-run")) - this->dry_run = true; + this->mountpoint = sbuild::normalname(this->mountpoint); - this->mountpoint = sbuild::normalname(this->mountpoint); + if (this->action == ACTION_MOUNT && + this->mountpoint.empty()) + throw error(_("No mount point specified")); + } - if (this->action == ACTION_MOUNT && - this->mountpoint.empty()) - throw error(_("No mount point specified")); } |