#!/bin/sh
# Copyright (C) 2009-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

. /lib/functions/block.sh
. /lib/functions/fsck.sh

blkdev=`dirname $DEVPATH`

if [ `basename $blkdev` != "block" ]; then

    device=`basename $DEVPATH`

    case "$ACTION" in
	add)
		local from_fstab
		local anon_mount
		local anon_swap
		local anon_fsck		
		local mds_mount_target
		local mds_mount_device
		local mds_mount_fstype
		local mds_mount_enabled_fsck
		local sds_swap_device
		local use_device
		local do_fsck=0
		local fsck_type
		
		local autoswap_from_fstab
		local automount_from_fstab
		local hotplug_blkid_fstype_match

	    mount_dev_section_cb() {
			mds_mount_device="$3"
			mds_mount_fstype="$4"
			mds_mount_enabled_fsck="$7"
	    }

	    swap_dev_section_cb() { 
			sds_swap_device="$2"
			return 0
	    }

		config_get_automount
		automount_from_fstab="$from_fstab"
		
		[ "$automount_from_fstab" -eq 1 ] && {
			config_get_mount_section_by_device "/dev/$device"
			use_device="$mds_mount_device"
			[ "$mds_mount_enabled_fsck" -eq 1 ] && { 
				do_fsck=1
				fsck_type="$mds_mount_fstype"
			}
		}
		
		[ -z "$use_device" ] && {
			config_get_autoswap
			autoswap_from_fstab="$from_fstab"
		
			[ "$autoswap_from_fstab" -eq 1 ] && {
				config_get_swap_section_by_device "/dev/$device"
				use_device="$sds_swap_device" && do_fsck=0
			}
		}
		
		grep -q "/dev/$device" /proc/swaps || grep -q "/dev/$device" /proc/mounts || {
			[ "$anon_fsck" -eq 1 ] && [ -z "$use_device" ] && {
				use_device="/dev/$device" && do_fsck=1 && mds_mount_fstype="" && hotplug_blkid_fstype_match=0
			}
		}
		
		[ "$do_fsck" -eq 1 ] && {		
			libmount_fsck "$use_device" "$fsck_type" "$do_fsck"
		}
		
		reset_dev_section_cb
		;;
    esac	
fi