| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cros-disks/system_mounter.h" |
| |
| #include <errno.h> |
| #include <sys/mount.h> |
| |
| #include <string> |
| #include <utility> |
| |
| #include <base/logging.h> |
| |
| using std::pair; |
| using std::string; |
| |
| namespace cros_disks { |
| |
| const char SystemMounter::kMounterType[] = ""; |
| |
| SystemMounter::SystemMounter(const string& source_path, |
| const string& target_path, |
| const string& filesystem_type, |
| const MountOptions& mount_options) |
| : Mounter(source_path, target_path, filesystem_type, mount_options) { |
| } |
| |
| MountErrorType SystemMounter::MountImpl() { |
| pair<MountOptions::Flags, string> flags_and_data = |
| mount_options().ToMountFlagsAndData(); |
| if (mount(source_path().c_str(), target_path().c_str(), |
| filesystem_type().c_str(), flags_and_data.first, |
| flags_and_data.second.c_str()) != 0) { |
| PLOG(WARNING) << "mount('" << source_path() << "', '" << target_path() |
| << "', '" << filesystem_type() << "', " << flags_and_data.first |
| << ", '" << flags_and_data.second << "') failed"; |
| switch (errno) { |
| case ENODEV: |
| return MOUNT_ERROR_UNSUPPORTED_FILESYSTEM; |
| case ENOENT: |
| case ENOTBLK: |
| case ENOTDIR: |
| return MOUNT_ERROR_INVALID_PATH; |
| case EPERM: |
| return MOUNT_ERROR_INSUFFICIENT_PERMISSIONS; |
| default: |
| return MOUNT_ERROR_INTERNAL; |
| } |
| } |
| return MOUNT_ERROR_NONE; |
| } |
| |
| } // namespace cros_disks |