• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _VOLUME_H
18 #define _VOLUME_H
19 
20 #include <utils/List.h>
21 
22 class NetlinkEvent;
23 class VolumeManager;
24 
25 class Volume {
26 private:
27     int mState;
28 
29 public:
30     static const int State_Init       = -1;
31     static const int State_NoMedia    = 0;
32     static const int State_Idle       = 1;
33     static const int State_Pending    = 2;
34     static const int State_Checking   = 3;
35     static const int State_Mounted    = 4;
36     static const int State_Unmounting = 5;
37     static const int State_Formatting = 6;
38     static const int State_Shared     = 7;
39     static const int State_SharedMnt  = 8;
40 
41     static const char *SECDIR;
42     static const char *SEC_STGDIR;
43     static const char *SEC_STG_SECIMGDIR;
44     static const char *SEC_ASECDIR;
45     static const char *ASECDIR;
46 
47     static const char *LOOPDIR;
48 
49 protected:
50     char *mLabel;
51     char *mMountpoint;
52     VolumeManager *mVm;
53     bool mDebug;
54     int mPartIdx;
55 
56     /*
57      * The major/minor tuple of the currently mounted filesystem.
58      */
59     dev_t mCurrentlyMountedKdev;
60 
61 public:
62     Volume(VolumeManager *vm, const char *label, const char *mount_point);
63     virtual ~Volume();
64 
65     int mountVol();
66     int unmountVol(bool force);
67     int formatVol();
68 
getLabel()69     const char *getLabel() { return mLabel; }
getMountpoint()70     const char *getMountpoint() { return mMountpoint; }
getState()71     int getState() { return mState; }
72 
73     virtual int handleBlockEvent(NetlinkEvent *evt);
74     virtual dev_t getDiskDevice();
75     virtual dev_t getShareDevice();
76     virtual void handleVolumeShared();
77     virtual void handleVolumeUnshared();
78 
79     void setDebug(bool enable);
80 
81 protected:
82     void setState(int state);
83 
84     virtual int getDeviceNodes(dev_t *devs, int max) = 0;
85 
86     int createDeviceNode(const char *path, int major, int minor);
87 
88 private:
89     int initializeMbr(const char *deviceNode);
90     bool isMountpointMounted(const char *path);
91     int createBindMounts();
92     int doUnmount(const char *path, bool force);
93     int doMoveMount(const char *src, const char *dst, bool force);
94     void protectFromAutorunStupidity();
95 };
96 
97 typedef android::List<Volume *> VolumeCollection;
98 
99 #endif
100