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() {
...
@@ -55,6 +55,30 @@ unblock() {
exit
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
()
{
run_scripts
()
{
BASE
=
$MOUNTPOINT
BASE
=
$MOUNTPOINT
for
MOD
in
$BASE
/
*
;
do
for
MOD
in
$BASE
/
*
;
do
...
@@ -77,53 +101,40 @@ run_scripts() {
...
@@ -77,53 +101,40 @@ run_scripts() {
done
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
()
{
travel
()
{
# Ignore /system/vendor, we will handle it differently
[
"
$1
"
=
"system/vendor"
]
&&
return
cd
"
$TRAVEL_ROOT
/
$1
"
cd
"
$TRAVEL_ROOT
/
$1
"
if
[
-f
.replace
]
;
then
if
[
-f
.replace
]
;
then
log_print
"Replace: /
$1
"
rm
-rf
"
$MOUNTINFO
/
$1
"
rm
-rf
"
$MOUNTINFO
/
$1
"
mktouch
"
$MOUNTINFO
/
$1
"
"
$TRAVEL_ROOT
"
mktouch
"
$MOUNTINFO
/
$1
"
"
$TRAVEL_ROOT
"
else
else
for
ITEM
in
*
;
do
for
ITEM
in
*
;
do
# This means it an empty folder (shouldn't happen, but better to be safe)
# This means it's an empty folder (shouldn't happen, but better to be safe)
[
"
$ITEM
"
=
"*"
]
&&
return
;
[
"
$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
# Target not found or target/file is a symlink
if
[
!
-e
"/
$1
/
$ITEM
"
-o
-L
"/
$1
/
$ITEM
"
-o
-L
"
$ITEM
"
]
;
then
if
[
!
-e
"/
$1
/
$ITEM
"
-o
-L
"/
$1
/
$ITEM
"
-o
-L
"
$ITEM
"
]
;
then
# If we are in a higher level, delete the lower levels
# If we are in a higher level, delete the lower levels
rm
-rf
"
$MOUNTINFO
/dummy/
$1
"
2>/dev/null
rm
-rf
"
$MOUNTINFO
/dummy/
$1
"
2>/dev/null
# Mount the dummy parent
# Mount the dummy parent
log_print
"Replace with dummy: /
$1
"
mktouch
"
$MOUNTINFO
/dummy/
$1
"
mktouch
"
$MOUNTINFO
/dummy/
$1
"
if
[
-d
"
$ITEM
"
]
;
then
if
[
-L
"
$ITEM
"
]
;
then
# Create new dummy directory and mount it
mkdir
-p
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
elif
[
-L
"
$ITEM
"
]
;
then
# Copy symlinks
# Copy symlinks
log_print
"Symlink: /
$1
/
$ITEM
"
mkdir
-p
"
$DUMMDIR
/
$1
"
2>/dev/null
mkdir
-p
"
$DUMMDIR
/
$1
"
2>/dev/null
cp
-afc
"
$ITEM
"
$"DUMMDIR/
$1
/
$ITEM
"
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
else
# Create new dummy file and mount it
# Create new dummy file and mount it
log_print
"New file: /
$1
/
$ITEM
"
mktouch
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$DUMMDIR
/
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
fi
fi
...
@@ -133,6 +144,7 @@ travel() {
...
@@ -133,6 +144,7 @@ travel() {
(
travel
"
$1
/
$ITEM
"
)
(
travel
"
$1
/
$ITEM
"
)
elif
[
!
-L
"
$ITEM
"
]
;
then
elif
[
!
-L
"
$ITEM
"
]
;
then
# Mount this file
# Mount this file
log_print
"Replace: /
$1
/
$ITEM
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
mktouch
"
$MOUNTINFO
/
$1
/
$ITEM
"
"
$TRAVEL_ROOT
"
fi
fi
fi
fi
...
@@ -164,24 +176,16 @@ clone_dummy() {
...
@@ -164,24 +176,16 @@ clone_dummy() {
else
else
mktouch
"
$DUMMDIR$REAL
"
mktouch
"
$DUMMDIR$REAL
"
fi
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
fi
fi
fi
done
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
()
{
merge_image
()
{
if
[
-f
$1
]
;
then
if
[
-f
$1
]
;
then
log_print
"
$1
found"
log_print
"
$1
found"
...
@@ -396,6 +400,7 @@ case $1 in
...
@@ -396,6 +400,7 @@ case $1 in
# Travel through all mods
# Travel through all mods
for
MOD
in
$MOUNTPOINT
/
*
;
do
for
MOD
in
$MOUNTPOINT
/
*
;
do
if
[
-f
$MOD
/auto_mount
-a
-d
$MOD
/system
-a
!
-f
$MOD
/disable
]
;
then
if
[
-f
$MOD
/auto_mount
-a
-d
$MOD
/system
-a
!
-f
$MOD
/disable
]
;
then
log_print
"Analyzing module:
$MOD
"
TRAVEL_ROOT
=
$MOD
TRAVEL_ROOT
=
$MOD
(
travel system
)
(
travel system
)
rm
-f
$MOD
/vendor 2>/dev/null
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