[1046] | 1 | #!/bin/sh
|
---|
| 2 | #
|
---|
| 3 | # File: mount
|
---|
| 4 | # $Id: mount,v 1.2 2010/03/24 21:28:27 keithmarshall Exp $
|
---|
| 5 | #
|
---|
| 6 | # =====================================================================
|
---|
| 7 | #
|
---|
| 8 | # Copyright (C) 2006, 2007, 2009, 2010 by Keith Marshall
|
---|
| 9 | # mailto:keithmarshall@users.sourceforge.net
|
---|
| 10 | #
|
---|
| 11 | # This file is part of MSYS
|
---|
| 12 | # http://www.mingw.org/msys.shtml
|
---|
| 13 | #
|
---|
| 14 | # 2009-04-06: First published implementation for MSYS-1.0.11
|
---|
| 15 | # 2010-03-24: Updated for MSYS-1.0.14: --replace option added
|
---|
| 16 | #
|
---|
| 17 | # MSYS is free software. It is provided "as is", in the hope that it
|
---|
| 18 | # may be useful; there is NO WARRANTY OF ANY KIND, not even an implied
|
---|
| 19 | # warranty of MERCHANTABILITY or FITNESS FOR ANY PARTICULAR PURPOSE.
|
---|
| 20 | # At no time will the author accept liability for damages, however
|
---|
| 21 | # caused, resulting from the use of this software.
|
---|
| 22 | #
|
---|
| 23 | # Permission is granted to copy and redistribute this software, either
|
---|
| 24 | # as is, or in modified form, provided that:--
|
---|
| 25 | #
|
---|
| 26 | # 1) All such copies are distributed with the same rights
|
---|
| 27 | # of redistribution.
|
---|
| 28 | #
|
---|
| 29 | # 2) The preceding disclaimer of warranty and liabality is
|
---|
| 30 | # retained verbatim, in all copies.
|
---|
| 31 | #
|
---|
| 32 | # 3) Accreditation of the original author remains in place.
|
---|
| 33 | #
|
---|
| 34 | # 4) Modified copies are clearly identified as such, with
|
---|
| 35 | # additional accreditation given to the authors of each
|
---|
| 36 | # modified version.
|
---|
| 37 | #
|
---|
| 38 | # =====================================================================
|
---|
| 39 | #
|
---|
| 40 | #
|
---|
| 41 | # Ensure the the `fstab' mount registry exists, and is writeable.
|
---|
| 42 | #
|
---|
| 43 | >> ${MNTTAB="/etc/fstab"}
|
---|
| 44 | #
|
---|
| 45 | # Check for '--replace' option, so we can honour requests to reassign
|
---|
| 46 | # an existing mount table entry.
|
---|
| 47 | #
|
---|
| 48 | case $1 in
|
---|
| 49 | --replace | --replac | --repla | --repl) shift ; replace=yes ;;
|
---|
| 50 | *) replace=no ;;
|
---|
| 51 | esac
|
---|
| 52 | #
|
---|
| 53 | # Select the operation to be performed, based on number of argumemnts.
|
---|
| 54 | #
|
---|
| 55 | case $# in
|
---|
| 56 | 0)
|
---|
| 57 | #
|
---|
| 58 | # No arguments specified...
|
---|
| 59 | # Simply report the current state of the mount table.
|
---|
| 60 | #
|
---|
| 61 | /bin/msysmnt.exe ;;
|
---|
| 62 | #
|
---|
| 63 | 1)
|
---|
| 64 | #
|
---|
| 65 | # One argument specified...
|
---|
| 66 | # Check for any pre-existing mount which may conflict; if none,
|
---|
| 67 | # try to match it to a default mount specification from the `fstab'
|
---|
| 68 | # configuration file, and mount the specified directory, if any,
|
---|
| 69 | # on its associated mount point.
|
---|
| 70 | #
|
---|
| 71 | FSTAB=${FSTAB-"$MNTTAB.conf"}
|
---|
| 72 | MNTPATH=`echo "$1" | tr '\\\\' /`
|
---|
| 73 | #
|
---|
| 74 | if cat $MNTTAB | tr '\\' / | awk '
|
---|
| 75 | #
|
---|
| 76 | # Check for pre-existing mount of specified argument;
|
---|
| 77 | # set exit status to:--
|
---|
| 78 | # 0: if no such mount exists;
|
---|
| 79 | # 1: if argument is an already mounted directory;
|
---|
| 80 | # 2: if argument is a mount point already in use.
|
---|
| 81 | #
|
---|
| 82 | BEGIN { status = 0 }
|
---|
| 83 | /^#/ { $0 = "" }
|
---|
| 84 | $1 == "'$MNTPATH'" { status = 1 }
|
---|
| 85 | $2 == "'$MNTPATH'" { status = 2 }
|
---|
| 86 | END { exit status }'
|
---|
| 87 | then
|
---|
| 88 | #
|
---|
| 89 | # No pre-existing mount conflicts...
|
---|
| 90 | #
|
---|
| 91 | if WINPATH=`cat 2>/dev/null $FSTAB | tr '\\' / | awk '
|
---|
| 92 | #
|
---|
| 93 | # Look up the default mount point specification;
|
---|
| 94 | # set exit status, (assigned to "errno"), to:--
|
---|
| 95 | # 0: if found; (it is assigned to WINPATH);
|
---|
| 96 | # 1: if found, but multiply and ambiguously defined;
|
---|
| 97 | # 2: if not found.
|
---|
| 98 | #
|
---|
| 99 | BEGIN { status = 0; mount = "" }
|
---|
| 100 | /^#/ { $0 = "" }
|
---|
| 101 | $1 == "'$MNTPATH'" {
|
---|
| 102 | if( mount == "" ) mount = $0
|
---|
| 103 | else if( mount != $0 ) status = 1
|
---|
| 104 | }
|
---|
| 105 | $2 == "'$MNTPATH'" {
|
---|
| 106 | if( mount == "" ) mount = $0
|
---|
| 107 | else if( mount != $0 ) status = 1
|
---|
| 108 | }
|
---|
| 109 | END {
|
---|
| 110 | if( mount == "" ) exit 2
|
---|
| 111 | print mount
|
---|
| 112 | exit status
|
---|
| 113 | }'` errno=$?
|
---|
| 114 | then
|
---|
| 115 | #
|
---|
| 116 | # Found a default mount specification; activate it.
|
---|
| 117 | #
|
---|
| 118 | echo $WINPATH >> $MNTTAB
|
---|
| 119 | #
|
---|
| 120 | elif test -f $FSTAB && test -r $FSTAB
|
---|
| 121 | then
|
---|
| 122 | #
|
---|
| 123 | # Read the configuration file, but could not find
|
---|
| 124 | # a mount specification matching the argument.
|
---|
| 125 | #
|
---|
| 126 | case $errno in
|
---|
| 127 | 1) echo >&2 "$0: $FSTAB: ambiguous reference for $MNTPATH" ;;
|
---|
| 128 | 2) echo >&2 "$0: $FSTAB: no mount specification for $MNTPATH" ;;
|
---|
| 129 | esac
|
---|
| 130 | #
|
---|
| 131 | elif test -f $FSTAB
|
---|
| 132 | then
|
---|
| 133 | #
|
---|
| 134 | # Found the configuration file, but could not read it.
|
---|
| 135 | #
|
---|
| 136 | echo >&2 "$0: $FSTAB: cannot read configuration file"
|
---|
| 137 | #
|
---|
| 138 | else
|
---|
| 139 | #
|
---|
| 140 | # Could not find the configuration file.
|
---|
| 141 | #
|
---|
| 142 | echo >&2 "$0: $FSTAB: configuration file not found"
|
---|
| 143 | fi
|
---|
| 144 | #
|
---|
| 145 | elif test x"$replace" = xyes
|
---|
| 146 | then
|
---|
| 147 | #
|
---|
| 148 | # Found a conflicting active mount,
|
---|
| 149 | # but the 'replace' option WAS specified...
|
---|
| 150 | # Tear it down, and remount.
|
---|
| 151 | #
|
---|
| 152 | umount $MNTPATH
|
---|
| 153 | mount $MNTPATH
|
---|
| 154 | exit $?
|
---|
| 155 | #
|
---|
| 156 | else
|
---|
| 157 | #
|
---|
| 158 | # Found a conflicting active mount,
|
---|
| 159 | # and the 'replace' option was NOT specified...
|
---|
| 160 | # Display an appropriate diagnostic message, depending on
|
---|
| 161 | # whether the argument represented a directory path name,
|
---|
| 162 | # or a mount point, and bail out.
|
---|
| 163 | #
|
---|
| 164 | case $? in
|
---|
| 165 | 1) echo >&2 "$0: '$MNTPATH' is already mounted" ;;
|
---|
| 166 | 2) echo >&2 "$0: mount point '$MNTPATH' is already in use" ;;
|
---|
| 167 | esac
|
---|
| 168 | exit 1
|
---|
| 169 | fi ;;
|
---|
| 170 | #
|
---|
| 171 | 2)
|
---|
| 172 | #
|
---|
| 173 | # Two arguments specified...
|
---|
| 174 | # First is directory path name, second is mount point.
|
---|
| 175 | #
|
---|
| 176 | WINPATH=`echo "$1" | tr '\\\\' /`
|
---|
| 177 | MNTPATH=`echo "$2" | tr '\\\\' /`
|
---|
| 178 | #
|
---|
| 179 | if cat $MNTTAB | tr '\\' / | awk '
|
---|
| 180 | #
|
---|
| 181 | # Check that the mount point is not already in use;
|
---|
| 182 | # set exit status to:--
|
---|
| 183 | # 0: if no existing mount table entry matches;
|
---|
| 184 | # 1: if mount point already in mount table.
|
---|
| 185 | #
|
---|
| 186 | BEGIN { status = 0 }
|
---|
| 187 | /^#/ { $0 = "" }
|
---|
| 188 | $2 == "'$MNTPATH'" { status = 1 }
|
---|
| 189 | END { exit status }'
|
---|
| 190 | then
|
---|
| 191 | #
|
---|
| 192 | # Mount point not yet assigned...
|
---|
| 193 | # Update the mount table, to include the new specification.
|
---|
| 194 | #
|
---|
| 195 | echo -e "$WINPATH\t$MNTPATH" >> "$MNTTAB"
|
---|
| 196 | #
|
---|
| 197 | elif test x"$replace" = xyes
|
---|
| 198 | then
|
---|
| 199 | #
|
---|
| 200 | # The mount point is already in use,
|
---|
| 201 | # but the 'replace' option WAS specified...
|
---|
| 202 | # Tear it down, and remount.
|
---|
| 203 | #
|
---|
| 204 | umount $MNTPATH
|
---|
| 205 | echo -e "$WINPATH\t$MNTPATH" >> "$MNTTAB"
|
---|
| 206 | #
|
---|
| 207 | else
|
---|
| 208 | #
|
---|
| 209 | # Mount point is already in use,
|
---|
| 210 | # and the 'replace' option was NOT specified...
|
---|
| 211 | # Diagnose, and bail out.
|
---|
| 212 | #
|
---|
| 213 | echo >&2 "$0: mount point '$MNTPATH' is already in use"
|
---|
| 214 | exit 1
|
---|
| 215 | fi ;;
|
---|
| 216 | #
|
---|
| 217 | *)
|
---|
| 218 | #
|
---|
| 219 | # More than two arguments specified...
|
---|
| 220 | # Complain, and bail out.
|
---|
| 221 | #
|
---|
| 222 | echo >&2 "$0: incorrect number of arguments"
|
---|
| 223 | echo >&2 "usage: mount [--replace] [<win32path> <msyspath>]"
|
---|
| 224 | exit 2 ;;
|
---|
| 225 | esac
|
---|
| 226 | #
|
---|
| 227 | # On successful completion, ensure we set the exit status appropriately.
|
---|
| 228 | #
|
---|
| 229 | exit 0
|
---|
| 230 | #
|
---|
| 231 | # $RCSfile: mount,v $: end of file
|
---|