#!/bin/bash
#added by cheanl 1226

usboperinfo=/tmp/.mount_usb_oprer.info
usbinfofile=/tmp/usbinfo
mtabfile="/etc/mtab"

noontec_getusbformatlist()
{
	echo "ext2" "ext3" "ext4" "vfat" "ntfs" "hfsplus"
}

noontec_usbformat()
{
	if [ ! -n "$1" ] || [ ! -n "$2" ] || [ "$1" = "-" ];then
		echo 1
		return 1
	else
		mydev="$1"
		newtype="$2"
	fi

	fstype=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $10}' $usbinfofile)
	if [  -n "$fstype" ];then
		noontec_usbumount $1 > /dev/null 2>&1
		if [ $? -ne 0 ];then
			echo error_16_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi
	
		fstype=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $10}' $usbinfofile)
		devpath=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $3}' $usbinfofile)
		#echo mydev:$mydev,newtype:----$newtype---,fstype:----$fstype---
		if [ "$fstype" = "nfsd" -o "$newtype" = "ntfs" ];then
			mkfs.$newtype -f  $devpath > /dev/null 2>&1
		else
			mkfs.$newtype $devpath > /dev/null 2>&1
		fi	
		if [ $? -ne 0 ];then
			echo error_17_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi

		fstype=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $10}' $usbinfofile)
		#echo fstype:$fstype
		sed -i '/\/dev\/'$mydev'/s/'$fstype'/'$newtype'/' "$usbinfofile"
		if [ $? -ne 0 ];then
			echo error_18_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi
		
		noontec_usbmount $1 > /dev/null 2>&1
		if [ $? -ne 0 ];then
			echo error_19_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi
	else
		echo error_20_$mydev >> "$usboperinfo"
		echo 1
		return 1
		
	fi

	echo succ_05_$mydev >> "$usboperinfo"
	echo 0
	return 0
}

noontec_usbdelete()
{
	errorflag=0

	if [ ! -n "$1" ] || [ "$1" = "-" ];then
		echo error_01_$mydev >> "$usboperinfo"
		echo 1
		return 1
	else
		mydev="$1"
	fi
	noontec_usbumount $mydev > /dev/null 2>&1
	if [ $? -eq 0 ];then
		errorflag=0
	else
		errorflag=1
	fi
	sed -i '/\/dev\/'$mydev'/d' "$mtabfile"
	sed -i '/\/dev\/'$mydev'/d' "$usbinfofile"
	sdparm --command=stop "$devpath" >/dev/null 2>&1
	sdparm --command=unload "$devpath" >/dev/null 2>&1
	sdparm --command=eject "$devpath" >/dev/null 2>&1
	if [ $errorflag -ne 0 ];then
		echo 1
		return 1
	fi
	
	echo succ_06_$mydev >> "$usboperinfo"
	echo 0
	return 0
}

noontec_usbumount()
{
	if [ ! -n "$1" ] || [ "$1" = "-" ];then
		echo error_01_$mydev >> "$usboperinfo"
		echo 1
		return 1
	else
		mydev="$1"
	fi

	#if [ -f /sys/class/net/wlan0/carrier ] && [ $(cat /sys/class/net/wlan0/carrier) -eq 1 ]
	#if [ -f /sys/class/net/eth0/carrier ] && [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]

	devpath=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $3}' $usbinfofile)
	mountpoint=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $8}' $usbinfofile)
	moutstatus=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $1}' $usbinfofile)
	if [ -z "$moutstatus" ] || [ "$moutstatus" -eq 2 ];then 
		echo succ_01_$mydev >> "$usboperinfo"
		echo 0
		return 0
	fi
	
	ls "$devpath" > /dev/null 2>&1
	if [ $? -eq 0 ];then
		# send SCSI sync command, some devices don't support this so we just
		# ignore errors
		sdparm --command=sync "$devpath" >/dev/null || true
		# send SCSI stop command
		sdparm --command=stop "$devpath" >/dev/null 2>&1

		umount "$mountpoint"
		if [ "$?" -ne 0 ];then
			umount -f "$mountpoint"
			if [ "$?" -ne 0 ];then
				echo error_03_$mydev >> "$usboperinfo"
				echo 1
				return 1
			fi
                fi
		
		sed -i '/\/dev\/'$mydev'/d' "$mtabfile"
		sed -i '/\/dev\/'$mydev'/s/'$moutstatus'/2/' "$usbinfofile"
		if [ "$?" -ne 0 ];then
			echo error_02_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi

	fi
	
		
	echo 0
	echo succ_02_$mydev >> "$usboperinfo"
	return 0
}

