Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
3c7e8655
Commit
3c7e8655
authored
Mar 14, 2017
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
The long awaited vendor mount fix
parent
7877ac0c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
40 deletions
+45
-40
magic_mask.sh
scripts/magic_mask.sh
+45
-40
No files found.
scripts/magic_mask.sh
View file @
3c7e8655
...
...
@@ -55,6 +55,30 @@ unblock() {
exit
}
bind_mount
()
{
if
[
-e
"
$1
"
-a
-e
"
$2
"
]
;
then
mount
-o
bind
"
$1
"
"
$2
"
||
log_print
"Mount Fail:
$1
->
$2
"
fi
}
loopsetup
()
{
LOOPDEVICE
=
for
DEV
in
`
ls
/dev/block/loop
*
`
;
do
if
losetup
$DEV
$1
;
then
LOOPDEVICE
=
$DEV
break
fi
done
}
target_size_check
()
{
e2fsck
-p
-f
"
$1
"
curBlocks
=
`
e2fsck
-n
$1
2>/dev/null |
cut
-d
,
-f3
|
cut
-d
\
-f2
`
;
curUsedM
=
$((
`
echo
"
$curBlocks
"
|
cut
-d
/
-f1
`
*
4
/
1024
))
;
curSizeM
=
$((
`
echo
"
$curBlocks
"
|
cut
-d
/
-f2
`
*
4
/
1024
))
;
curFreeM
=
$((
curSizeM
-
curUsedM
))
;
}
run_scripts
()
{
BASE
=
$MOUNTPOINT
for
MOD
in
$BASE
/
*
;
do
...
...
@@ -77,53 +101,40 @@ run_scripts() {
done
}
loopsetup
()
{
LOOPDEVICE
=
for
DEV
in
`
ls
/dev/block/loop
*
`
;
do
if
losetup
$DEV
$1
;
then
LOOPDEVICE
=
$DEV
break
fi
done
}
target_size_check
()
{
e2fsck
-p
-f
"
$1
"
curBlocks
=
`
e2fsck
-n
$1
2>/dev/null |
cut
-d
,
-f3
|
cut
-d
\
-f2
`
;
curUsedM
=
$((
`
echo
"
$curBlocks
"
|
cut
-d
/
-f1
`
*
4
/
1024
))
;
curSizeM
=
$((
`
echo
"
$curBlocks
"
|
cut
-d
/
-f2
`
*
4
/
1024
))
;
curFreeM
=
$((
curSizeM
-
curUsedM
))
;
}
travel
()
{
# Ignore /system/vendor, we will handle it differently
[
"
$1
"
=
"system/vendor"
]
&&
return
cd
"
$TRAVEL_ROOT
/
$1
"
if
[
-f
.replace
]
;
then
log_print
"Replace: /
$1
"
rm
-rf
"
$MOUNTINFO
/
$1
"
mktouch
"
$MOUNTINFO
/
$1
"
"
$TRAVEL_ROOT
"
else
for
ITEM
in
*
;
do
# This means it an empty folder (shouldn't happen, but better to be safe)
[
"
$ITEM
"
=
"*"
]
&&
return
;
# This means it's an empty folder (shouldn't happen, but better to be safe)
[
"
$ITEM
"
=
"*"
]
&&
return
# Ignore /system/vendor since we will handle it differently
[
"
$1
"
=
"system"
-a
"
$ITEM
"
=
"vendor"
]
&&
continue
# Target not found or target/file is a symlink
if
[
!
-e
"/
$1
/
$ITEM
"
-o
-L
"/
$1
/
$ITEM
"
-o
-L
"
$ITEM
"
]
;
then
# If we are in a higher level, delete the lower levels
rm
-rf
"
$MOUNTINFO
/dummy/
$1
"
2>/dev/null
# Mount the dummy parent
log_print
"Replace with dummy: /
$1
"
mktouch
"
$MOUNTINFO
/dummy/
$1
"
if
[
-d
"
$ITEM
"
]
;
then
# Create new dummy directory and mount it
mkdir
-p
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
elif
[
-L
"
$ITEM
"
]
;
then
if
[
-L
"
$ITEM
"
]
;
then
# Copy symlinks
log_print
"Symlink: /
$1
/
$ITEM
"
mkdir
-p
"
$DUMMDIR
/
$1
"
2>/dev/null
cp
-afc
"
$ITEM
"
$"DUMMDIR/
$1
/
$ITEM
"
elif
[
-d
"
$ITEM
"
]
;
then
# Create new dummy directory and mount it
log_print
"New directory: /
$1
/
$ITEM
"
mkdir
-p
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
else
# Create new dummy file and mount it
log_print
"New file: /
$1
/
$ITEM
"
mktouch
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
fi
...
...
@@ -133,6 +144,7 @@ travel() {
(
travel
"
$1
/
$ITEM
"
)
elif
[
!
-L
"
$ITEM
"
]
;
then
# Mount this file
log_print
"Replace: /
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
fi
fi
...
...
@@ -164,24 +176,16 @@ clone_dummy() {
else
mktouch
"
$DUMMDIR$REAL
"
fi
[
!
-e
"
$MOUNTINFO$REAL
"
]
&&
mktouch
"
$MOUNTINFO
/mirror
$REAL
"
if
[
!
-e
"
$MOUNTINFO$REAL
"
]
;
then
log_print
"Clone skeleton:
$REAL
"
mktouch
"
$MOUNTINFO
/mirror
$REAL
"
fi
fi
fi
fi
done
}
bind_mount
()
{
if
[
-e
"
$1
"
-a
-e
"
$2
"
]
;
then
mount
-o
bind
"
$1
"
"
$2
"
if
[
$?
-eq
0
]
;
then
log_print
"Mount:
$1
"
else
log_print
"Mount Fail:
$1
"
fi
fi
}
merge_image
()
{
if
[
-f
$1
]
;
then
log_print
"
$1
found"
...
...
@@ -396,6 +400,7 @@ case $1 in
# Travel through all mods
for
MOD
in
$MOUNTPOINT
/
*
;
do
if
[
-f
$MOD
/auto_mount
-a
-d
$MOD
/system
-a
!
-f
$MOD
/disable
]
;
then
log_print
"Analyzing module:
$MOD
"
TRAVEL_ROOT
=
$MOD
(
travel system
)
rm
-f
$MOD
/vendor 2>/dev/null
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment