summaryrefslogtreecommitdiffstats
path: root/Ntfs.cpp
diff options
context:
space:
mode:
authorkallt_kaffe <kallt_kaffe@apedroid.com>2012-03-07 10:42:19 +0100
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2012-07-10 20:10:35 +0100
commitce7457dfe9706b24bbfe98af82adceab50c2198e (patch)
tree8a1ba0e83189c4e3a0dfee5602f311e84cd9a539 /Ntfs.cpp
parent75da9e2314889eef40836c56e232d9eb14e4afae (diff)
downloadsystem_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.cpp103
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;
+
+}