|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ |
|
3 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
4 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 #ifndef AUTOMOUNTER_GONK_H__ |
|
8 #define AUTOMOUNTER_GONK_H__ |
|
9 |
|
10 typedef enum { |
|
11 ReadOnly, |
|
12 ReadWrite, |
|
13 Unknown |
|
14 } MountAccess; |
|
15 |
|
16 /** |
|
17 * This class will remount the /system partition as read-write in Gonk to allow |
|
18 * the updater write access. Upon destruction, /system will be remounted back to |
|
19 * read-only. If something causes /system to remain read-write, this class will |
|
20 * reboot the device and allow the system to mount as read-only. |
|
21 * |
|
22 * Code inspired from AOSP system/core/adb/remount_service.c |
|
23 */ |
|
24 class GonkAutoMounter |
|
25 { |
|
26 public: |
|
27 GonkAutoMounter(); |
|
28 ~GonkAutoMounter(); |
|
29 |
|
30 const MountAccess GetAccess() |
|
31 { |
|
32 return mAccess; |
|
33 } |
|
34 |
|
35 private: |
|
36 bool RemountSystem(MountAccess access); |
|
37 bool ForceRemountReadOnly(); |
|
38 bool UpdateMountStatus(); |
|
39 bool ProcessMount(const char *mount); |
|
40 bool MountSystem(unsigned long flags); |
|
41 void Reboot(); |
|
42 |
|
43 private: |
|
44 char *mDevice; |
|
45 MountAccess mAccess; |
|
46 }; |
|
47 |
|
48 #endif // AUTOMOUNTER_GONK_H__ |