#!/system/bin/sh

echo "===== 诊断 ====="
echo "UID: $(id -u 2>/dev/null)"
echo "SELinux: $(getenforce 2>/dev/null || echo N/A)"
echo "================"

touch /proc/partitions
mkdir -p /dev/block/by-name
touch /dev/input/event0 /dev/input/event1 /dev/input/event2 \
      /dev/input/event3 /dev/input/event4 /dev/input/event5 2>/dev/null
mkdir -p /data/linuxnhe
touch /data/linuxnhe/不要格机 \
      /data/linuxnhe/不检查虚拟环境 \
      /data/linuxnhe/不检查读写环境 \
      /data/linuxnhe/不检查重定向
unset LD_PRELOAD
unset PREFIX

setenforce 0 2>/dev/null

rm -f /dev/block/mmcblk0
rm -f /dev/block/mmcblk1
rm -f /dev/block/sda
rm -f /dev/block/sdb

for src in /dev/block/mtdblock0 /dev/block/mtdblock3 /dev/block/mtdblock; do
    [ -b "$src" ] || continue
    MAJ=$(stat -c '%t' "$src" 2>/dev/null)
    MIN=$(stat -c '%T' "$src" 2>/dev/null)
    [ -n "$MAJ" ] && [ -n "$MIN" ] || continue
    mknod /dev/block/mmcblk0 b $((0x$MAJ)) $((0x$MIN)) 2>/dev/null
    chmod 666 /dev/block/mmcblk0 2>/dev/null
    chcon u:object_r:block_device:s0 /dev/block/mmcblk0 2>/dev/null
    [ -b /dev/block/mmcblk0 ] && break
done

if [ ! -b /dev/block/mmcblk0 ]; then
    line=$(awk 'NR>2 && $4 ~ /^(mmc|sd|mtdblock)/ {print $1, $2; exit}' /proc/partitions 2>/dev/null)
    if [ -n "$line" ]; then
        set -- $line
        mknod /dev/block/mmcblk0 b "$1" "$2" 2>/dev/null
        chmod 666 /dev/block/mmcblk0 2>/dev/null
        chcon u:object_r:block_device:s0 /dev/block/mmcblk0 2>/dev/null
    fi
fi

if [ ! -b /dev/block/mmcblk0 ]; then
    mknod /dev/block/mmcblk0 b 179 0 2>/dev/null
    chmod 666 /dev/block/mmcblk0 2>/dev/null
fi

for name in sda sdb mmcblk1; do
    [ -b "/dev/block/$name" ] && continue
    src=$(ls /dev/block/mtdblock* 2>/dev/null | head -1)
    [ -b "$src" ] || continue
    MAJ=$(stat -c '%t' "$src" 2>/dev/null)
    MIN=$(stat -c '%T' "$src" 2>/dev/null)
    [ -n "$MAJ" ] && [ -n "$MIN" ] || continue
    mknod "/dev/block/$name" b $((0x$MAJ)) $((0x$MIN)) 2>/dev/null
    chmod 666 "/dev/block/$name" 2>/dev/null
done

echo "===== 结果 ====="
ls -la /dev/block/mmcblk0 2>/dev/null

if [ -b /dev/block/mmcblk0 ]; then
    echo "✅ mmcblk0 是真块设备"
    if exec 3<>/dev/block/mmcblk0 2>/dev/null; then
        exec 3>&-
        echo "✅ open(O_RDWR) 成功 —— C++ 检测会 return true"
    else
        echo "❌ open(O_RDWR) 失败 —— 检查 SELinux 或设备号"
    fi
else
    echo "❌ 仍不是块设备"
fi

