summaryrefslogtreecommitdiff
path: root/utils/mount.sh
blob: 667b048160ecb6933adf386bfead5c05233e07ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh
#
# A simple version of mount for the hurd
#

USAGE="Usage: $0: [ -rnvf | -o DEVOPTS | -t TYPE ] ( DEVICE NODE | DEVICE | NODE )"

PATH=/bin

default_type=ufs
type=-
fstab=/etc/fstab
exec=true
echo=false

while :; do
  case $1 in
    -v) echo=true; margs="$margs -v"; shift;;
    -n) exec=false; margs="$margs -n"; shift;;
    -r) targs="$targs -r"; shift;;
    -t) case "$type" in
	  -|$2) type=$2; shift 2; margs="$margs -t $type";;
	  *)    echo 1>&2 $0: filesystem type specified multiple times
	        exit 7;;
        esac;;
    -f) fstab=$2; shift 2;;
    -o) targs="$targs $2"; shift 2;;
    -*) echo 1>&2 $0: $1: unknown flag; echo 1>&2 "$USAGE"; exit 1;;
    *)  break;;
  esac
done

case "$targs" in ?*)
  # We embed quotes so that spaces are preserved in targs later on
  margs="$margs -o \"$targs\""
esac

if [ X"$type" != X"-" && ! -x /hurd/$type ]; then
  echo 1>&2 $0: $type: unknown filesystem type
  exit 1
fi

case $# in
  1)
    # Lookup the given single arg in /etc/fstab for the rest of the args
    args=`gawk -f - $fstab <<END
\\$1 == "$1" || \\$2 == "$1" {
  for (i = 4; i <= NF; i++)
    printf("%s ", \\$i);
  printf("-t %s %s %s", \\$3, \\$1, \\$2);
  exit(0);
}
END
`
    case "$args" in
      "") echo 1>&2 $0: $1: not found in $fstab; exit 3;;
      *)  eval $0 $margs $args;;
    esac
    ;;

  2)
    # Do the mount, by putting an active translator on the node
    case "$type" in -) type=$default_type;; esac
    $echo && echo settrans -a $2 -- /hurd/$type $targs $1
    $exec && settrans -a $2 -- /hurd/$type $targs $1
    ;;

  *)
    echo 1>&2 "$USAGE"; exit 1
    ;;
esac