aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/functions.sh24
1 files changed, 23 insertions, 1 deletions
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"