blob: 56ae430e4143a5b6564add55eda754e58b32668d [file] [log] [blame]
Tom Marshalldd9b45d2019-01-04 14:37:31 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 * Copyright (C) 2019 The LineageOS Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#include "Exfat.h"
19#include "Utils.h"
20
21#define LOG_TAG "Vold"
22
23#include <android-base/logging.h>
24#include <android-base/stringprintf.h>
25
26#include <cutils/log.h>
27
28#include <logwrap/logwrap.h>
29
30#include <string>
31#include <vector>
32
33#include <sys/mount.h>
34
35using android::base::StringPrintf;
36
37namespace android {
38namespace volmgr {
39namespace exfat {
40
41status_t Mount(const std::string& source, const std::string& target, int ownerUid, int ownerGid,
42 int permMask) {
43 int mountFlags = MS_NODEV | MS_NOSUID | MS_DIRSYNC | MS_NOATIME | MS_NOEXEC;
44 auto mountData = android::base::StringPrintf("uid=%d,gid=%d,fmask=%o,dmask=%o", ownerUid,
45 ownerGid, permMask, permMask);
46
47 if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) {
48 return 0;
49 }
50 PLOG(ERROR) << "Mount failed; attempting read-only";
51 mountFlags |= MS_RDONLY;
52 if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) {
53 return 0;
54 }
55
56 return -1;
57}
58
59} // namespace exfat
60} // namespace volmgr
61} // namespace android