11use crate :: ffi:: MagiskInit ;
2- use base:: WalkResult :: { Continue , Skip } ;
3- use base:: nix:: mount:: { MntFlags , mount, umount2} ;
42use base:: {
53 Directory , FsPathBuilder , LibcReturn , LoggedResult , ResultExt , Utf8CStr , cstr, debug, libc,
64 nix, parse_mount_info, raw_cstr,
@@ -64,54 +62,6 @@ pub(crate) fn is_device_mounted(dev: u64, target: Pin<&mut CxxString>) -> bool {
6462 false
6563}
6664
67- pub ( crate ) fn occupy ( path : & Utf8CStr ) {
68- Directory :: open ( path)
69- . map ( |mut dir| {
70- dir. pre_order_walk ( |entry| {
71- let mut path = cstr:: buf:: default ( ) ;
72- entry. resolve_path ( & mut path) ?;
73- let path = path. as_utf8_cstr ( ) ;
74- mount (
75- Some ( path) ,
76- path,
77- None :: < & Utf8CStr > ,
78- MsFlags :: MS_BIND | MsFlags :: MS_RDONLY ,
79- None :: < & Utf8CStr > ,
80- )
81- . check_os_err ( "occupy" , Some ( path) , None ) ?;
82- Ok ( Continue )
83- } )
84- . log_ok ( ) ;
85- } )
86- . log_ok ( ) ;
87- }
88-
89- pub ( crate ) fn unoccupy ( path : & Utf8CStr ) -> bool {
90- let mut ok = false ;
91- Directory :: open ( path)
92- . map ( |mut dir| {
93- ok = dir
94- . pre_order_walk ( |entry| {
95- let mut path = cstr:: buf:: default ( ) ;
96- entry. resolve_path ( & mut path) ?;
97- let path = path. as_utf8_cstr ( ) ;
98- umount2 ( path, MntFlags :: MNT_DETACH ) . check_os_err (
99- "unoccupy" ,
100- Some ( path) ,
101- None ,
102- ) ?;
103- if entry. is_dir ( ) {
104- Ok ( Skip )
105- } else {
106- Ok ( Continue )
107- }
108- } )
109- . is_ok ( ) ;
110- } )
111- . log_ok ( ) ;
112- ok
113- }
114-
11565const RAMFS_MAGIC : u32 = 0x858458f6 ;
11666
11767pub ( crate ) fn is_rootfs ( ) -> bool {
@@ -123,44 +73,22 @@ pub(crate) fn is_rootfs() -> bool {
12373}
12474
12575impl MagiskInit {
126- pub ( crate ) fn prepare_data ( & self , use_rootfs : bool ) -> bool {
76+ pub ( crate ) fn prepare_data ( & self ) {
12777 debug ! ( "Setup data tmp" ) ;
12878 cstr ! ( "/data" ) . mkdir ( 0o755 ) . log_ok ( ) ;
79+ nix:: mount:: mount (
80+ Some ( cstr ! ( "magisk" ) ) ,
81+ cstr ! ( "/data" ) ,
82+ Some ( cstr ! ( "tmpfs" ) ) ,
83+ MsFlags :: empty ( ) ,
84+ Some ( cstr ! ( "mode=755" ) ) ,
85+ )
86+ . check_os_err ( "mount" , Some ( "/data" ) , Some ( "tmpfs" ) )
87+ . log_ok ( ) ;
12988
130- let mut rootfs_magisktmp = false ;
131-
132- if use_rootfs {
133- cstr ! ( "/magisk" ) . mkdir ( 0o755 ) . log_ok ( ) ;
134- rootfs_magisktmp = cstr ! ( "/magisk" )
135- . bind_mount_to ( cstr ! ( "/data" ) , false )
136- . is_ok ( ) ;
137- }
138-
139- if rootfs_magisktmp {
140- cstr ! ( "/init" )
141- . rename_to ( cstr ! ( "/magisk/magiskinit" ) )
142- . log_ok ( ) ;
143- cstr ! ( "/.backup" ) . copy_to ( cstr ! ( "/magisk/.backup" ) ) . ok ( ) ;
144- cstr ! ( "/overlay.d" )
145- . rename_to ( cstr ! ( "/magisk/overlay.d" ) )
146- . ok ( ) ;
147- } else {
148- nix:: mount:: mount (
149- Some ( cstr ! ( "magisk" ) ) ,
150- cstr ! ( "/data" ) ,
151- Some ( cstr ! ( "tmpfs" ) ) ,
152- MsFlags :: empty ( ) ,
153- Some ( cstr ! ( "mode=755" ) ) ,
154- )
155- . check_os_err ( "mount" , Some ( "/data" ) , Some ( "tmpfs" ) )
156- . log_ok ( ) ;
157-
158- cstr ! ( "/init" ) . copy_to ( cstr ! ( "/data/magiskinit" ) ) . ok ( ) ;
159- cstr ! ( "/.backup" ) . copy_to ( cstr ! ( "/data/.backup" ) ) . ok ( ) ;
160- cstr ! ( "/overlay.d" ) . copy_to ( cstr ! ( "/data/overlay.d" ) ) . ok ( ) ;
161- }
162-
163- rootfs_magisktmp
89+ cstr ! ( "/init" ) . copy_to ( cstr ! ( "/data/magiskinit" ) ) . ok ( ) ;
90+ cstr ! ( "/.backup" ) . copy_to ( cstr ! ( "/data/.backup" ) ) . ok ( ) ;
91+ cstr ! ( "/overlay.d" ) . copy_to ( cstr ! ( "/data/overlay.d" ) ) . ok ( ) ;
16492 }
16593
16694 pub ( crate ) fn exec_init ( & mut self ) {
0 commit comments