49 lines
931 B
Bash
49 lines
931 B
Bash
#!/bin/sh
|
|
|
|
|
|
get_magic_word() {
|
|
dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' '
|
|
}
|
|
|
|
get_post_padding_word() {
|
|
local rootfs_length="$(stat -c%s "$1")"
|
|
[ "$rootfs_length" -ge 4 ] || return
|
|
rootfs_length=$((rootfs_length-4))
|
|
|
|
# the JFFS2 end marker must be on a 4K boundary (often 64K or 256K)
|
|
local unaligned_bytes=$((rootfs_length%4096))
|
|
[ "$unaligned_bytes" = 0 ] || return
|
|
|
|
# skip rootfs data except the potential EOF marker
|
|
dd if="$1" bs=1 skip="$rootfs_length" 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' '
|
|
}
|
|
|
|
get_fs_type() {
|
|
local magic_word="$(get_magic_word "$1")"
|
|
|
|
case "$magic_word" in
|
|
"3118"*)
|
|
echo "ubifs"
|
|
;;
|
|
"68737173")
|
|
local post_padding_word="$(get_post_padding_word "$1")"
|
|
|
|
case "$post_padding_word" in
|
|
"deadc0de")
|
|
echo "squashfs-jffs2"
|
|
;;
|
|
*)
|
|
echo "squashfs"
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
echo "unknown"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
round_up() {
|
|
echo "$(((($1 + ($2 - 1))/ $2) * $2))"
|
|
}
|