#!/bin/busybox ash
. /etc/init.d/tc-functions
useBusybox

PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH
umask 022

# Exit if script is already running
[ -e /proc/partitions ] || exit
if [ -e /var/run/rebuildfstab.pid ]; then
 if [ -e "/proc/$(cat /var/run/rebuildfstab.pid)" ]; then
  touch /var/run/rebuildfstab.rescan 2>/dev/null
  exit
 fi
 rm -f /var/run/rebuildfstab.pid
fi
echo "$$" >/var/run/rebuildfstab.pid

TMP="/tmp/fstab.$$.tmp"
ADDEDBY="# Added by TC"
DEVROOT="/dev"

# Create a list of fdisk -l
FDISKL=`fdisk -l | awk '$1 ~ /dev/{printf " %s ",$1}'`

# Read a list of CDROM/DVD Drives
CDROMS=""
CDROMSF=/etc/sysconfig/cdroms
[ -s "$CDROMSF" ] &&  CDROMS=`cat "$CDROMSF"`

grep -v "$ADDEDBY" /etc/fstab > "$TMP"

# Loop through block devices
for i in `find /sys/block/*/ -name dev`; do
  case "$i" in
    *loop*|*ram*)
      continue
      ;;
  esac

  DEVNAME=`echo "$i"| tr [!] [/] | awk 'BEGIN{FS="/"}{print $(NF-1)}'`
  DEVMAJOR="$(cat $i|cut -f1 -d:)"
  
  FSTYPE=""
  case "$CDROMS" in *"$DEVROOT/$DEVNAME"*) FSTYPE="auto" ;; esac

# First try blkid approach for FSTYPE for non floppy drives.
  [ "$DEVMAJOR" != 2 -a -z "$FSTYPE" ] && FSTYPE="$(fstype "/dev/$DEVNAME")"
  [ "$FSTYPE" == "linux_raid_member" ] && continue
  [ "$FSTYPE" == "LVM2_member" ] && continue
  if [ -z "$FSTYPE" ]; then

    case "$DEVMAJOR" in
      2|98)
        FSTYPE="auto"
        ;;
      3|8|11|22|33|34)
        case "$FDISKL" in *"$DEVROOT/$DEVNAME "*) FSTYPE="$(fstype $DEVROOT/$DEVNAME)" ;; esac
        case "$CDROMS" in *"$DEVROOT/$DEVNAME"*) FSTYPE="auto" ;; esac
        ;;
      179|9|259) # MMC or MD (software raid)
        FSTYPE="$(fstype $DEVROOT/$DEVNAME)"
        ;;
    esac
  fi

checkntfs() {
  if [ -f /usr/local/bin/ntfs-3g ]; then
      FSTYPE="ntfs-3g"
      OPTIONS="$OPTIONS"
  else
      FSTYPE="ntfs"
      OPTIONS="$OPTIONS,ro,umask=000"
  fi	
}
  [ -z "$FSTYPE" ] && continue
  MOUNTPOINT="/mnt/$DEVNAME"
  OPTIONS="noauto,users,exec"
  case "$FSTYPE" in
    ntfs) checkntfs ;;
    vfat|msdos) OPTIONS="${OPTIONS},umask=000" ;;
    ext2|ext3) OPTIONS="${OPTIONS},relatime" ;;
    swap) OPTIONS="defaults"; MOUNTPOINT="none" ;;
  esac
  if [ "$MOUNTPOINT" != "none" ]; then
    mkdir -p "/mnt/$DEVNAME" 2>/dev/null >/dev/null
  fi	
  grep -q "^$DEVROOT/$DEVNAME " $TMP ||
    printf "%-15s %-15s %-8s %-20s %-s\n" "$DEVROOT/$DEVNAME" "$MOUNTPOINT" "$FSTYPE" "$OPTIONS" "0 0 $ADDEDBY" >>"$TMP"
done


# Clean up
mv "$TMP" /etc/fstab
rm -f /var/run/rebuildfstab.pid
sync

# If another copy tried to run while we were running, rescan.
if [ -e /var/run/rebuildfstab.rescan ]; then
  rm -f /var/run/rebuildfstab.rescan
  exec $0 "$@"
fi
