#!/bin/sh
# add_fstab_entry
# place in /lib/udev
# $1 = devicename
# $2 = fstype

devicename=$(basename $1)
fstype=$2
if [ -z "$fstype" ]; then
    fstype="$ID_FS_TYPE"
    # fstype unknown, do nothing
    [ -n "$fstype" ] || exit 1
fi
[ "$fstype" != "swap" ] || exit 0

BASEDEV=$(echo $devicename | tr -d "0-9")

if [ ${BASEDEV} = "fd" ]; then
    DEVNUM=$(echo $devicename | tr -d "fd")
    LABEL="floppy${DEVNUM}"
    fstype="vfat"
else
    export $(udevadm info --query=env --name=$devicename)
    LABEL=${ID_FS_LABEL_SAFE}
    if [ -z ${LABEL} ]; then
	LABEL=$(echo ${ID_BUS}${ID_TYPE}-$devicename |tr " " "_")
    fi
fi

# make sure the root we mount to exists
ROOT=/tmp/drives
[ -d $ROOT ] ||	mkdir ${ROOT}

# invent $MOUNTPOINT
MOUNTPOINT=$ROOT/$LABEL
[ -d $MOUNTPOINT ] || mkdir ${MOUNTPOINT}

BLOCKS=${3:-0}
SIZE=$((${BLOCKS}*512/1048576))
DESCRIPTION="${ID_VENDOR}"
ENC_CONF="/etc/udev/fs-encoding.conf"
[ -f "$ENC_CONF" ] && . "$ENC_CONF"
CODEPAGE=${CODEPAGE:-866}
IOCHARSET=${IOCHARSET:-utf8}
if [ "${ID_TYPE}" = "cd" ]; then
    MOUNTOPTS="ro"
    if [ -n "${ID_CDROM_DVD}" ]; then
	DESCRIPTION="DVD"
    else
	DESCRIPTION="CD"
    fi
    DESCRIPTION="${DESCRIPTION}-ROM"
    if [ "${IOCHARSET}" = "utf8" ]; then
	MOUNTOPTS="${MOUNTOPTS},utf8"
    else
	MOUNTOPTS="${MOUNTOPTS},iocharset=${IOCHARSET}"
    fi
    echo "/dev/$devicename ${MOUNTPOINT} udf,iso9660,cdfs ${MOUNTOPTS} 0 0" >> /tmp/fstab
    echo "AddCdromDrive|${LABEL}|/dev/${devicename}|${DESCRIPTION}" > /tmp/lbus.fifo
else
    REMOVABLE=0
    MOUNTOPTS="rw,noatime"
    if [ ${BASEDEV} = "fd" ]; then
	DESCRIPTION="Floppy"
	MOUNTOPTS="${MOUNTOPTS},codepage=866,utf8"
    else
	case "$ID_BUS" in
	    usb)
		DESCRIPTION="USB DISK ${ID_VENDOR}"
		REMOVABLE=1
		;;
	    scsi)
		[ "x$ID_VENDOR" = "xATA" ] &&  DESCRIPTION="SATA DISK" || DESCRIPTION="SCSI DISK"
		;;
	    ata)
		DESCRIPTION="ATA DISK"
		;;
	    *)
		DESCRIPTION="DISK"
		;;
	esac
	DESCRIPTION="${DESCRIPTION} ${ID_MODEL}"
	if [ "${fstype}" = "vfat" -o "${fstype}" = "fat" ]; then
	    MOUNTOPTS="${MOUNTOPTS},codepage=${CODEPAGE}"
	fi
	if [ "${fstype}" = "fat" -o "${fstype}" = "jfs" -o "${fstype}" = "iso9660" -o "${fstype}" = "vfat" -o "${fstype}" = "udf" ]; then
	    MOUNTOPTS="${MOUNTOPTS},iocharset=${IOCHARSET}"
	fi
	if [ "${fstype}" = "ntfs" ] && grep -q '^fuse[[:blank:]]' /proc/modules; then
	    if [ -x /sbin/mount.fuse.ntfs ]; then
		fstype="fuse.ntfs"
	    elif [ -x /sbin/mount.ntfs-3g ]; then
		fstype="ntfs-3g"
	    fi
	fi
	case "${fstype}" in
	    ntfs)
		MOUNTOPTS="${MOUNTOPTS},nls=${IOCHARSET}"
		;;
	    fuse.ntfs|ntfs-3g)
		MOUNTOPTS="${MOUNTOPTS},silent,umask=000,locale=en_US.UTF-8"
		;;
	esac
    fi
    echo "/dev/$devicename ${MOUNTPOINT} ${fstype} ${MOUNTOPTS} 0 0" >> /tmp/fstab
    echo "AddBlockDevice|${LABEL}|/dev/${devicename}|${REMOVABLE}|${SIZE}|${DESCRIPTION}" > /tmp/lbus.fifo
fi
