#!/bin/bash
set -e
set -x
if test $(basename $0) = enable-swap-dump; then
    setprop persist.smartisan.swapdump 1
else
    setprop persist.smartisan.swapdump 0
fi

if test "$(getprop persist.smartisan.swapdump)" != 1; then
    rm -f /data/s.wap /data/s.wap.tmp /data/s.wap.lock
fi

if test ! -e /data/s.wap -a "$(dd if=/dev/block/bootdevice/by-name/factory bs=1 count=4 skip=20971520)" = "DUMP"; then
    echo XX | dd of=/dev/block/bootdevice/by-name/factory count=1 bs=4096 seek=5120
    sync
fi

if test "$(getprop persist.smartisan.devtest)" != 1; then
    exit
fi

if test "$(getprop persist.smartisan.swapdump)" != 1; then
    exit
fi

(
    flock 9
    if test -e /data/s.wap; then
        if check-ramdump-done "done ram dump"; then
            exit
        elif test "$(dd if=/dev/block/bootdevice/by-name/factory bs=1 count=4 skip=20971520)" != "DUMP"; then
            dd if=/dev/block/bootdevice/by-name/factory count=1 bs=4096 skip=5120 of=/data/logs/.factory.dump
            if test -e /data/swap-dump-debug; then
                exit
            fi
            dd if=/data/s.wap of=/dev/block/bootdevice/by-name/factory count=820 bs=4096 seek=5120 #pretty 3G200M/4096*4/4096+1
            sync
            echo -n DUMP | dd of=/dev/block/bootdevice/by-name/factory count=1 bs=4096 seek=5120
        fi
        exit
    fi
    id
    if test -e /data/s.wap.test -a -e /data/s.wap.tmp; then
        true
    else
        rm -f /data/s.wap.tmp
        dd if=/dev/zero of=/data/s.wap.tmp bs=4096 count=837632 # 3.2G
        if id | grep uid=0; then
            chown factory.system /data/s.wap.tmp
        fi
        chmod 660 /data/s.wap.tmp
    fi
    /system/xbin/swap-dump-bmap /data/s.wap.tmp
    dd if=/data/s.wap.tmp of=/dev/block/bootdevice/by-name/factory count=820 bs=4096 seek=5120 #pretty 3G200M/4096*4/4096+1
    echo -n DUMP | dd of=/dev/block/bootdevice/by-name/factory count=1 bs=4096 seek=5120
    sync
    mv /data/s.wap.tmp /data/s.wap
    sync
) 9> /data/s.wap.lock
