#!/bin/sh
# Begin $rc_base/init.d/cleanfs - Clean file system

# Written by Gerard Beekmans  - gerard@linuxfromscratch.org

. /etc/sysconfig/rc
. $rc_functions

# Function to create files/directory on boot.
create_files() {
	# Read in the configuration file.
	exec 9>&0 < /etc/sysconfig/createfiles
		while read name type perm usr grp dtype maj min junk ; do

			# Ignore comments and blank lines.
       			case "$name" in
				""|\#*) continue ;;
			esac

			# Ignore existing files.
			if [ ! -e "$name" ]; then
				# Create stuff based on its type.
				case "$type" in
					dir)    mkdir "$name"   ;;
					file)   :> "$name"      ;;
					dev)    case "$dtype" in
						char)   mknod "$name" c $maj $min	;;
						block)  mknod "$name" b $maj $min	;;
						pipe)   mknod "$name" p			;;
						*) echo "Unknown device type: $dtype"   ;;
						esac            ;;
					*)      echo "Unknown type: $type" >&2
						continue        ;;
				esac

				# Set up the permissions, too.
				chown $usr:$grp "$name"
				chmod $perm "$name"
			fi
		done
	exec 0>&9 9>&-
}

case "$1" in
	start)
		echo -n "Cleaning file systems:"

		echo -n " /tmp"
		cd /tmp &&
		find . -depth -xdev -mindepth 1 ! -name lost+found \
			-exec rm -rf {} \; || failed=1

		echo -n " /var/lock"
		cd /var/lock &&
		find . -type f ! -newer /proc -exec rm -f {} \; || failed=1

		echo " /var/run"
		cd /var/run &&
		find . ! -type d ! -name utmp ! -newer /proc \
			-exec rm -f {} \; || failed=1
		> /var/run/utmp
		if grep -q '^utmp:' /etc/group ; then
			chmod 664 /var/run/utmp
			chgrp utmp /var/run/utmp
		fi

		(exit $failed)
		evaluate_retval

		if egrep -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null; then
			echo "Creating files and directories..."
			create_files
			evaluate_retval
		fi
		;;
	*)
		echo "Usage: $0 {start}"
		exit 1
		;;
esac

# End $rc_base/init.d/cleanfs