noontec_usbmount()
{
	if [ ! -n "$1" ] || [ "$1" = "-" ];then
		echo error_04_$mydev >> "$usboperinfo"
		echo 1
		return 1
	else
		mydev="$1"
	fi

	#if [ -f /sys/class/net/wlan0/carrier ] && [ $(cat /sys/class/net/wlan0/carrier) -eq 1 ]
	#if [ -f /sys/class/net/eth0/carrier ] && [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
	
	devpath=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $3}' $usbinfofile)
	mountpoint=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $8}' $usbinfofile)
	moutstatus=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $1}' $usbinfofile)
	if [ "$moutstatus" -eq 1 ];then 
		umount "$mountpoint"
		if [ "$?" -ne 0 ];then
			umount -f "$mountpoint"
			if [ "$?" -ne 0 ];then
				echo error_05_$mydev >> "$usboperinfo"
				echo 1
				return 1
			fi
                fi
		
	fi

	ls "$devpath" > /dev/null 2>&1
	if [ $? -eq 0 ];then
		fstype=$(blkid /dev/$mydev)
		if [ $? -eq 0 ];then
			fstype=$(echo "$fstype"|awk -F"=" '/TYPE=/{print $NF}'|awk -F"\"" '{print $2}')
		else
			echo error_06_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi
		
		
		sed -i '/\/dev\/'$mydev'/d' "$mtabfile"
		if [ "$fstype" = "nfsd" ];then
			mount -t $fstype -o force,nls=utf8,rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1
		elif [ "$fstype" = "ntfs" ];then
			mount -t ntfs-3g -o force,nls=utf8,rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1
		elif [ "$fstype" = "hfsplus" ];then      
			fsck.hfsplus /dev/$mydev > /dev/null 2>&1
			mount -t $fstype -o rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1
		else
			mount -t $fstype -o rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1
		fi
		if [ $? -ne 0 ];then
			echo error_07_$mydev >> "$usboperinfo"
			return 1
		fi  
		
		moutstatus=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $1}' $usbinfofile)	
		sed -i '/\/dev\/'$mydev'/s/'$moutstatus'/1/' "$usbinfofile"
		if [ "$?" -ne 0 ];then
			echo error_09_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi
	else
		echo error_10_$mydev >> "$usboperinfo"
		echo 1
		return 1
	fi

	echo succ_04_$mydev >> "$usboperinfo"
	echo 0
	return 0

}

noontec_usbremount()
{
	if [ ! -n "$1" ];then
		echo 1
		return 1
	else
		mydev="$1"
	fi

	#if [ -f /sys/class/net/wlan0/carrier ] && [ $(cat /sys/class/net/wlan0/carrier) -eq 1 ]
	#if [ -f /sys/class/net/eth0/carrier ] && [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
	
	devpath=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $3}' $usbinfofile)
	mountpoint=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $8}' $usbinfofile)
	
	ls "$devpath" > /dev/null 2>&1
	if [ $? -eq 0 ];then
		fstype=$(blkid /dev/$mydev)
		if [ $? -eq 0 ];then
			fstype=$(echo "$fstype"|awk -F"=" '/TYPE=/{print $NF}'|awk -F"\"" '{print $2}')
		else
			echo error_11_$mydev >> "$usboperinfo"
			echo 1
			return 1
		fi

		moutstatus=$(awk  'BEGIN{FS="#";}/#'$mydev'#/{print $1}' $usbinfofile)
		if [ "$moutstatus" -eq 1 ];then 
			if [ "$fstype" = "nfsd" -o "$type" = "ntfs" ]
			then
				mount -o force,nls=utf8,remount,rw $mountpoint
			else
				mount -o remount,rw $mountpoint
			fi
			if [ $? -ne 0 ];then
				echo error_12_$mydev >> "$usboperinfo"
				return 1
			fi  
		elif [ "$moutstatus" -eq 2 ];then
			sed -i '/\/dev\/'$mydev'/s/'$moutstatus'/1/' "$usbinfofile"
			if [ "$?" -ne 0 ];then
				echo error_13_$mydev >> "$usboperinfo"
				echo 1
				return 1
			fi
			
			if [ "$fstype" = "nfsd" ];then                                                                               
				mount -t $fstype -o force,nls=utf8,rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1 
			elif [ "$fstype" = "ntfs" ];then                                                                             
				mount -t ntfs-3g -o force,nls=utf8,rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1 
			elif [ "$fstype" = "hfsplus" ];then                                                                          
				fsck.hfsplus /dev/$mydev > /dev/null 2>&1
				mount -t $fstype -o rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1 
			else
				mount -t $fstype -o rw /dev/$mydev /mnt/usb/$mydev > /dev/null 2>&1
			fi
			if [ $? -ne 0 ];then
				echo error_14_$mydev >> "$usboperinfo"
				return 1
			fi  
		fi

	else
		echo error_15_$mydev >> "$usboperinfo"
		echo 1
		return 1
	fi

	echo succ_03_$mydev >> "$usboperinfo"
	echo 0
	return 0

}
