#!/bin/sh
# misc functions

# $1 = device_name (ex: sda1, mmcblk0p1, sr0 - returns sda, mmcblk0, sr0)
fx_get_drvname() {
	case $1 in
		mmc*|nmve*) echo ${1%p*} ;; #remove trailing p*
		*) echo ${1:0:3} ;;         #assume sda, sr0, xxx
	esac
}

# $1 = device_name
fx_drv_is_ok() { #this is for /sys/block and /proc/partitions
	case $1 in
		""|name*|*ram*|loop*|nbd*|dm-*|md*|nand*|*boot*|bcache*|mtdblock*) return 1 ;; #no
	esac
	return 0 #yes
}

# $1 = bytes
fx_format_bytes() {
	[ $1 ] || return
	local BYTES=$1
	local FORMATTEDSIZE="${BYTES}B" # bytes
	if [ ${BYTES} -ge 1099511627776 ] ; then
		FORMATTEDSIZE="`dc -e "$BYTES 1099511627776 2 k / p"`"
		FORMATTEDSIZE="`LANG=C printf "%.2f" $FORMATTEDSIZE`T" #terabytes
	elif [ ${BYTES} -ge 1073741824 ] ; then
		FORMATTEDSIZE="`dc -e "$BYTES 1073741824 1 k / p"`"
		FORMATTEDSIZE="`LANG=C printf "%.1f" $FORMATTEDSIZE`G" # gigabytes
	elif [ ${BYTES} -ge 1048576 ] ; then
		FORMATTEDSIZE="$(( $BYTES / 1048576 ))M" # megabytes
	elif [ ${BYTES} -ge 1024 ] ; then
		FORMATTEDSIZE="$(( $BYTES / 1024 ))K" # kilobytes
	fi
	echo "$FORMATTEDSIZE"
}

# $1 = drv_name
fx_drv_is_optical() {
	[ $1 ] || return 1
	local xtype
	if [ -e /sys/block/${1}/device/type ] ; then
		read -r xtype < /sys/block/${1}/device/type
		[ "$xtype" = "5" ] && return 0
	fi
	return 1
}

# $1 = drv_name
fx_drv_is_usb() {
	[ $1 ] || return 1
	case $(readlink /sys/block/${1}) in *"/usb"[0-9]*)
		return 0 ;;
	esac
	return 1
}
