diff --git a/scripts/functions.sh b/scripts/functions.sh index 9a7fcde627..ec0618c272 100644 --- a/scripts/functions.sh +++ b/scripts/functions.sh @@ -5,6 +5,19 @@ 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")" @@ -13,7 +26,16 @@ get_fs_type() { echo "ubifs" ;; "68737173") - echo "squashfs" + local post_padding_word="$(get_post_padding_word "$1")" + + case "$post_padding_word" in + "deadc0de") + echo "squashfs-jffs2" + ;; + *) + echo "squashfs" + ;; + esac ;; *) echo "unknown"