-
Notifications
You must be signed in to change notification settings - Fork 6
/
Volume.h
132 lines (111 loc) · 3.65 KB
/
Volume.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* 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.
*/
#ifndef _VOLUME_H
#define _VOLUME_H
#ifdef __cplusplus
#include <utils/List.h>
#include <fs_mgr.h>
#include <sys/types.h>
class NetlinkEvent;
class VolumeManager;
class Volume {
private:
int mState;
int mFlags;
char* mOpts;
public:
#endif
static const int State_Init = -1;
static const int State_NoMedia = 0;
static const int State_Idle = 1;
static const int State_Pending = 2;
static const int State_Checking = 3;
static const int State_Mounted = 4;
static const int State_Unmounting = 5;
static const int State_Formatting = 6;
static const int State_Shared = 7;
static const int State_SharedMnt = 8;
static const char *MEDIA_DIR;
static const char *FUSE_DIR;
static const char *SEC_ASECDIR_EXT;
static const char *SEC_ASECDIR_INT;
static const char *ASECDIR;
static const char *LOOPDIR;
static const char *BLKID_PATH;
#ifdef __cplusplus
protected:
char* mLabel;
char* mUuid;
char* mUserLabel;
VolumeManager *mVm;
bool mDebug;
int mPartIdx;
int mOrigPartIdx;
bool mRetryMount;
int mLunNumber;
/*
* The major/minor tuple of the currently mounted filesystem.
*/
dev_t mCurrentlyMountedKdev;
public:
Volume(VolumeManager *vm, const fstab_rec* rec, int flags);
virtual ~Volume();
int scanUuid();
int mountVol();
int unmountVol(bool force, bool revert);
int formatVol(bool wipe, const char *fstype = NULL);
const char* getLabel() { return mLabel; }
const char* getUuid() { return mUuid; }
const char* getUserLabel() { return mUserLabel; }
int getState() { return mState; }
int getFlags() { return mFlags; };
int getLunNumber() { return mLunNumber; }
void setLunNumber(int lunNumber) { mLunNumber = lunNumber; }
/* Mountpoint of the raw volume */
virtual const char *getMountpoint() = 0;
virtual const char *getFuseMountpoint() = 0;
virtual int handleBlockEvent(NetlinkEvent *evt);
virtual dev_t getDiskDevice();
virtual dev_t getShareDevice();
virtual void handleVolumeShared();
virtual void handleVolumeUnshared();
void setDebug(bool enable);
virtual int getVolInfo(struct volume_info *v) = 0;
virtual int getDeviceNodes(dev_t *devs, int max) = 0;
protected:
void setUuid(const char* uuid);
void setUserLabel(const char* userLabel);
void setState(int state);
virtual int updateDeviceInfo(char *new_path, int new_major, int new_minor) = 0;
virtual void revertDeviceInfo(void) = 0;
virtual int isDecrypted(void) = 0;
int createDeviceNode(const char *path, int major, int minor);
private:
int initializeMbr(const char *deviceNode);
bool isMountpointMounted(const char *path);
int mountAsecExternal();
int doUnmount(const char *path, bool force);
int doFuseMount(const char *src, const char *dst);
int extractMetadata(const char* devicePath);
};
typedef android::List<Volume *> VolumeCollection;
extern "C" {
#endif
const char *stateToStr(int state);
#ifdef __cplusplus
};
#endif
#endif