diff options
author | kallt_kaffe <kallt_kaffe@apedroid.com> | 2012-03-07 10:42:19 +0100 |
---|---|---|
committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-07-10 20:10:35 +0100 |
commit | ce7457dfe9706b24bbfe98af82adceab50c2198e (patch) | |
tree | 8a1ba0e83189c4e3a0dfee5602f311e84cd9a539 /Ntfs.cpp | |
parent | 75da9e2314889eef40836c56e232d9eb14e4afae (diff) | |
download | system_vold-ce7457dfe9706b24bbfe98af82adceab50c2198e.zip system_vold-ce7457dfe9706b24bbfe98af82adceab50c2198e.tar.gz system_vold-ce7457dfe9706b24bbfe98af82adceab50c2198e.tar.bz2 |
vold: Add ntfs (read-only) support.
See http://review.cyanogenmod.com/#change,7457 for more info.
Change-Id: Ic841e73be6435e8bbbb22984cc749e27c46826e8
Diffstat (limited to 'Ntfs.cpp')
-rw-r--r-- | Ntfs.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/Ntfs.cpp b/Ntfs.cpp new file mode 100644 index 0000000..d5e9772 --- /dev/null +++ b/Ntfs.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/mman.h> +#include <sys/mount.h> + +#include <linux/kdev_t.h> + +#define LOG_TAG "Vold" + +#include <cutils/log.h> +#include <cutils/properties.h> + +#include "Ntfs.h" + +extern "C" int logwrap(int argc, const char **argv, int background); +extern "C" int mount(const char *, const char *, const char *, unsigned long, const void *); + +int Ntfs::check(const char *fsPath) { + + // no NTFS file system check is performed, always return true + SLOGI("Ntfs filesystem: Skipping fs checks\n"); + return 0; + +} + +int Ntfs::doMount(const char *fsPath, const char *mountPoint, + bool ro, bool remount, bool executable, + int ownerUid, int ownerGid, int permMask, bool createLost) { + int rc; + unsigned long flags; + char mountData[255]; + + flags = MS_NODEV | MS_NOSUID | MS_DIRSYNC; + + flags |= (executable ? 0 : MS_NOEXEC); + flags |= (ro ? MS_RDONLY : 0); + flags |= (remount ? MS_REMOUNT : 0); + + // Testing/security, mount ro up to now + flags |= MS_RDONLY; + + /* + * Note: This is a temporary hack. If the sampling profiler is enabled, + * we make the SD card world-writable so any process can write snapshots. + * + * TODO: Remove this code once we have a drop box in system_server. + */ + char value[PROPERTY_VALUE_MAX]; + property_get("persist.sampling_profiler", value, ""); + if (value[0] == '1') { + SLOGW("The SD card is world-writable because the" + " 'persist.sampling_profiler' system property is set to '1'."); + permMask = 0; + } + + sprintf(mountData, + "uid=%d,gid=%d,fmask=%o,dmask=%o", + ownerUid, ownerGid, permMask, permMask); + + rc = mount(fsPath, mountPoint, "ntfs", flags, mountData); + + if (rc && errno == EROFS) { + SLOGE("%s appears to be a read only filesystem - retrying mount RO", fsPath); + flags |= MS_RDONLY; + rc = mount(fsPath, mountPoint, "ntfs", flags, mountData); + } + + return rc; +} + +int Ntfs::format(const char *fsPath, unsigned int numSectors) { + + SLOGE("Format ntfs filesystem not supported\n"); + errno = EIO; + return -1; + +} |