#!/usr/bin/awk -f
function el_quote(s) {
	RESULT="\"${${${1}//\\/\\\\}//\"/\\\"}\""
	gsub(/\\/, "\\\\", s);  # first double all backslashes
	gsub(/"/, "\\\"", s);  # then escape quote marks
	return "\"" s "\""  # then surround with quote marks
}

BEGIN {
	# check if necessary variables were defined
	if(BIN == "") { exit 100 }
	if(ROOT == "") { exit 100 }

	# quote common stings
	IF = el_quote(BIN "/if")
	UMOUNT = el_quote(BIN "/busybox") " umount"

	# mount IDs seem to be unsigned, so let's use -1 to signify not found
	max_id = -1
	root_id = -1
}

# read in /proc/self/mountinfo
$5 == "/" { root_id = $1 }
{
	max_id = max_id < $1 ? $1 : max_id
	parents[$1] = $2
	mountpoints[$1] = $5
}

function _if(opts, s) {
	return IF opts " { " s " } "
}

function umount(opts, s) {
	return UMOUNT opts " " el_quote(ROOT s)
}

function print_umount(mtp){
	print _if("", \
	      _if(" -n -t",  umount("", mtp)) \
	      umount(" -l", mtp) \
      )
}

function recursively_umount(mount_id,    id) {
	for(id=max_id; id>=0; id--){
		if(parents[id] == mount_id){
			recursively_umount(id)
		}
	}
	print_umount(mountpoints[mount_id])
}

END{
	if(root_id == -1) { exit 111 }
	recursively_umount(root_id)
}